github 子模块更改后,update整个项目失败
天蓬老师
天蓬老师 2017-04-21 11:18:12
0
2
664

今天把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/모듈/경로 git 서브모듈 초기화 git 하위 모듈 업데이트

大家讲道理

git의 하위 모듈은 정말 함정입니다. 일반적으로 저는 각 하위 모듈을 별도의 git 창고로 관리하는데 괜찮습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿