用git子模块替换了第三方代码,现在我无法切换分支

时间:2011-10-01 07:31:04

标签: git git-submodules git-merge

这是故事: 我有2个git分支masterdevelop 我目前正在develop

我很久以来就在目录Vendor/MGTwitterEngine中包含了我的仓库中的第三方库的源文件。此代码已合并为master。

现在,在分支develop上,我删除了库并将其替换为git子模块并提交。

问题是我无法再切换回master分支。如果我尝试,我会收到以下错误:

The following untracked working tree files would be overwritten by checkout:
    Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.h
    Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.m
    Vendor/MGTwitterEngine/MGTwitterLibXMLParser.h
    Vendor/MGTwitterEngine/MGTwitterLibXMLParser.m
    Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.h
    Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.m
    Vendor/MGTwitterEngine/MGTwitterMessagesParser.h
    Vendor/MGTwitterEngine/MGTwitterMessagesParser.m
    ...
   Aborting

git认为子模块文件是“未跟踪”的,并且不会用相同位置的跟踪的非子模块文件替换它们。

如何解决这个问题?

2 个答案:

答案 0 :(得分:17)

不幸的是,我认为这只是使用子模块的一个缺点。这些问题在名为"Issues with Submodules" in Pro Git的部分中描述,但简而言之,最简单的解决方法是在切换到master分支之前将子模块目录移开:

mv Vendor Vendor.moved
git checkout master

同样,当您更改为develop时,您应该执行以下操作:

git checkout develop
mv Vendor.moved Vendor

答案 1 :(得分:0)

现在,它可以变得更容易。使用命令git checkout -f master