自动推送到GitHub或其他Git服务上的特定文件夹

时间:2016-11-12 17:27:53

标签: git github

情况: 我有一个Git Repo文件;让我们称它为机器人"。当我提交Robot时,我想要一些东西将我的新提交自动提交到特定文件夹下的另一个大型仓库。

问题: 我不知道该怎么做。我知道GitLab有镜像存储库,但它反映了整个存储库,它不会对特定的文件夹进行操作。

编辑:

这是一个类比: 大型回购就像CDN,Robot就是一个框架。

1 个答案:

答案 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调用到另一台服务器。

  1. 在serverB上创建存储库:uri://serverB/robot.git

  2. 在serverA上创建一个裸存储库

    git create --bare myrepo.git
    
  3. 将一个遥控器添加到裸存储库

    git remote add origin uri://serverB/robot.git
    
  4. serverA 上的裸存储库中添加post-receive挂钩

    $ cat > myrepo.git/hooks/post-receive << EOF
    git push --all
    git push --tags
    EOF
    
  5. 在桌面上
  6. ,克隆uri://serverA/myrepo.git,添加文件并推送它们。

    文件会自动转发,前提是实际上允许在服务器上运行git-hook的用户推送到serverB。

  7. 如果涉及多个工作副本和多个用户,我发现这是有利的。 但是有两个问题:

    1. 您需要能够在服务器上创建post-receive挂钩。这通常意味着您必须具有对服务器的管理访问权限(例如,能够ssh进入服务器;或具有其他超级牛权力)。 这会将github排除在 serverA

    2. 之外
    3. 几乎在所有情况下,您都必须 serverB 进行身份验证。 例如。您可以使用无密码ssh-keys(存储在服务器上)。 (github允许您添加Deploy Keys对每个存储库的写访问权限。)

    4. 另见Git push to one remote repo which deploys to multiple other remote repositories