Git-svn

From Git SCM Wiki
(Difference between revisions)
Jump to: navigation, search
Line 4: Line 4:
  
 
== checkout / clone, log ==
 
== checkout / clone, log ==
  git svn clone -r 400:HEAD https://svn.whatebber.org/repo/trunk folder # choose a recent commit
+
  git svn clone -r 400:HEAD https://mysvnsrv.org/rep/trunk folder # choose a recent commit
 
  git log -5
 
  git log -5
  
Line 35: Line 35:
 
Things in the working tree can be reset (reverted) to what is checked in:
 
Things in the working tree can be reset (reverted) to what is checked in:
 
  git reset --hard
 
  git reset --hard
 +
 +
== workflow with local fix/feature branch ==
 +
git svn clone https://mysvnsrv.org/rep
 +
git checkout -b bugfix-id-123
 +
<hack, hack, hack>
 +
git add --all
 +
git commit -m "fixed issue 123"
 +
git checkout master
 +
git svn rebase
 +
git merge bugfix-id-123
 +
git svn dcommit
  
 
== Some links ==
 
== Some links ==

Revision as of 16:12, 18 December 2012

This tutorial collects information for users of git as svn client, using git-svn. Please consider reading GitSvnCrashCourse, and the git-svn cheatsheet. As Git is distributed, commits (aka change sets) are referenced by hashes instead of svn's serial version numbers. Git tracks contents, not files or directories. Consider to use a real svn client to rename directories, as git-svn produces a lot of renames in svn, instead of one like the original.

Contents


checkout / clone, log

git svn clone -r 400:HEAD https://mysvnsrv.org/rep/trunk folder # choose a recent commit
git log -5

Create a .gitignore file on the toplevel to replicate svn's ignore properties.

echo "folder/or/file/to/ignore" > .gitignore

commit

commit to local Git

Git automatically tracks contents and therefor automatically detects all changes done with file browsers, programming tools etc.

git add --all
git commit -m "whatebber"

commit to remote SVN

To see what is going to be committed one can choose the following options.

gitk git-svn..
gitk
git log remotes/git-svn.. --oneline
git svn dcommit --dry-run

To really commit

git svn dcommit

undo changes

Undo (backout, revert) changes and commits is done with standard git commands.

Things already committed to svn can be reverted:

git revert <hash>
git svn dcommit

Things in the working tree can be reset (reverted) to what is checked in:

git reset --hard

workflow with local fix/feature branch

git svn clone https://mysvnsrv.org/rep
git checkout -b bugfix-id-123
<hack, hack, hack>
git add --all
git commit -m "fixed issue 123"
git checkout master
git svn rebase
git merge bugfix-id-123
git svn dcommit

Some links

Personal tools