Moving folder and history between git repos
Problem : One part of a git-tracked repo has become an independent project in its own right. Moreover, there’s no need for participants in that project to have access to the rest of the repo.
Idea : Move the independent project out into a separate git repo, preserving all the commit history.
Huge props to the following :
- http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/
- http://st-on-it.blogspot.com/2010/01/how-to-move-folders-between-git.html
Initially : Create a fresh clone of the source repo (this will be removed later : don’t do this on a working copy, just in case everything goes awry):
cd sketchpad/
Now, let’s filter everything in the directory ‘android-edutiger’ out of this local copy – all the changes from here are what will be moved across (disconnect from the main repo) :
git remote rm origin
Now, create a new directory, and move all the relevant files into it :
git mv AndroidManifest.xml android-native/
git mv Notes.txt android-native/
git mv pro* android-native/
git mv res android-native/
git mv src android-native/
git commit -a -m "Moved into directory prior to moving repo"
Now go into the new repo ’separated-out’ and pull the stuff over from the local remote (which we’ll temporarily name “SKETCHPAD”) :
cd separated-out/
git remote add SKETCHPAD ../sketchpad/
git fetch SKETCHPAD
git branch SKETCHPAD remotes/SKETCHPAD/master
git merge SKETCHPAD
Now the new files should have arrived – disconnect from the local remote “SKETCHPAD”, and clean up:
git remote rm SKETCHPAD
git branch -d SKETCHPAD
git push origin master
git push
git pull
Get rid of the hacked around ’sketchpad’ (and a real working version will now need to have the same stuff cleaned out too, first-off by issuing a git pull) :
rm -rf sketchpad