Git:有没有办法自动推送子树?

时间:2017-10-12 16:21:30

标签: git githooks git-subtree

我有一个很大的私人存储库,它在本地网络上维护。我想在该网络之外自动推送该存储库的子树。我需要它很简单:

*任务* 有人推送到本地远程存储库 - >子树会自动推送到其他存储库

我不确定这是否可以通过服务器端钩子实现,因为AFAIK没有从裸遥控器推送子树这样的事情。我提出了两个想法:

  • 我可以在服务器上克隆遥控器并自动拆分克隆遥控器中的子树。这并没有真正帮助,因为我不知道如何自动拉取子树(其他人也有this problem)。
  • 另一个想法是编写一个自定义客户端post-commit-hook并让每个用户安装它,但这很糟糕,不是吗? Git书特别指出policies should be enforced on server side

有没有一种简单的方法来实现这样的目标?或者这是不可能的,它只是git滥用?

1 个答案:

答案 0 :(得分:1)

嗯,我有点尴尬。显然这比我想象的要容易得多。这是一个仓促的解决方案,建立在@wrzasa建议的基础上:

  1. 在你推送的服务器上克隆你的存储库,就像这样(dir.git是一个简单的回购):

    .
    |- dir.git
    |- dir
    
  2. dir执行:git remote add <remote-name> <remote-address>

  3. dir.git/hooks/post-receive put:

    #! /bin/bash
    unset GIT_DIR
    cd ../dir
    git pull ../dir.git
    git subtree split --prefix=<subdir-in-dir> --branch=<branch-name>
    git push <remote-name> <branch-name>
    

    请记住使post-receive可执行。如果您想知道为什么需要unset GIT_DIR,请参阅this answer

  4. 这就是它。现在,只要有人推送到dir dir.git下的<subdir-in-dir>子树,就会被推送到<remote-name>

相关问题