threads / discuss / 11405

Using git for file archival/backup purposes - deletion strategy

Subject: Using git for file archival/backup purposes - deletion strategy

## tl;dr

4 messages between Dec 26, 2007 and Dec 27, 2007.

replies: 3people: 3as markdown or json

Martin Langhoff· Dec 26, 2007, 22:43 UTC · lore
Hi list!

I am drafting a tool to use GIT as a behind-the-scenes archival/backup tool for web applications. There's been countless threads covering generic file archival, discussing /etc and homedirs, so I am pretty comfortable with the mechanics and the whole idea. This is a fairly narrow use, where the web apps are reasonable well behaved -- most (all?) of the caveats in ~ and /etc archival seem to be under control.

What I am not 100% clear on is the "old history" deletion strategy. The history will be *strictly* linear, so my intention is to keep the last N commits, by overriding the parent of the Nth commit that git log lists with a "shallow" entry in $GIT_DIR/shallow as documented in Documentation/technical/shallow.txt , and call gc after that.

Is that the correct way to "forget" old history? Searching high and low in the list, I fail to find a definitive answer. Shallow and grafts entries are discussed as ways of doing this, but I can't find a "correct" way of doing this.

BTW I've just done a git clone --depth 10 ~/src/git and while I do get a clearly "shallow" checkout, with a tiny .git/objects directory, I can't find any file called shallow, or grafts. .git/config doesn't say anything either, and alternates is empty. I frankly cannot tell how git recognizes it as a shallow repo.

Ah! Local clones won't honour --depth!. A clone from git.kernel.org does get its .git/shallow file.

So the question is: is it safe (and enough) to add the SHA1 to the .git/shallow file and call git gc? Is there a better way?

cheers,
m
Johannes Sixt· Dec 27, 2007, 09:18 UTC · re: Martin Langhoff · lore

Re: Using git for file archival/backup purposes - deletion strategy

Martin Langhoff schrieb:
Show 10 quoted lines
> What I am not 100% clear on is the "old history" deletion strategy.
> The history will be *strictly* linear, so my intention is to keep the
> last N commits, by overriding the parent of the Nth commit that git
> log lists with a "shallow" entry in $GIT_DIR/shallow as documented in
> Documentation/technical/shallow.txt , and call gc after that.
> 
> Is that the correct way to "forget" old history? Searching high and
> low in the list, I fail to find a definitive answer. Shallow and
> grafts entries are discussed as ways of doing this, but I can't find a
> "correct" way of doing this.
I'm doing something like this. Basically:
   git rev-parse "HEAD~$N" > .git/info/grafts
   git filter-branch -f HEAD

If you omit filter-branch, then a repack -a -d will corrupt the repository (I think) unless you keep the grafts file with it and in all its clones forever.

-- Hannes
Charles Bailey· Dec 27, 2007, 16:36 UTC · re: Martin Langhoff · lore

Re: Using git for file archival/backup purposes - deletion strategy

Martin Langhoff wrote:
> Ah! Local clones won't honour --depth!. A clone from git.kernel.org
> does get its .git/shallow file.

This should be fixed in git v1.5.4-rc0 and later. For reference what version of git are you using?

Charles.
Martin Langhoff· Dec 27, 2007, 22:08 UTC · re: Charles Bailey · lore

Re: Using git for file archival/backup purposes - deletion strategy

On Dec 28, 2007 5:36 AM, Charles Bailey <charles@hashpling.org> wrote:
Show 6 quoted lines
> Martin Langhoff wrote:
> > Ah! Local clones won't honour --depth!. A clone from git.kernel.org
> > does get its .git/shallow file.
>
> This should be fixed in git v1.5.4-rc0 and later.  For reference
> what version of git are you using?

Good point. I was using a 1.5.3xx. I can confirm it's fixed with 1.5.4.rc1.1136.g2794f - I get the shallow clone I expected.

cheers!
m

← back to recent threads