From 6b6ba9f3495de246fe962f2b23fc62b966c3ab5b Mon Sep 17 00:00:00 2001 From: Siraaj Khandkar Date: Thu, 18 Sep 2014 17:04:02 -0400 Subject: [PATCH] Add split repo cleaning steps. --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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 +``` -- 2.20.1