git - 您如何组织多个 git 存储库,以便将它们全部备份在一起?

标签 git backup

使用 SVN,我在服务器上保存了一个大型存储库,并在几台机器上 checkout 。这是一个非常好的备份系统,让我可以轻松地在任何机器上工作。我可以 checkout 一个特定的项目,提交并更新“主”项目,或者我可以 checkout 整个项目。

现在,我有一堆 git 存储库,用于各种项目,其中有几个在 github 上。我也有我提到的 SVN 存储库,通过 git-svn 命令导入..

基本上,我喜欢将我所有的代码(不仅仅是项目,还有随机的片段和脚本、一些东西,比如我的简历、我写的文章、我制作的网站等等)放在一个大的存储库中,我可以轻松地克隆到远程机器或内存棒/硬盘上作为备份。

问题是,因为它是一个私有(private)存储库,而 git 不允许 checkout 特定文件夹(我可以将它作为一个单独的项目推送到 github,但更改会出现在主存储库和子 repo )

可以使用 git 子模块系统,但它并没有按照我想要的方式运行(子模块是指向其他存储库的指针,并不真正包含实际代码,所以它没用用于备份)

目前我有一个 git-repos 文件夹(例如,~/code_projects/proj1/.git/~/code_projects/proj2/.git/),在对 proj1 进行更改后,我执行 git push github ,然后我将文件复制到 ~/Documents/code/python/projects/proj1/并进行一次提交(而不是单个 repo 中的大量提交)。然后执行 git push backupdrive1, git push mymemorystick

那么,问题是:您的个人代码和项目如何与 git 存储库保持同步和备份?

最佳答案

强烈建议不要将不相关的数据放在给定的 Git 存储库。创建新存储库的开销相当大 低,这是一个特性,可以保持 不同的谱系完全分开。

反对这个想法意味着结束不必要的纠结历史, 这使管理变得更加困难,而且——更多 重要的是——“考古学”工具不太有用,因为由此产生的 稀释。另外,正如您提到的,Git 假设“单位 克隆”是存储库,实际上必须这样做,因为 它的分布式特性。

一个解决方案是保留每个项目/包/等。作为它自己的 受祝福的层次结构下的存储库(即没有工作树), 喜欢:

/repos/a.git
/repos/b.git
/repos/c.git

一旦建立了一些约定,就变得微不足道了 应用管理操作(备份、打包、网络发布)到 完整的层次结构,其作用与 “单体”SVN 存储库。还使用这些存储库 变得有点类似于 SVN 工作流,除了一个 可以使用本地提交和分支:

svn checkout   --> git clone
svn update     --> git pull
svn commit     --> git push

您可以在每个工作克隆中拥有多个 Remote ,以便于 多方同步:

$ cd ~/dev
$ git clone /repos/foo.git       # or the one from github, ...
$ cd foo
$ git remote add github ...
$ git remote add memorystick ...

然后您可以从每个“源”获取/pull 、工作和提交 本地,然后推送(“备份”)到这些 Remote 中的每一个,当你 准备好了类似的东西(注意这如何 push 相同提交 以及每个 Remote 的历史记录!):

$ for remote in origin github memorystick; do git push $remote; done

转换现有工作存储库的最简单方法 ~/dev/foo 进入这样一个裸存储库可能是:

$ cd ~/dev
$ git clone --bare foo /repos/foo.git
$ mv foo foo.old
$ git clone /repos/foo.git

这主要等同于 svn import——但不会抛出 现有的“本地”历史。

注意:子模块是一种包含共享相关的机制 血统,所以我确实不认为它们是适合的工具 您要解决的问题。

关于git - 您如何组织多个 git 存储库,以便将它们全部备份在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36862/

相关文章:

eclipse - 在 Egit 中导入项目的正确方法?

git - gradle 对另一个项目的三角依赖

Git:查找所有标签,可从提交中访问

sql - 如何使用最新备份更新我的本地 SQL Server 数据库?

tfs - 如何自动备份 TFS 2010

git - 将git命令的仅错误重定向到日志文件

GitHub 添加用户以在 repo 上一起工作......?

wordpress - 执行 HTTP 请求时出错 : error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure.(Managewp 到保管箱备份)

git - 有什么办法可以将配置文件自动备份到 github 吗?

mysql - 由于 < 字符,无法在 Powershell 上运行数据库还原