as of git version 1.9.3 (Apple Git-50) on mac how do i remove a git submodule? I am reading alot of outdated information with many developers telling me they wont work. Wh
I'm using Git version 2.16.2 and git rm
does the job mostly well:
git rm path-to-submodule
You can verify with git status
and git diff --cached
that this deinitializes the submodule and modifies .gitmodules
automatically. As always, you need to commit the change.
However, even though the submodule is removed from source control, .git/modules/path-to-submodule
still contains the submodule repository and .git/config
contains its URL, so you still have to remove those manually:
git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule
Keeping the submodule repository and configuration is intentional so that you can undo the removal with e.g. git reset --hard
.
You have the git submodule deinit
git submodule deinit <asubmodule>
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>
deinit
Un-register the given submodules, i.e. remove the whole
submodule.$name
section from.git/config
together with their work tree.Further calls to
git submodule update
,git submodule foreach
andgit submodule sync
will skip any unregistered submodules until they are initialized again, so use this command if you don’t want to have a local checkout of the submodule in your work tree anymore.If you really want to remove a submodule from the repository and commit that use
git rm
instead.If
--force
is specified, the submodule’s work tree will be removed even if it contains local modifications.
(adds to https://stackoverflow.com/a/1260982/342794)
List and locate the submodule section in .gitmodules
file. Say via terminal vi .gitmodules
. Example:
[submodule "submodules/afnetworking"]
path = submodules/afnetworking
url = https://github.com/CompanyName/afnetworking.git
Submodules can be used with local forks. For a long running projects, code may differ from original repo and might have some fixes. It's a good idea to verify if submodule code went through changes over the course of project. Example: Look at the logs, if it's pointing to master
branch or some local branch. exploring git logs to find modifications that were done via terminal. typically these are stored under a directory, my example, under submodules
directory.
User$ cd submodules/afnetworking
User$ git log
Remove the submodule section from .gitmodules, save the file. Example: git status
should show only following as modified
modified: .gitmodules
Stage the changes with git add .gitmodules
.
List and locate the submodule section in .git/config
files. Say via terminal vi .git/config
. Example:
[submodule "submodules/afnetworking"]
url = https://github.com/CompanyName/afnetworking.git
Remove the git cache sobmodule files. running git rm --cached submodules/afnetworking
(no trailing slash) would remove it successfully. Example:
User$ git rm --cached submodules/afnetworking
rm 'submodules/afnetworking' <-- terminal output
Remove the submodule files under .git
directory with rm -rf .git/modules/...
. Confirm it with git status
afterwards.
User$ rm -rf .git/modules/submodules/afnetworking/
User$ git status
On branch feature/replace-afnetworking-submodule-with-pod
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
deleted: submodules/afnetworking
Untracked files:
(use "git add <file>..." to include in what will be committed)
submodules/afnetworking/
Commit the changes. Confirm with git status
afterwards.
User$ git commit -m "Remove submodule afnetworking"
[feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
2 files changed, 4 deletions(-)
delete mode 160000 submodules/afnetworking
User$ git status
On branch feature/replace-afnetworking-submodule-with-pod
Untracked files:
(use "git add <file>..." to include in what will be committed)
submodules/afnetworking/
nothing added to commit but untracked files present (use "git add" to track)
Delete the untracked submodule files.
User$ rm -rf submodules/afnetworking
Delete the references from Xcode project. Build, fix compile and runtime issues.