首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动镜像git存储库

自动镜像git存储库
EN

Stack Overflow用户
提问于 2010-08-27 17:56:11
回答 3查看 15K关注 0票数 28

使用外部Subversion存储库的副作用之一是在每次提交时自动进行异地备份。

我想用Git来实现同样的效果。

也就是说,每次提交到我的本地存储库都会自动提交到一个外部存储库,因此两个存储库总是同步的。

我想,提交后挂钩将是可行的方法。有没有人有具体的例子?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-27 18:03:00

为此,我编写了一个提交后挂钩。钩子本身很简单;只需向您的.git/hooks/目录添加一个名为post-commit的文件,其中包含以下内容:

代码语言:javascript
复制
git push my_remote

post-commit文件应该是可执行的。还要确保您添加了一个名为my_remote的合适的remote存储库,这样这个钩子才能工作。

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

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

代码语言:javascript
复制
git push my_remote -f --mirror
票数 27
EN

Stack Overflow用户

发布于 2021-11-05 18:22:01

我只想补充说,我也有类似的问题,但在我的情况下,我需要每次推送到私有远程存储库,以自动镜像到另一个远程作为备份。我的本地机器也不能直接连接到镜像存储库,所以它必须从服务器端推送。

为此,我必须在远程存储库(在hooks/目录下)上创建一个post-receive挂钩。然后,按照Manoj's answer的建议,我只需在post-receive文件中添加以下命令:

代码语言:javascript
复制
git push --mirror my_remote

希望这能帮助其他像我一样偶然发现谷歌这个问题的人。

票数 0
EN

Stack Overflow用户

发布于 2022-01-15 13:06:00

GitBitLabHub允许你使用简单的网络钩子在Bitbucket / Gitlab / Github之间自动镜像存储库。在引擎盖下,它执行以下操作:

代码语言:javascript
复制
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch --prune
git remote set-head origin -d
git branch -a || 'true'
git push --prune dest +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*

您只需设置部署密钥和webhooks:

  1. 为源和目标存储库生成ssh密钥:

代码语言:javascript
复制
ssh-keygen -t rsa -f ~/.ssh/project_id_rsa

它将生成两个密钥,~/.ssh/_id_rsa的私钥和~/.ssh/project_id_rsa.pub.

  • The公钥的公钥用作部署密钥,而私钥应该在SRC_DEPLOY_KEY和DEST_DEPLOY_KEY环境中使用,并将此公钥用作源和目标存储库的部署密钥。根据平台的不同,它被称为部署密钥或访问密钥。请参见how to add Deploy/Access key to bitbucketbitbucket access keysgitlab,with read-only access将公钥添加到源存储库。
  • 使用源资料档案库中的access.
  1. Create 将公钥添加到目标存储库。使用默认设置应该就足够了。请参见how to create a webhook in bitbucketgitlabgithub.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3583061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档