2014-07-17 66 views
0

[更新在底部]git pull --rebase失敗子模塊foreach,但成功在自己的目錄

這現在已經發生了兩次在過去十五分鐘。當我從父模塊發出以下命令時

git submodule foreach git pull --rebase 

它打印有關更新某些子模塊的消息,並且'是最新的。關於其他一些,直到停在與以下之一:

Entering 'foo.bar' 
Cannot pull with rebase: You have unstaged changes. 
Please commit or stash them. 
Stopping at 'foo.bar'; script returned non-zero status. 

我不記得在foo.bar作出任何更改。事實上,在此之前,我已經發布了git submodule foreach git status。所以我嘗試看看什麼是錯的,似乎有什麼不妥:

$ cd foo.bar/ 
14 07 17 12:38:03 [email protected] /c/git/mainbuild/foo.bar (staging) 
$ git st 
On branch staging 
Your branch is up-to-date with 'origin/staging'. 

nothing to commit, working directory clean 
14 07 17 12:38:08 [email protected] /c/git/mainbuild/foo.bar (staging) 
$ git pull --rebase 
remote: Counting objects: 19, done   
remote: Finding sources: 100% (10/10)   
remote: Total 10 (delta 5), reused 9 (delta 5)   
Unpacking objects: 100% (10/10), done. 
From ssh://git.wdf.sap.corp:29418/smp/server/dist/com.sap.mobile.platform.server.foo.bar 
    214e0c9..266b279 master  -> origin/master 
Current branch staging is up to date. 

那麼爲什麼它會失敗,子模塊的foreach?

UPDATE 看來git submodule是不是在這裏指責。我試過

git submodule -q foreach 'echo "cd $name; pwd; git pull --rebase; cd .."' | bash 

而且那也失敗了。然後我嘗試了一個新的cygwin bash的原始命令,這個命令從windows命令提示符開始,並沒有執行我的~/.bash_profile等。並且它成功了。所以還有其他的東西導致了這一點。

回答

1

顯然,這是我~/.git-prompt.sh這是越來越來源的非交互shell也引起。

問題就消失了我在~/.bashrc

保護 source ~/.git-prompt.sh; PS1=....[[ $- == *i* ]]
1

Git子模塊非常壞。我不確定自從我上次使用它以來他們是否解決了這個問題。但是,沒有更好的方式來更新子模塊分支,因爲你的git頭文件(我認爲這就是它所稱的)存儲當前提交的硬編碼很難更新的方式。我發現自己從字面上必須從回購庫中刪除整個子模塊,然後在每次更新時都將其退回。 (在我的鏈接中更好地解釋)

確保您的.git/configure已正確分配,並在更新子模塊時運行這兩個命令。

git submodule init 
git submodule update 

我仍然覺得使用它只是非常痛苦的。


有兩個帖子值得關注。

Overview of Gitsubmodules

Why Git Pull Doesn't Work