Here's the story:
I have 2 git branches master
and develop
I'm currently on develop
.
I've long since had the source files of a third party library included in my repo in the directory Vendor/MGTwitterEngine
. This code was already merged into master.
Now, on branch develop
, I've removed the library and replaced it with a git submodule and committed.
The problem is I can no longer switch back to the master
branch. If I try, I get the following error:
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 thinks the submodule files are "untracked" and won't replace them with the tracked, non-submodule files in the same location.
How can I get around this issue?
This is because of some major drawbacks around git submodules, such as being locked to a specific version of the outer repo, the lacking of effective merge management, and the general notion that the Git repository itself doesn't really know it's now a multi-module repository.
Access the "Source Control" tab on the left side of VSCode. Click on the "three small dots" next to the refresh button. Click on the "Checkout to..." option. Choose the branch you want to switch to.
You can use the git switch - command to undo any changes you make and return to your previous branch. If you instead want to keep your changes and continue from here, you can use git switch -c <new-branch-name> to create a new branch from this point.
Unfortunately, I think this is just one of the drawbacks of using submodules. These problems are described in a section called "Issues with Submodules" in Pro Git, but in short, the simplest workaround is to move the submodule directory out of the way before switching to the master
branch:
mv Vendor Vendor.moved
git checkout master
Similarly, when you change to develop
, you should do:
git checkout develop
mv Vendor.moved Vendor
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With