On Tuesday, 23 September 2014 07:28:34 UTC+2, Michael Mossey wrote:
>
> I'm very new to git, and so far I'm using it more like a system to back up 
> files and transfer them from computer to computer, no branching or anything 
> complicated yet. In one directory tree, most of my files are binary files, 
> so git can't take advantage of storing only deltas and can't compress the 
> files much. My database size has skyrocketed in the past month as a result. 
> At the moment I really don't need versions of certain files or directories 
> older than, say, 2 weeks. Is there a way to delete old history by that 
> criteria (say anything before a specific date?).
>
> Mike
>
>
As Magnus pointed it out, it sounds to me like there might be better tools 
than git out there to achieve what you need (a quick Google returns this SO 
post on backup software 
<http://stackoverflow.com/questions/5593775/automatic-file-versioning-like-dropbox>
 
and this Wikipedia page on versioning FS 
<http://en.wikipedia.org/wiki/Versioning_file_system> for instance). That 
said, to answer your question creating an orphan branch from a start point 
*"S"* and rebasing what's between *"S"* and master onto it should do what 
you're asking for -- especially if you're using it with *"no branching or 
anything complicated yet"*.

*/!\ Note: this is a highly destructive operation, so you'll want to make 
sure you backup your backup before trying this /!\*

First determine until which commit you wanna keep your history (everything 
after that commit will be deleted if all goes well); you can use git-log 
<http://git-scm.com/docs/git-log> with some fancy options (such as --until 
or --since for instance) or whatever GUI client you're used to. Say the 
branch you wanna delete history from is *master* and that the SHA1 of last 
commit you wanna keep is *deadbeef*.

# Make sure your repo's clean
$ git status

# Create a new orphan branch called temp starting at deadbeef
$ git checkout --orphan temp deadbeef

# Create the inital commit from there
$ git commit -a

# Now rebase everything between deadbeef and master on top of temp
$ git rebase --onto temp deadbeef master

Your master branch's history should now have been rewritten to keep only 
the commits you wanted. You can safely delete the temp branch (all it 
contains is the initial commit) and you may have to run git-gc 
<http://git-scm.com/docs/git-gc> manually to garbage-collect the now 
unreferenced objects and actually get the disk space freed by the whole 
operation back.

If you get any conflicts during the rebase, you'll have to solve them 
before continuing (see git-rebase <http://git-scm.com/docs/git-rebase> if 
you're not familiar with how it works); but depending on how your tree 
looks like chances are that you won't get any.

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to