当前位置:  开发笔记 > 编程语言 > 正文

你如何组织多个git存储库,以便所有这些存储库一起备份?

如何解决《你如何组织多个git存储库,以便所有这些存储库一起备份?》经验,为你挑选了2个好方法。

使用SVN,我有一个大的存储库,我保存在服务器上,并在几台机器上签出.这是一个非常好的备份系统,让我可以轻松地在任何机器上工作.我可以签出一个特定的项目,提交并更新"主"项目,或者我可以检查整个事情.

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

基本上,我喜欢把我所有的代码(不仅仅是项目,而是随机的片段和脚本,像我的简历,我写过的文章,我制作的网站等等)放在一个大的存储库中,我可以很容易地克隆到远程机器,或记忆棒/硬盘作为备份.

问题是,因为它是一个私有存储库,并且git不允许检出特定文件夹(我可以将其作为一个单独的项目推送到github,但是更改会出现在master-repo和sub-回购)

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

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

所以,问题是:你的个人代码和项目如何使用git存储库,并保持同步和备份?



1> Damien Diede..:

强烈建议不要在给定的Git存储库中放入不相关的数据.创建新库的开销是相当低的,这是一个特点,使得它可以保持不同的谱系完全分开的.

战斗这个想法意味着结束不必要的纠结历史,这使得行政管理更加困难 - 更重要的是 - "考古学"工具由于产生的稀释而变得不那么有用.另外,正如您所提到的,Git假定"克隆单元"是存储库,并且由于其分布式特性,实际上必须这样做.

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

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

一旦建立了一些约定,将管理操作(备份,打包,Web发布)应用于完整的层次结构就变得微不足道了,它完全不同于"单片"SVN存储库.使用这些存储库也变得有点类似于SVN工作流,还 可以使用本地提交和分支:

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

您可以在每个工作克隆中使用多个遥控器,以便在多方之间轻松实现同步:

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

然后,您可以从每个"源"获取/拉取,在本地工作和提交,然后在准备好类似的东西时将("备份")推送到每个远程控制器(注意如何将相同的提交和历史推送到每个遥控器!):

$ 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中缺少一些东西.我无法准确地确定它是什么或做什么.
如果您托管自己的项目和/或它们都是开源的,那么这个想法才有意义.否则你需要在github上你需要无限的私人项目,这可能会花费很多
而不是"for remote in origin github memorystick; do git push $ remote; done",还可以配置一个特殊的遥控器,用一个命令推送到许多遥控器:http://stackoverflow.com/questions/36862/how- do-you-organiz-multiple-git-repositories/779812#779812.(在某些情况下可能更方便.)
我认为缺少的东西是git可以通过子树将它的对象分开,以便单个"存储库"可以由单独的同步但可分离的单元组成(单独下载而不用其余部分),以便人们可以处理特定的子集不知道其余部分.

2> imz -- Ivan ..:

我想在他推荐的地方添加达米恩的答案:

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

您可以使用1命令设置一个特殊的遥控器以推送到所有单独的真实遥控器; 我在http://marc.info/?l=git&m=116231242118202&w=2找到了它:

所以对于"git push"(多次推送相同的分支是有意义的),你实际上可以做我做的事情:

.git/config包含:

[remote "all"]
url = master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
url = login.osdl.org:linux-2.6.git

现在git push all master将把"master"分支推送到这两个
远程存储库.

您还可以使用构造保存自己键入两次URL:

[url ""]
    insteadOf = 

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有