On Wednesday 06 August 2008 15:39:50 you wrote: > Hi, > > I've been puzzling most of today to do something that must be simple. > I've got a big repo which contains a project with several nicely related > subprojects in directories. Only now, we want to share some of these > subprojects with another project. I.e. they must start to live there own > life. Of course, I would like to keep the history. So, I did (git > --version: 1.5.6.GIT): > > % git clone /home/git/pl.git > % cd pl > % git filter-branch --subdirectory-filter packages/chr HEAD > > This indeed creates a nice directory holding only the contents of > packages/chr. But, starting qgit I see that all commits, also those > that had absolutely nothing to do with this dir are still there. Also, > all tags are still there with exactly the same SHA1 as the original. > I'd expect the tags to be rewritten such that their SHA1 refers to the > state of this single directory and its contents!? Of course, these > tags give me access to everything, so the repository doesn't shrink > much too. > > I must be missing something important ... I found similar complaints, > but few decent answers and the few answer I did find appeared outdated. > The one at http://use.perl.org/~rjbs/journal/34411 comes closest, although > the reset --hard is no longer needed and the copying and gc-ing doesn't > help much anymore. > > Should I write a tree-filter that removes all but the directory I want > to keep? I.e. something like this? Feels like and overkill and I fear > I'll have a lot of empty commits left. > > 'mv packages/chr .. && rm -r * && mv ../chr/* . && rmdir ../chr' > > I'll be grateful for a clue! Weirdness goes on. I tried this: git filter-branch --tree-filter '/home/jan/nobackup/tmp2/keep packages/chr' where `keep' is a shell-script: ---------------------------------------------------------------- tmp=/home/jan/nobackup/tmp2 dir="$1" if [ -d "$dir" ]; then b=`basename $dir` mv "$dir" $tmp/$b rm -rf * mv $tmp/$b/* . mv $tmp/$b/.??* . rmdir $tmp/$b else rm -rf * fi ---------------------------------------------------------------- This kind of works. I.e. I end up (after 3 hours) with a tree that only contains files from packages/chr. Using qgit it no longer shows the other files in the `tree' view. Only, it has *all* commits of the original project, most of which of course do not change this directory, but now at least their diff is empty. I'd assume there is a command to remove these (which?) Space wise this isn't ok. The original project GIT is 140M, after this action and a git gc, it is 63M: *much* too big. Whats more weird: all tags still have the same sha1. I copied using git clone --no-hardlinks pl chr, deleted all refs/tags from packed-refs and gave a "git gc --prune", to end up with 1.1 GIGABYTE repository!? I'm starting to feel a bit stupid that I can't get this done ... Clues? --- Jan -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html