Add split repo cleaning steps.
authorSiraaj Khandkar <siraaj@khandkar.net>
Thu, 18 Sep 2014 21:04:02 +0000 (17:04 -0400)
committerSiraaj Khandkar <siraaj@khandkar.net>
Thu, 18 Sep 2014 21:04:02 +0000 (17:04 -0400)
README.md

index 91c2766..bca3d59 100644 (file)
--- a/README.md
+++ b/README.md
@@ -2,3 +2,34 @@ git-cheat-sheet
 ===============
 
 How to do stuff with git
 ===============
 
 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
+```
This page took 0.018452 seconds and 4 git commands to generate.