自动镜像git存储库

And*_*ker 23 git version-control dvcs

使用外部Subversion存储库的一个副作用是在每次提交时获得自动异地备份.

我想用Git实现同样的目标.

即每次提交到我的本地存储库都会自动提交到外部存储库,因此这两个存储库始终保持同步.

我想,一个post-commit钩子就可以了.有没有人有这方面的具体例子?

Man*_*dan 21

我为此目的写了一个post-commit钩子.钩本身很简单; 只需使用以下内容添加一个名为post-commit您的.git/hooks/目录的文件:

git push my_remote
Run Code Online (Sandbox Code Playgroud)

post-commit文件应该是可执行的.还要确保添加一个合适的远程存储库,其中my_remote包含此挂钩的名称.

我还创建了一个post-merge指向的符号链接post-commit.这是可选的.如果您这样做,您也将在合并后自动同步.

更新:如果您想确保您的服务器和镜像不会失去同步,并确保所有分支也都备份,您的post-commit钩子可以使用:

git push my_remote -f --mirror
Run Code Online (Sandbox Code Playgroud)

  • 您可能希望使用`push -f --mirror`以便它始终成功(即使存在非快速更改),因此它将是带有*all*refs的完整镜像.(否则,如果添加新分支,它将不会被推送,因为它不存在于镜像中,并且默认是推送匹配的分支.) (8认同)
  • 还有任何剩余的场景,回购可能会变得不同步吗?我该如何检查(并重新同步).人们可以承诺外部回购吗? (2认同)