Git: split repository into several smaller ones
In our company we did create a new project using git as the repository. The repository is central on our development server as well as on each developers machine. Previously we used SVN, so the whole team is still used to a central repository, and furthermore our infrastructure (Redmine, Hudson, …) needs access to the repository.
After creating the project, we did several refactorings and splitted the whole project into several smaller ones. We did this all in one repository, without any problem. But because e.g. Hudson needs access to a single project, and we wanted to build all components standalone, we had a problem. We needed to split the git repository.
To solve this issue, first we needed to push all changes to the new repositories (note that we pushed the whole project into different repositories, to keep the whole history). For this to work, we first copied the whole project into different directories (named after the project names) and then executed the following script:
#!/bin/sh cd $1.git git remote rm origin git remote add origin ssh://mmay@server.tst/srv/git/$1.git git push origin master
After this is done, the new repositories needed to get cleaned up:
cd $1.git pwd git filter-branch --subdirectory-filter $1 HEAD -- -- all git reset --hard git gc --aggressive git prune
After this, we removed the projects from the original projects, but kept the repository itself, just to have all the initial history before the split into several components with different subdirectories.
Hope that this helps you as well 😉
PS: Some of this stuff was taken from http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository.
Search
confused thoughts from a confused mind