in-call@gmx.net writes:
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 <redacted>
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