If
you want to use Git as your versioning system, you shouldn't only
migrate every repository from SVN to Git, but you should also use Git
locally. The Git-svn command will help you do this. It so
happens that your team doesn't want to change its versioning system, or a
project is way too big to migrate on a new versioning system. So, Git
has a solution for you; how about using Git features without anyone
knowing or caring?
The
following diagram explains how to use Git inside an SVN environment.
When executing a Git command, the SVN environment will not notice it
because the Git-svn command will convert all your commands.
Setting up your repository
You
assume that you already have an SVN repository and you want to use Git
locally. As a first step, clone the SVN repository using this command:
$ git svn clone -s http://mysvnrepo/svn/myproject myproject_gitsvn_local
The -s
option stands for standard layout, which means that your subversion
layout has three directories (trunk, branches, and tags). You can, of
course, forget this option if your repository does not have a standard
layout.
This creates a Git repository under the myproject_gitsvn_local directory that is mapped to the trunk folder of your subversion repository.
As Git doesn't track empty directories, the empty directories under the trunk won't appear inside your Git repository.
Sometimes you might have to clone a big repository. In this case, checking out the commit history will be lengthy because the repository is too big. There is a way to clone it without waiting for a long time. You can do this by cloning the repository with the earlier version of the repository:
There
is one last thing to set up. Every file ignored by SVN has to be
ignored by Git too. To do this, you have to transfer them into the
.gitignore file by using this:
There is an alternative method that uses the update-index command:
To commit back to SVN, use the following command:
This creates a Git repository under the myproject_gitsvn_local directory that is mapped to the trunk folder of your subversion repository.
As Git doesn't track empty directories, the empty directories under the trunk won't appear inside your Git repository.
Sometimes you might have to clone a big repository. In this case, checking out the commit history will be lengthy because the repository is too big. There is a way to clone it without waiting for a long time. You can do this by cloning the repository with the earlier version of the repository:
$ git svn clone -s -r625:HEAD http://mysvnrepo/svn/myproject myproject_gitsvn_local
$ git svn show-ignore > .gitignore
$ git update-index --assume-unchanged filesToIgnore
Working with Git SVN
Once your repository is ready, you can work on it and start executing Git commands as we saw earlier. Of course, there are some commands to execute when you want to push or pull from the SVN repository. When you want to update your local Git repository, just type this:$ git svn rebase
$ git svn dcommit
Sooner or later, you will add the .svn folder to the staging area in Git. Hopefully, there is a way to delete it:
$ git status -s | grep .svn | awk "'print $3'} | xargs git rm -cached
No comments:
Post a Comment