Subject: Re: Configuring git to for forget removed files

From: Jonathan Nieder <[email-masked]>
Date: Sat, 20 Feb 2010 20:47:46 -0600

Hi Andy,

Andrew Benton wrote:

> I have a project that I store in a git repository. It's a bunch of
> source tarballs and some bash scripts to compile it all. Git makes
> it easy to distribute any changes I make across the computers I run.

This is not really what git is intended to do.

 - git generally works better with files that are easy to diff; see
   the “filter” attribute in gitattributes(5) for one way this is
   sometimes achieved with meaningful binary files (e.g., the
   compressed files OpenOffice produces)

 - Though git can cope with large projects, it generally works best
   when track the smallest meaningful unit that can be tested alone.
   Submodules can be used to stitch them together.

Thus if it is important to you to track the history of this project, I
would suggest giving each source tree its own repository and stitching
them together with a “supermodule” that tracks your scripts and
includes references to the appropriate versions of each source
package.

See http://who-t.blogspot.com/2009/04/big-fat-xorg-supermodule.html
for an example of this kind of thing.

On the other hand, I don’t get the impression it is so important here
to track the history from the beginning, so:

> The problem I have is that over time the repository gets ever
> larger. When I update to a newer version of something I git rm the
> old tarball but git still keeps a copy and the folder grows ever
> larger. At the moment the only solution I have is to periodically rm
> -rf .git and start again. This works but is less than ideal because
> I lose all the history for my build scripts.

Maybe you could keep the build scripts in a git repository and
synchronizing the tarballs out of line with some other tool, such as
rsync or unison.

> Is it possible to make git delete its
> backup copies of removed files?

git is not intended to be a backup tool; as you’ve noticed, the older
versions gradually accumulate and it becomes apparent over time that
it would be really nice for older commits to expire.

I am guessing, but it sounds to me like what you are looking for is
something that is distributed like git but is a backup system.  Or in
other words, a way to record a few snapshots like LVM or btrfs, but
such that new snapshots can be easily transfered to another computer.
At least I would be glad to learn of such a tool. ;-)

Hope that helps,
Jonathan