如何更新git clone --mirror?

J. *_*uni 133 git mirror git-fetch git-clone git-remote

我创建了一个git存储库来镜像一个实时站点(这是一个非裸的git存储库):

git clone --mirror ssh://user@example.com/path/to/repo
Run Code Online (Sandbox Code Playgroud)

现在,要保持此镜像克隆更新其远程源的所有更改,我必须使用哪个或哪些命令?

我想保持一切更新:提交,引用,钩子,分支等.

谢谢!

ral*_*nja 199

这是您需要在镜像上执行的命令:

git remote update
Run Code Online (Sandbox Code Playgroud)

  • 'git remote update --prune'将执行所有这些操作,但在从原始存储库中删除分支时删除分支. (12认同)
  • 我也想知道git fetch的区别是什么. (11认同)
  • 这是一个很好的答案,可以解释更多:http://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare (4认同)

J. *_*uni 7

关于提交,引用,分支和" 等等 ",Magnus回答只是工作(git remote update).

但不幸的是,没有办法clone/镜像/ update 钩子,因为我想...

我发现这个非常有趣的线程有关克隆/镜像钩子:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

我学会了:

  • 钩子不被视为存储库内容的一部分.

  • 有更多的数据,比如.git/description文件夹,不会被克隆,就像钩子一样.

  • hooksdir 中出现的默认挂钩来自TEMPLATE_DIR

  • templategit上有这个有趣的功能.

因此,我可能会忽略这个"克隆钩子的事情",或者rsync考虑到我的镜像的目的(仅用于其他克隆的备份+源),然后选择策略.

好吧......我会忘记钩子克隆,并坚持下去git remote update.

  • Sehe刚刚指出,不仅"钩子"不是由clone/ updateprocess 管理的,而且还有stashes,rerere等等......所以,对于严格的备份,rsync或者等效的方法真的是要走的路.因为在我的情况下这不是真的必要(我可以负担得起没有挂钩,藏匿等),就像我说的那样,我会坚持到remote update.

谢谢!改进了我自己的"git-fu"...... :-)


seh*_*ehe 5

请参阅此处:Git 不会在后续克隆中克隆所有分支?

如果你真的想要通过拉分支而不是push --mirror,你可以看看这里:

git 裸存储库中的“fetch --all”不会将本地分支同步到远程分支

该答案提供了有关如何相对轻松地实现这一目标的详细步骤: