Git SVN: Difference between revisions

From miki
Jump to navigation Jump to search
Line 13: Line 13:
** [https://git.wiki.kernel.org/images-git/7/78/Git-svn-cheatsheet.pdf git-svn cheatsheet]
** [https://git.wiki.kernel.org/images-git/7/78/Git-svn-cheatsheet.pdf git-svn cheatsheet]
** [https://git.wiki.kernel.org/index.php/GitTips#git_svn git-svn tips]
** [https://git.wiki.kernel.org/index.php/GitTips#git_svn git-svn tips]

== Configuration ==
My default <tt>.git/config</tt> file on Linux:
<source lang="bash">
[user]
name = ...
email = ...
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
autocrlf = false
whitespace = -blank-at-eol, -space-before-tab,-blank-at-eof
[apply]
ignorewhitespace = change
[svn-remote "svn"]
url = ...
fetch = ...
branches = ...
tags = ...
</source>

My default <tt>.git/config</tt> file on Cygwin:
<source lang="bash">
[user]
name = ...
email = ...
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
autocrlf = false
whitespace = -blank-at-eol, -space-before-tab,-blank-at-eof
[apply]
ignorewhitespace = change
[svn-remote "svn"]
url = https://www.collabnet.nxp.com/svn/atop
fetch = trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
</source>


== Workflow ==
== Workflow ==

Revision as of 09:38, 5 August 2011

This page is dedicated to Subversion integration in Git

References

Configuration

My default .git/config file on Linux:

[user]
    name = ...
    email = ...
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	autocrlf = false
	whitespace = -blank-at-eol, -space-before-tab,-blank-at-eof
[apply]
    ignorewhitespace = change
[svn-remote "svn"]
	url = ...
	fetch = ...
	branches = ...
	tags = ...

My default .git/config file on Cygwin:

[user]
    name = ...
    email = ...
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	ignorecase = true
	autocrlf = false
	whitespace = -blank-at-eol, -space-before-tab,-blank-at-eof
[apply]
    ignorewhitespace = change
[svn-remote "svn"]
	url = https://www.collabnet.nxp.com/svn/atop
	fetch = trunk:refs/remotes/trunk
	branches = branches/*:refs/remotes/*
	tags = tags/*:refs/remotes/tags/*

Workflow

Get a clone of subversion repository with:

# git: git clone => 
# svn: svn checkout =>
git svn clone https://www.mysvn.org/svn/project -T trunk -b branches -t tags --username='USER'
git svn clone https://www.mysvn.org/svn/project --stdlayout --username='USER'                   # Identical
# Clean / compress git DB if necessary...
git gc

Fetch all changes from SVN repo:

# git: git fetch =>
git svn fetch

Fetch and merge all changes from SVN repo:

# git: git pull =>
# svn: svn update =>
git svn rebase
git svn rebase -l                   # Only rebase against last fetched commit from upstream SVN
In case of conflicts (see [1]):
  • You are on a (no-branch) branch (with git status showing a .dotest file you can ignore)
  • Use the usual git rebase --abort (to bail out), git rebase --continue (solved conflict), git rebase --skip (no-op patch)

Send local changes to SVN repo:

# git: git push =>
git svn dcommit

Annotate changes in a file:

# git: git blame =>
# svn: svn annotate/blame =>
git svn blame fullpath              # Only accept full path! (from project rootdir)
git blame file