自动保持辅助仓库与主仓库同步?

Geo*_*ins 31 git synchronization repository

我们有两层设置.

我们有一个主存储库(下面称为"主要").

还有一个二级存储库(下面称为"二级"),它是这样创建的:

$ git clone --bare --shared $REPO_A/primary secondary.git
Run Code Online (Sandbox Code Playgroud)

在辅助存储库上工作的人将来自主存储库的分支视为只读,但是将这些分支基于这些分支.

我们希望每天一次将辅助存储库与主存储库同步.

也就是说,我们希望提交到主服务器的提交和新分支对于在辅助存储库中工作的人员是可见的(下次他们执行拉动).

我们不希望这是对称的,即对于在主存储库之外工作的人来说,对辅助存储库的活动不会变得可见.

理想情况下,我想运行一台运行在机器上的cron作业,该辅助存储库以某种方式从主服务器获取新数据并自动将其包含到辅助服务器中.

我希望有一个简单的方法可以做到这一点(我希望有人在这里告诉我有).

如果我要写一个脚本来做它,它会做:

由于我是git的新手,如果我没有考虑某些基本问题,我不会感到惊讶吗?

就像我说的那样,我希望有一种更简单的方法可以做到这一点,即有人说"哦,不要那么做,只做......".

Von*_*onC 31

哦,不要那么做,只是这样做:

git --bare fetch
Run Code Online (Sandbox Code Playgroud)

;)

(例如,请参阅此旧线程)
如果您已将相关的远程原点添加到您的裸仓库中,则可以依次获取每个原点.

  • 这看起来像我想要的.感谢您的链接 - 从这些我得到:`$ cd secondary.git; git --bare fetch origin'+ refs/heads/*:refs/heads/*'`作为一名经验丰富的UNIX黑客,我总是喜欢真正理解我的目标.然而,大多数Git文档似乎都是针对非常简单的Alice和Bob案例,而且任何更复杂的文档都呈现为cookbook风格.你能为Git推荐一本好的_in-depth_书或Web文档吗? (4认同)
  • @George:是的:http://www.newartisans.com/2008/04/git-from-the-bottom-up.html,尽管http://stackoverflow.com/questions/315911/git-for-beginners- the-definitive-practical-guide提供了许多其他有趣的链接.http://tom.preston-werner.com/2009/05/19/the-git-parable.html也很好. (4认同)

Dus*_*tin 12

你可以做一个git clone --bare --mirror并定期做一个git fetch来实现这个目标.

我使用我在node.js中编写的名为gitmirror的工具来实现它,我在家里的机器上运行以接收来自github的webhook以及ad-hoc钩子以同步提交.

对于非github示例,我有一个用于couchdb备份的repo,它每小时提交一次.cron工作基本上归结为:

# do some backup stuff
git commit -qam "Backup `date`" >> dump.log 2>&1
Run Code Online (Sandbox Code Playgroud)

从那里,我有一个post-commit hook(.git/hooks/post-commit),如下所示:

#!/bin/sh
curl -sS http://my.home.machine/gitmirror/bak/repo-name.git
Run Code Online (Sandbox Code Playgroud)

你可以通过从接收方推动来完成同样的事情.这具有在正常情况下发射和遗忘有效载荷的优点.