160

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

git clone --mirror ssh://user@example.com/path/to/repo

现在,要让这个镜像克隆更新来自其远程源的所有更改,我必须使用哪些命令?

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

谢谢!

4

3 回答 3

238

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

git remote update
于 2011-05-27T11:12:19.780 回答
8

关于提交、引用、分支和“等等”,Magnus 的回答很有效(git remote update)。

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

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

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

我学会了:

  • 挂钩不被视为存储库内容的一部分。

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

  • 出现在hooks目录中的默认钩子来自TEMPLATE_DIR

  • git 上有这个有趣template的功能。

因此,考虑到我的镜像的目的(仅用于其他克隆的备份 + 源),我可能会忽略这个“克隆钩子的东西”,或者采取rsync策略。

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

  • Sehe 刚刚指出,不仅“钩子”不由clone/update进程管理,而且还有 stash、rerere 等……因此,对于严格的备份rsync或等效备份,确实是要走的路。因为在我的情况下这不是必需的(我可以负担得起没有钩子、藏匿处等),就像我说的那样,我会坚持使用remote update.

谢谢!改进了一些我自己的“git-fu”... :-)

于 2011-05-27T14:55:21.473 回答
5

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

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

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

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

于 2011-05-27T11:56:38.987 回答