From: Siraaj Khandkar Date: Thu, 18 Sep 2014 21:04:02 +0000 (-0400) Subject: Add split repo cleaning steps. X-Git-Url: https://git.xandkar.net/?p=git-cheat-sheet.git;a=commitdiff_plain;h=6b6ba9f3495de246fe962f2b23fc62b966c3ab5b;hp=95f663c4c8150f23d128c2b8ef29056b318fb7b8;ds=sidebyside Add split repo cleaning steps. --- diff --git a/README.md b/README.md index 91c2766..bca3d59 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,34 @@ git-cheat-sheet =============== How to do stuff with git + + +Splitting a repo +---------------- + +### Remove history of all but select files in cloned repo +```sh +$ cp -Rp old new +$ cd new +$ git clean -dfx +$ git gc --aggressive --prune=now +$ git remote rm origin +$ git filter-branch \ + --prune-empty \ + --index-filter ' + git ls-tree -r --name-only HEAD \ + | grep -v file_i_want_to_keep_1 \ + | grep -v file_i_want_to_keep_.. \ + | grep -v file_i_want_to_keep_n \ + | xargs git rm --cached -r --ignore-unmatch + ' \ + HEAD +$ git gc --aggressive --prune=now +``` + +### Remove history of previously-removed (not in current tree) files +```sh +$ git log --pretty=format: --name-status | awk '$0 != "" {print $2}' | sort -u > /tmp/tree.old +$ git ls-tree -r --name-only HEAD > /tmp/tree.new +$ git filter-branch --prune-empty --index-filter 'grep -Fvxf /tmp/tree.new /tmp/tree.old | xargs git rm --cached -r --ignore-unmatch' HEAD +```