2017-07-28 55 views
0

我需要經常碰撞存儲庫的子模塊。我的一些子模塊使用分支master,一些使用development。現在我只知道如何正確處理版本git submodule foreach git pull origin BRANCHNAME。當我到達使用相反分支的分支時,這將失敗並退出。例如,如果我與主人一起運行,我會得到以下錯誤導致命令退出。如何碰撞特定的git子模塊?

fatal: Couldn't find remote ref master 
Stopping at 'submodules-dir/repo-that-uses-development-branch'; script 
returned non-zero status. 

有沒有辦法要麼git submodule,只輸入一個分支,這樣我就可以拉下分公司變更一次一個?或者是否有辦法過濾出分支名稱,以便git submodule foreach git pull origin只會拉出當前每個子模塊使用的分支。

回答

0

每個子模塊是一個普通的存儲庫。特別的是,它通常在分離的HEAD模式下,即不在任何分支上。

你可以,但是,record a branch name for each submodule in that submodule's superproject

-b,倉庫的--branch

分公司添加爲子模塊。分支的名稱爲 ,其記錄爲submodule.<name>.branch.gitmodulesupdate --remote。一個特殊的價值。用於指示子模塊中分支的名稱 應該與當前存儲庫中當前分支的名稱相同。

然後,您可以運行git submodule update --remote

此選項僅適用於update命令。使用子模塊的遠程跟蹤分支的狀態,而不是使用超級項目的已記錄的SHA-1來更新子模塊。使用的遠程分支是遠程的(branch.<name>.remote),默認爲origin。遠程分支使用的默認值爲master,但可以通過在.gitmodules.git/config(以.git/config優先)中設置submodule.<name>.branch選項來覆蓋分支名稱。

(旁白:這意味着如果你git config在上層項目的具體分支,即覆蓋保存在.gitmodules文件默認配置.gitmodules文件,因爲它是一個普通的版本控制下的文件,被隨身攜帶在上層項目和存在於任何新的克隆,而.git/config設置專用於當前的上層項目克隆。)

這適用於任何支持的更新程序(--checkout--rebase等)。唯一的變化是目標SHA-1的來源。例如... [snip]

(有關詳細信息和示例,請參閱the linked documentation)。