github 子模組更改後,update整個專案失敗
天蓬老师
天蓬老师 2017-04-21 11:18:12
0
2
659

今天把vim的配置文件以及插件托管在github上,其中vim插件采用的是git submodule托管。其中

git submodule add git://github.com/xuhdev/SingleCompile.git bundle/SingleCompile

之後`git status'了以下,結果出現了這樣的提示:

....
#   modified:   bundle/SingleCompile(untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")

然後看了How to get rid of git submodules untr...,按照上麵的方法在SingleCompile子模塊中寫了.gitignore忽略掉未跟蹤文件,然後提交SingleCompile(為後麵的失敗埋下了伏筆)。

之後為了測試能否恢複我的vim配置。就在另一台機上

git clone http://github.com/xuelangZF/vim_backup.git ~/.vim 
cd ~/.vim   
git submodule init  
git submodule update 

結果SingleCompile插件果真無法clone, 錯誤提示

fatal: reference is not a tree: 38ae49037e1e8c31484cac973941328be318e6aa

原因是我在本地提交了SingleCompile(最後一步提交的hash值為38ae49037e1e8c31484cac973941328be318e6aa),但沒有push到SingleCompile的官網上,因此自然無法從官網得到38ae49這個分支。

然後我嚐試:

1. 在github備份倉庫裏麵刪除SingleCompile:

rm -rf bundle/SingleCompile
git rm -r bundle/SingleCompile
git add .
git commit -m "..."
git push origin_vim

另外刪除了.gitmodules和 .git/config中相關的配置節點,之後重新用

git submodule add git://github.com/xuhdev/SingleCompile.git bundle/SingleCompile

添加子模塊,結果git恢複了我之前刪除的版本:38ae49037e1e8c31484cac973941328be318e6aa。

2. 不死心的我又嚐試撤銷對SingleCompile提交

git revert HEAD

結果update的時候還是不行,這次無法獲得樹26460a12eb87948430f34fa0bb15fc264f368aac(這個是我撤銷提交的提交校驗碼,囧..)

問題:有沒有辦法讓SingleCompile正常鏈接到官方版本,而不是我的本地提交。

2013.4.8 11:32

參考了How do I remove a Git submodule,發現還要: rm -rf .git/modules/$submodulepath, 不然重新添加子模塊實際上是從.git/modules/$submodulepath複製過去的。(stackoverflow上采納的正確答案竟然都沒有說明這一點,真是坑人)。

不過不知道有沒有辦法將我本地對插件的更改也放在這個項目裏(不是合並到子模塊插件作者的分支),並且能正常的clone,然後update下來。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
Peter_Zhu

我解決的實際步驟是 rm -rf 路徑 rm -rf rm -rf .git/modules/路徑 git submodule init git submodule update

大家讲道理

git 裡面的 submodule 確實是個坑,一般我做的時候都是將每一個 submodule 都當作一個單獨的 git倉庫 來管理,就行了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板