On Thu, Nov 01, 2012 at 12:16:14AM -0700, Михаил Меньшинский wrote:

> > I have installed Git from source on a Centos 6.x server.  Would anyone 
> > know how to properly uninstall the source version?  I would like to upgrade 
> > to an RPM version.
> >
> How do you remove it? I have the similar problem. Please help

If you were smart enough and used some non-standard prefix when
configured Git so that it has been installed under a specific hierarchy,
like under /opt/git, then just delete that hierarchy, recursively.

If not, then you could go like this:
1) Fetch the source tarball of exactly the version you built and
   installed, unpack.
2) Configure it exactly like you did with the original install with
   regard to installation locations (prefix, exec-prefix etc);
   supposedly you should just not override anything.
3) Create a temporary directory to perform installation, like this:
   $ mkdir /var/tmp/git
4) Install Git passing a proper DESTDIR variable to make:
   $ make DESTDIR=/var/tmp/git install
   The Git hierarchy will end up created under that temporary directory.
5) Use the created hierarchy to decide which files to delete under
   the real hierarchy ("/" itself).

The last step is where "the magic" happens so it bears more explanation.
For instance, you could run

# find /var/tmp/git -type f -printf '/%P\n' | xargs -n 10 rm -f

(as root) do delete the files installed by the first mis-installation
into the root filesystem.  The encantation above uses the /var/tmp/git
hierarchy to print the list of files found, but it replaces the
"/var/tmp/git" prefix in them with "/", so that the
"/var/tmp/git/usr/bin/git" in the output will end up listed as
"/usr/bin/git".  This list is then piped to `xargs` which runs `rm`
on the file names it reads in packs of ten (just to reduce the number of
invocations of `rm` by one order of magnitude).

After dealing with files, run

$ find /var/tmp/git -type d -printf '/%P\n'

to inspect the list of installed directories.  These require manual
approach so just look at the generated list and think which of them you
could safely `rmdir` from your system (these will be the directories
like "/usr/libexec/git" or something like this; you wouldn't probably
want to delete "/usr/share/man/mann" or something even if it's empty).

In the future *never* install anything into a system by running
`make install`!  Most makefiles these days do not support "uninstall"
target as they are used to either installing into a private scratch
location for testing or to make a package (.rpm, .deb etc) and then the
package manager takes care of cleaning up.
If you need to install something, try to find an official package or try
to backport another official package from a more recent version of
your OS, if available.
As the last resort, try using the `checkinstall` tool which tries to
create a binary package out of your `make install` run.  This sucks,
but still better than bare `make install`.


Reply via email to