我创建了一个 git 存储库来镜像一个实时站点(这是一个非裸 git 存储库):
git clone --mirror ssh://user@example.com/path/to/repo
现在,要让这个镜像克隆更新来自其远程源的所有更改,我必须使用哪些命令?
我想保持一切更新:提交、引用、钩子、分支等。
谢谢!
我创建了一个 git 存储库来镜像一个实时站点(这是一个非裸 git 存储库):
git clone --mirror ssh://user@example.com/path/to/repo
现在,要让这个镜像克隆更新来自其远程源的所有更改,我必须使用哪些命令?
我想保持一切更新:提交、引用、钩子、分支等。
谢谢!
这是您需要在镜像上执行的命令:
git remote update
关于提交、引用、分支和“等等”,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
。
clone
/update
进程管理,而且还有 stash、rerere 等……因此,对于严格的备份rsync
或等效备份,确实是要走的路。因为在我的情况下这不是必需的(我可以负担得起没有钩子、藏匿处等),就像我说的那样,我会坚持使用remote update
.谢谢!改进了一些我自己的“git-fu”... :-)
请参见此处:Git 不会在后续克隆中克隆所有分支?
如果你真的想要通过拉分支而不是push --mirror
,你可以看看这里:
git 裸存储库中的“fetch --all”不会将本地分支同步到远程分支
该答案提供了有关如何相对轻松地实现该目标的详细步骤: