2013-05-07 52 views
2

我有一個存儲庫A,具有庫B作爲子模塊。 在一個理想的世界中,這是不可能發生的,但讓我們說,由於某種原因,我希望做一個互動的底墊在倉庫B.衍合的子模塊

如果我這樣做,並推動新的提交到遠程(使用git push origin master --force ),下一次我會克隆存儲庫中,並撥打:

git submodule update --init 

此命令就會失敗,因爲B的歷史被改寫,和git將無法找到指定的提交最初添加的子模塊乙給A帶。

我該怎麼辦?

刪除子模塊,然後重新添加?有更好的解決方案嗎?

謝謝!

回答

2

從你說的話,你強制更新回購B,但不更新回購A中的參考。所以你必須做的是更新它。

轉到回購A中的根目錄下,然後就可以使用下面的命令:

$cd /path/to/B 
$git fetch // fetch the newest commit of B 
$git checkout origin/master 

$cd /path/to/A 
$git diff // if all right, you will see some message like below 

    --- a/submodule/B 
    +++ b/submodule/B 
    @@ -1 +1 @@ 
    -Subproject commit ac0569b524b9e47e86cb0a6c83e2e64c07fd878b 
    +Subproject commit 84f9ac384242ded082feac5eeccfd608e2bab918 

$ git add . 
$ git commit -m 'message' 
$ git push // push the commit to A 

這些之後,你可以克隆回購A和再試git submodule update --init

+0

完美工作。謝謝! – 2013-05-08 08:23:54

+0

對於回購A中的舊承諾呢?他們會不會參考rebase之前製作的回購B的提交? – bcause 2016-12-14 01:59:19

0

要更新A/.gitmodules以反映B中的更改。現在在B的強制推送過程中,如果您丟失了一些參考,則更新將會中斷。

是什麼原因做力推?

+0

我要做一個力推因爲B的歷史被重寫了,所以遠程將不允許推動。我的問題是,當我將子模塊添加到A時,git存儲當前最新的提交sha1,因此下次我執行'$ git submodule update'時,它可以檢出該提交。但是,由於B中不存在提交的rebase,所以git無法克隆/更新子模塊。 – 2013-05-07 20:09:09