Removing a git submodule
I have been using git for quite a while now and am very comfortable with the bread and butter
commands such as git clone
, git commit
. git pull
, etc. I love the command line so using some aliases cuts down on typing and speeds up my commit workflow. My motto is commit often and commit small :)
Git Submodules
One of the things that I had really no idea about was the git submodules. I knew of the use of them but never ventured into the maze that git submodules can be. According to the git bible:
Submodules allow you to keep a Git repository as a subdirectory of another Git repository. This lets you clone another repository into your project and keep your commits separate.
The project
So lately I have been toying with the idea to introduce the Zephir documentation repository as a submodule to the main repository. This would allow me to pull the code from the main repo easily. The reason for the two repositories if anyone is curious, is that we keep all the versions (as branches) in the zephir-docs
repository and also have an intergration with the excellent translation platform Crowdin. They handle all the translations to various languages that Phalcon/Zephir contributors submit, and after that they issue pull requests through their integration, to our Github repository. This way we get the translated documents often and then need to just update our website.
In an effort to reduce maintenance and allow for a much faster deployment method, I have been experimenting with Jekyll and Github Pages. To achieve what I wanted I had to have a main site which would serve all the content and also have one submodule per version from the zephir-docs
repository.
Messing up
I added the submodule using
$ mkdir 0.11
$ cd 0.11
$ git submodule add -b 0.11 [email protected]:niden/zephir-docs.git .
Sadly (for me) I fat fingered the command and now I am left with an unusable submodule.
Solution
So how about removing that. It’s not as easy as one might think. With some experimentation and the use of DuckDuckGo I managed to figure out the steps needed to get rid of the unwanted submodule. Note 0.11
is where my submodule lives.
.gitmodules
You will notice that a .gitmodules
file is present in the root of your folder. Open it with your favorite editor (cough cough nano
not vim
) and you will see a section similar to this one:
[submodule "0.11"]
path = 0.11
url = git://github.com/niden/zephir-docs.git
Remove that section. If you have other submodules that you need to remove, remove those sections also. Save the file and exit the editor.
Stage the file
git add .gitmodules
This is important since the commands below will start issuing warnings if you do not.
.git/config
Open .git/config
with your favorite editor and you will see a section similar to this one:
[submodule "0.11"]
url = git://github.com/niden/zephir-docs.git
Remove it, save the file and exit the editor.
git rm
Type the following command in your terminal (at the root of your project):
$ git rm --cached 0.11
Ensure that there is no trailing slash. Also if you haven’t staged the .gitmodules
file from the step above, it will complain again.
rm -fR
Remove the files from the local git reposityro
$ rm -rR .git/modules/0.11
commit
Commit the change (remember the staged .gitmodules
):
$ git commit -m "Removed unwanted submodule"
Now you can remove the files of the submodule from your file system.
$ rm -fR 0.11/
Enjoy!
-
Nikolaos Dimopoulos
Boldly goes where no other coder has gone before.... and other ramblings
Recent Posts
-
Setting up Docker for Qubes OS
2024-10-05 -
PhpStorm cannot create scratch files
2023-12-07 -
PHP 8.2 Deprecation of Dynamic Properties
2023-07-18 -
New Look
2023-06-12 -
Linux Swap file in RAM
2023-04-17
Tag Cloud
-
amazon (3)
android (1)
angularjs (7)
apps (1)
aurora (1)
aws (1)
backup (2)
bash (1)
bitbucket (1)
blog (2)
books (1)
bootstrap (1)
buzz (1)
cPanel (1)
cache (1)
celebrations (4)
chromium (3)
chromium os (3)
cloud computing (3)
codacy (1)
codecov (1)
communications (1)
composer (1)
conversion (1)
copy (1)
degoogle (5)
design (1)
design patterns (3)
discord (1)
docker (1)
docs (3)
documentation (1)
ec2 (3)
emerge (1)
encoding (1)
factory (1)
froyo (1)
fujitsu (1)
gentoo (7)
git (3)
github (2)
gmail (3)
google (16)
google apps (4)
google maps (1)
gource (1)
ha (1)
hosting (2)
how to (36)
igbinary (1)
information (5)
input (1)
installation (6)
internet (1)
iphone (1)
json (2)
libreoffice (1)
linux (13)
localization (1)
lts (1)
mariadb (1)
memorial day (1)
metrics (1)
migration (1)
mod_rewrite (1)
mov (1)
mp4 (1)
mysql (6)
nas (1)
netlify (1)
new look (1)
nexus one (2)
nfs (1)
notebook (1)
online storage (1)
openoffice (1)
opinion (1)
oracle (1)
patterns (1)
payroll (1)
performance (3)
personal (9)
phalcon (12)
php (23)
php8 (2)
php82 (1)
phpstorm (1)
phpunit (2)
picasa (2)
portage (1)
privacy (1)
programming (9)
proxy (1)
qubes os (1)
rant (5)
rdbms (1)
rds (1)
relationships (1)
release (1)
remove (1)
replication (1)
review (9)
rsync (2)
s1300 (1)
scan (1)
scratch (1)
serialize (1)
series (9)
singleton (1)
sorting (1)
spaceship (1)
spam (1)
ssl (1)
static (1)
storage (6)
submodules (1)
subversion (2)
svn (1)
swap (1)
tdd (1)
technorati (1)
test driven development (1)
testability (1)
testing (2)
titles (1)
traits (1)
ua (1)
ubuntu (1)
update (6)
upgrade (1)
usa (2)
usort (1)
utf8 (1)
video (1)
visualization (1)
vps (1)
webm (1)
website (1)
wget (1)
zend framework (4)
zram (1)
zstd (1)