情况: 我有一个Git Repo文件;让我们称它为机器人"。当我提交Robot时,我想要一些东西将我的新提交自动提交到特定文件夹下的另一个大型仓库。
问题: 我不知道该怎么做。我知道GitLab有镜像存储库,但它反映了整个存储库,它不会对特定的文件夹进行操作。
编辑:
这是一个类比: 大型回购就像CDN,Robot就是一个框架。
答案 0 :(得分:1)
基本上有两种方法可以将存储库镜像到多个位置:
客户端(一次推送到两个存储库)
服务器端(仅推送到单个 serverA ,让服务器将推送转发到另一个 serverB )
如果您主要使用单个工作副本(即:您只将存储库克隆到单个计算机;并在那里完成所有工作),并且带宽不是问题(并且由于git主要处理源代码,在大多数情况下应该是真的),最简单的方法是在工作副本(或副本)中添加两(2)remote
个:
git clone uri://serverA/myrepo.git
cd myrepo
git remote set-url --add --push origin uri://serverB/robot.git
git push
这里唯一的缺点是,无论何时重新克隆,都必须设置额外的push-url。
另见Git - Pushing code to two remotes
您还可以部署服务器端post-receive
挂钩,只需将git push
调用到另一台服务器。
在serverB上创建存储库:uri://serverB/robot.git
在serverA上创建一个裸存储库
git create --bare myrepo.git
将一个遥控器添加到裸存储库
git remote add origin uri://serverB/robot.git
在 serverA 上的裸存储库中添加post-receive
挂钩
$ cat > myrepo.git/hooks/post-receive << EOF
git push --all
git push --tags
EOF
,克隆uri://serverA/myrepo.git
,添加文件并推送它们。
文件会自动转发,前提是实际上允许在服务器上运行git-hook的用户推送到serverB。
如果涉及多个工作副本和多个用户,我发现这是有利的。 但是有两个问题:
您需要能够在服务器上创建post-receive
挂钩。这通常意味着您必须具有对服务器的管理访问权限(例如,能够ssh
进入服务器;或具有其他超级牛权力)。
这会将github
排除在 serverA 。
几乎在所有情况下,您都必须对 serverB 进行身份验证。
例如。您可以使用无密码ssh-keys
(存储在服务器上)。
(github允许您添加Deploy Keys
对每个存储库的写访问权限。)
另见Git push to one remote repo which deploys to multiple other remote repositories