2013-08-06 89 views
5

我們有一個依賴於其他git倉庫代碼的git倉庫。我們使用通常的子模塊來表達這種關係,並確保支持代碼位於用戶目錄結構中的標準位置。更新支持的代碼很簡單就夠了:是否可以強制更新git子模塊?

  • 進行了更改子模塊
  • 提交它
  • 推它
  • CD到主存儲庫
  • 提交更改子模塊

問題就來了另一邊。這種變化之後,對其他開發人員得到一個完整的,一致的代碼,他們需要執行三個命令:

  • 混帳拉(更新主存儲庫)
  • git的子模塊的init(萬一有什麼新添加子模塊)

它的證明很難培養開發商做所有這些,特別是因爲在我們的所有其他存儲庫,它不包含子項目,該

  • 混帳子模塊更新(更新子模塊)拉就足夠了。其結果是開發人員有時會使用過時版本的子模塊來處理代碼,從而導致虛假問題,這些虛假問題可能會耗費時間來追蹤。除了編寫一個執行所有三個命令並堅持「使用這個!」的shell腳本以使其更加自動化之外,還有什麼方法呢?

  • 回答

    4

    你可以嘗試,並要求你的同事:

    git config --global fetch.recurseSubmodules on-demand 
    

    git config man page

    fetch.recurseSubmodules

    此選項既可以設置爲一個布爾值或到片需求。

    • 將其設置爲一個布爾值的變化獲取和拉時設置爲true,無條件遞歸到子模塊或當設置爲false並不遞歸的行爲。
    • 當設定爲點播(默認值),獲取並拉動只會遞歸到當其子項目會檢索一個提交,更新子模塊的參考填充的子模塊。

    另一種方法是請他們做一個更復雜的命令:

    git pull --recurse-submodules=on-demand 
    

    上面提到的git config設置的優點,讓開發商做一個簡單的git pull

    +0

    感謝。這很好。 –

    0

    我能想到的兩種解決方案。

    寫劇本:

    #!/bin/sh 
    
    git pull 
    git submodule init 
    git submodule update 
    

    添加一個Git別名:

    #in ~/.gitconfig 
    [alias] update-all = !git pull && git submodule init && git submodule update 
    
    +0

    @VonC有一個非常優越的答案。我想這就是你正在尋找的。^_ ^ –