2017-10-12 107 views
2

我有一個很大的私有存儲庫,它保存在本地網絡上。我想自動將該存儲庫的子樹推到該網絡之外。我需要的是簡單的:Git:有沒有辦法自動推送子樹?

*任務*有人推到本地遠程倉庫 - >子樹被自動推送到其他一些庫

我不知道這是否可以用一個服務器來實現因爲AFAIK不存在從裸露的遙控器推動子樹這樣的事情。我想出了兩個想法:

  • 我可以在服務器上克隆遠程服務器,並自動將克隆的遠程子樹分割。這並沒有真正的幫助,因爲我不知道如何自動拉取子樹(其他人也有this problem)。
  • 另一個想法是編寫一個自定義的客戶端post-commit-hook,並讓每個用戶都安裝它,但這太可怕了,不是嗎? Git書特別指出policies should be enforced on server side

有沒有簡單的方法來實現這樣的事情?或者這是不可能的,它只是混帳濫用?

+0

您可以將裸露的遠程存儲庫上的post-receive掛鉤推送到另一個遠程存儲庫,那麼問題是什麼? – wrzasa

+0

@wrzasa嘿,謝謝你的提問。也許我沒有把這個部分弄清楚:你能從裸露的遙控器中推送*子樹*嗎?我想,因爲在裸露的遙控器上沒有這樣的工作樹,所以你不能真正指定一個子樹。 E:我編輯了這個問題以清楚地說明 – jjj

+1

沒有使用子樹,但是你可以隨時在你的鉤子中檢出你的回購到一個臨時目錄,然後做你需要的任何東西。 – wrzasa

回答

0

嗯,我有點尷尬。顯然這比我想象的要容易得多。這裏是一個建立在@wrzasa建議草草解決方案:

  1. 克隆你的服務器上的存儲庫,你正在推動,像這樣(dir.git是裸回購):

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

  3. dir.git/hooks/post-receive地說:

    #! /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

就是這樣。現在每當有人推到dir遠程(即dir.git)子樹lib將被推到<remote-name>

相關問題