threads / discuss / 9980

Uninstalling Git

Subject: Uninstalling Git

## tl;dr

4 messages between Sep 23, 2007 and Sep 23, 2007.

replies: 3people: 3as markdown or json

in-call@gmx.net· Sep 23, 2007, 18:30 UTC · lore
Hello!
This must be a stupid-obvious-newbie question but...

Well, the point is that I installed the git version 1.5.2.1 in an ubuntu box. That was done following the INSTALL instructions in the corresponding tarball. I typed:

$ make configure $ ./configure --prefix=/usr/local $ make all doc $ sudo make install install-doc

First, I'd like to uninstall the thing completely, how do I do that?

Second, what would be the correct procedure to follow if I would like just to upgrade to a newer version? install over the older perhaps? Is that always safe in the sense that there won't be any dangling piece of bin nor doc?

Thanks in advance!
David Kastrup· Sep 23, 2007, 19:06 UTC · re: in-call@gmx.net · lore

Re: Uninstalling Git

in-call@gmx.net writes:
Show 12 quoted lines
> This must be a stupid-obvious-newbie question but...
>
> Well, the point is that I installed the git version 1.5.2.1 in an
> ubuntu box.  That was done following the INSTALL instructions in the
> corresponding tarball.  I typed:
>
> $ make configure
> $ ./configure --prefix=/usr/local
> $ make all doc
> $ sudo make install install-doc
>
> First, I'd like to uninstall the thing completely, how do I do that?

Basically, you are screwed. That being said, it might somewhat work to do the following:

find /usr/local -depth -iname 'git*' -exec rm -rf {} \;

But I think you'll catch more if you apply the following patch, then do

./configure --prefix=/opt/git make all doc sudo make install install-doc install-symlinks sudo rm -rf /opt/git sudo find /usr/local -lname '/opt/git/*' -delete

> Second, what would be the correct procedure to follow if I would
> like just to upgrade to a newer version? install over the older
> perhaps? Is that always safe in the sense that there won't be any
> dangling piece of bin nor doc?

There is some software called xstow which is supposed to do something similar to the "install-symlinks" target of this patch.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

From: David Kastrup <dak@gnu.org>
Date: Wed, 18 Jul 2007 16:45:36 +0200
Subject: [PATCH] Makefile: create an install-symlinks target

[commit text mostly pinched from INSTALL]

An alternative global installation method making it much easier to
uninstall is to use a package-specific prefix like /opt/git, then
create symlinks from /usr/local into that hierarchy.  Uninstalling can
then be achieved by

	# rm -rf /opt/git; find /usr/local -lname '/opt/git/*' -delete

You can create a setup like that after having used one of the above
install recipes with prefix=/opt/git by writing

	# make prefix=/opt/git symlinkprefix=/usr/local install-symlinks

This works by copying the directory hierarchy of $prefix to
$symlinkprefix (not copying or descending to any directories of the
name git* matched case-insensitively), then linking all the rest.
---
 INSTALL  |   12 ++++++++++++
 Makefile |   10 +++++++++-
 2 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/INSTALL b/INSTALL
index 289b046..38d6fdd 100644
--- a/INSTALL
+++ b/INSTALL
@@ -21,6 +21,18 @@ set up install paths (via config.mak.autogen), so you can write instead
 	$ make all doc ;# as yourself
 	# make install install-doc ;# as root
 
+An alternative global installation method making it much easier to
+uninstall is to use a package-specific prefix like /opt/git, then
+create symlinks from /usr/local into that hierarchy.  Uninstalling can
+then be achieved by
+
+	# rm -rf /opt/git; find /usr/local -lname '/opt/git/*' -delete
+
+You can create a setup like that after having used one of the above
+install recipes with prefix=/opt/git by writing
+
+	# make prefix=/opt/git symlinkprefix=/usr/local install-symlinks
+
 
 Issues of note:
 
diff --git a/Makefile b/Makefile
index 0055eef..caea6fb 100644
--- a/Makefile
+++ b/Makefile
@@ -147,6 +147,7 @@ ALL_LDFLAGS = $(LDFLAGS)
 STRIP ?= strip
 
 prefix = $(HOME)
+symlinkprefix = /usr/local
 bindir = $(prefix)/bin
 gitexecdir = $(bindir)
 sharedir = $(prefix)/share
@@ -727,6 +728,7 @@ bindir_SQ = $(subst ','\'',$(bindir))
 gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
 template_dir_SQ = $(subst ','\'',$(template_dir))
 prefix_SQ = $(subst ','\'',$(prefix))
+symlinkprefix_SQ = $(subst ','\'',$(symlinkprefix))
 
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
 PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
@@ -1039,7 +1041,13 @@ install-info:
 quick-install-doc:
 	$(MAKE) -C Documentation quick-install
 
-
+# The somewhat strange looking lines start with an ignored $(MAKE) in
+# order to be executed also in make -n calls.
+install-symlinks:
+	@: $(MAKE) && echo cd '$(prefix_SQ)' && cd '$(prefix_SQ)' && $(FIND) . -type d ! \( -iname 'git*' -prune \) -exec echo $(INSTALL) -m 755 -d '$(symlinkprefix_SQ)/{}' \;
+	@cd '$(prefix_SQ)' && $(FIND) . -type d ! \( -iname 'git*' -prune \) -exec $(INSTALL) -m 755 -d '$(symlinkprefix_SQ)/{}' \;
+	@: $(MAKE) && echo cd '$(prefix_SQ)' && cd '$(prefix_SQ)' && $(FIND) . \( -type d -iname 'git*' -prune -o ! -type d \) -exec echo $(RM) -r '$(symlinkprefix_SQ)/{}' \; -exec echo ln -s '$(prefix_SQ)/{}' '$(symlinkprefix_SQ)/{}' \;
+	@cd '$(prefix_SQ)' && $(FIND) . \( -type d -iname 'git*' -prune -o ! -type d \) -exec $(RM) -r '$(symlinkprefix_SQ)/{}' \; -exec ln -s '$(prefix_SQ)/{}' '$(symlinkprefix_SQ)/{}' \;
 
 ### Maintainer's dist rules
 
-- 
1.5.3.1.96.g4568
Johannes Schindelin· Sep 23, 2007, 19:31 UTC · re: in-call@gmx.net · lore

Re: Uninstalling Git

Hi,
On Sun, 23 Sep 2007, in-call@gmx.net wrote:
Show 6 quoted lines
> $ make configure
> $ ./configure --prefix=/usr/local
> $ make all doc
> $ sudo make install install-doc
> 
> First, I'd like to uninstall the thing completely, how do I do that?

I'd use checkinstall to install it (again), and then use the distro's regular tools; in case of Ubuntu, that would be dpkg I believe.

> Second, what would be the correct procedure to follow if I would like 
> just to upgrade to a newer version? install over the older perhaps? Is 
> that always safe in the sense that there won't be any dangling piece of 
> bin nor doc?
On Linux this should be safe at all times.

Hth, Dscho

in-call@gmx.net· Sep 23, 2007, 19:47 UTC · re: Johannes Schindelin · lore

Re: Uninstalling Git

Hello!
Oh! great solution! I didn't know this tool, I'll do that! Thanks a lot!
Johannes Schindelin wrote:
Show 24 quoted lines
> Hi,
> 
> On Sun, 23 Sep 2007, in-call@gmx.net wrote:
> 
>> $ make configure
>> $ ./configure --prefix=/usr/local
>> $ make all doc
>> $ sudo make install install-doc
>>
>> First, I'd like to uninstall the thing completely, how do I do that?
> 
> I'd use checkinstall to install it (again), and then use the distro's 
> regular tools; in case of Ubuntu, that would be dpkg I believe.
> 
>> Second, what would be the correct procedure to follow if I would like 
>> just to upgrade to a newer version? install over the older perhaps? Is 
>> that always safe in the sense that there won't be any dangling piece of 
>> bin nor doc?
> 
> On Linux this should be safe at all times.
> 
> Hth,
> Dscho
> 

← back to recent threads