====== Move a Sub-Directory Into Separate GIT Repository ====== I recently had a GIT repository with a sub-directory that should have been it own repository. I also wanted to keep all of the history in the sub-directory. These are the steps that I followed to move that sub-directory into a new separate GIT repository. === Old Structure === project/ .git/ p1/ p2/ p3/ === New Structure === project/ .git p1 p3 p2/ .git === Method === $ git clone --no-hardlinks project p2 Cloning into nuget-packages... done. $ cd p2 $ git gc Counting objects: 640, done. Delta compression using up to 2 threads. Compressing objects: 100% (225/225), done. Writing objects: 100% (640/640), done. Total 640 (delta 401), reused 605 (delta 390) $ git status # On branch master nothing to commit (working directory clean) $ git filter-branch --subdirectory-filter p2 HEAD -- --all Rewrite 352c51285e647fc31d37aa42479162160def0594 (31/31) Ref 'refs/heads/master' was rewritten $ git reset --hard HEAD is now at df4f12e removed nant from source control, it is now stored locally on the drive outside of the repository... $ rm -rf .git/refs/original/ $ git reflog expire --expire=now --all $ git gc --aggressive --prune=now Counting objects: 671, done. Delta compression using up to 2 threads. Compressing objects: 100% (646/646), done. Writing objects: 100% (671/671), done. Total 671 (delta 426), reused 214 (delta 0)