git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Configuring git to for forget removed files

From
Tim Visher <tim.visher@gmail.com>
Date
Feb 20, 2010, 15:41 UTC
Message-ID
<c115fd3c1002200741l25f32685t998a19e76922a2d2@mail.gmail.com>
In-Reply-To
<4B7FBB73.70004@gmail.com>
Hi Andy,
On Sat, Feb 20, 2010 at 5:37 AM, Andrew Benton <b3nton@gmail.com> wrote:
Show 13 quoted lines
> 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. 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.
>
> What I would like is to be able to tell git to not keep a copy of anything
> that has been git rm. The build scripts never get removed, only altered so
> their history would be preserved. Is it possible to make git delete its backup
> copies of removed files?

I don't know if I can really speak to your hoped for conclusion although `git filter-branch` is where you want to look for rewriting history. However, that's also an entirely impractical solution if your repo is at all public because it would completely break sharing.

That being said, have you thought of changing your repo strategy? IMHO, storing binary blobs that change at all regularly in _any_ SCMS is a problem waiting to happen. It's different if you have assets that are fairly stable like images for a system's UI or dependencies that have been stabilized, but that doesn't sound like your situation.

As a thought, why not try to do something along the lines of
maintaining a symlink to whatever tarballs your project currently
depends on as a 'foolib-latest' and then having a separate directory
that has a file that you can change.  You could maintain backups of
that using a tool like rsync (since you obviously aren't concerned
with maintaining history there) rather than git.  Then you could
decide arbitrarily how many backups you want to make and try to
maintain what version of the file went with which commit in your repo.
 The main problem I see with that is that you loose a lot of the
advantages of having a SCMS because you can't reliably checkout a
previous commit and build it; at least not without some very serious
effort.

Another possible solution if you maintain the sources that are generating the tarballs is to treat the tarballs as artifacts of the build rather than as assets that should be managed by the SCMS. In that way, you might spend more time during each build but your repo would be much cleaner and would have the added advantage of being able to completely build itself at every commit point.

Anyway, just food for thought.
-- 
In Christ,

Timmy V.

http://burningones.com/
http://five.sentenc.es/ - Spend less time on e-mail
Previous: Andrew BentonNext: Avery Pennarun
Message 2 of 8 in “Configuring git to for forget removed files”
  1. Andrew BentonFeb 20, 2010
  2. Tim VisherFeb 20, 2010
  3. Avery PennarunFeb 20, 2010
  4. Junio C HamanoFeb 20, 2010
  5. Jonathan NiederFeb 21, 2010
  6. Andrew BentonFeb 21, 2010
  7. Larry D'AnnaFeb 21, 2010
  8. Jacob HelwigFeb 21, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.