Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— |
programovani:svn-to-git [24.03.2013 11:50] (aktuální) wladik vytvořeno |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Převod SVN repozitáře do Gitu ====== | ||
+ | ===== Retrieve a list of all Subversion committers ===== | ||
+ | |||
+ | Subversion simply lists the username for each commit. Git’s commits have much richer data, but at its simplest, the commit author needs to have a name and email listed. By default the git-svn tool will just list the SVN username in both the author and email fields. But with a little bit of work, you can create a list of all SVN users and what their corresponding Git name and emails are. This list can be used by git-svn to transform plain svn usernames into proper Git committers. | ||
+ | |||
+ | From the root of your local Subversion checkout, run this command: | ||
+ | |||
+ | svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt | ||
+ | |||
+ | That will grab all the log messages, pluck out the usernames, eliminate any duplicate usernames, sort the usernames and place them into a “authors-transform.txt” file. Now edit each line in the file. For example, convert: | ||
+ | |||
+ | jwilkins = jwilkins <jwilkins> | ||
+ | into this: | ||
+ | |||
+ | jwilkins = John Albin Wilkins <johnalbin@example.com> | ||
+ | |||
+ | ===== Clone the Subversion repository using git-svn ===== | ||
+ | |||
+ | git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp | ||
+ | |||
+ | This will do the standard git-svn transformation (using the authors-transform.txt file you created in step 1) and place the git repository in the “~/temp” folder inside your home directory. | ||
+ | |||
+ | ===== Convert svn:ignore properties to .gitignore ===== | ||
+ | |||
+ | If your svn repo was using svn:ignore properties, you can easily convert this to a .gitignore file using: | ||
+ | |||
+ | cd ~/temp | ||
+ | git svn show-ignore > .gitignore | ||
+ | git add .gitignore | ||
+ | git commit -m 'Convert svn:ignore properties to .gitignore.' | ||
+ | |||
+ | ===== Push repository to a bare git repository ===== | ||
+ | |||
+ | First, create a bare repository and make its default branch match svn’s “trunk” branch name. | ||
+ | |||
+ | git init --bare ~/new-bare.git | ||
+ | cd ~/new-bare.git | ||
+ | git symbolic-ref HEAD refs/heads/trunk | ||
+ | |||
+ | Then push the temp repository to the new bare repository. | ||
+ | |||
+ | cd ~/temp | ||
+ | git remote add bare ~/new-bare.git | ||
+ | git config remote.bare.push 'refs/remotes/*:refs/heads/*' | ||
+ | git push bare | ||
+ | |||
+ | You can now safely delete the ~/temp repository. | ||
+ | |||
+ | ===== Rename trunk branch to master ===== | ||
+ | |||
+ | Your main development branch will be named "trunk" which matches the name it was in Subversion. You’ll want to rename it to Git’s standard "master" branch using: | ||
+ | |||
+ | cd ~/new-bare.git | ||
+ | git branch -m trunk master | ||
+ | |||
+ | ===== Clean up branches and tags ===== | ||
+ | |||
+ | git-svn makes all of Subversions tags into very-short branches in Git of the form “tags/name”. You’ll want to convert all those branches into actual Git tags using: | ||
+ | |||
+ | cd ~/new-bare.git | ||
+ | git for-each-ref --format='%(refname)' refs/heads/tags | | ||
+ | cut -d / -f 4 | | ||
+ | while read ref | ||
+ | do | ||
+ | git tag "$ref" "refs/heads/tags/$ref"; | ||
+ | git branch -D "tags/$ref"; | ||
+ | done | ||
+ | |||
+ | |||
+ | ===== Publish ===== | ||
+ | |||
+ | Final repository is new-bare.git. To publish it using Apache (to be clonable) just run | ||
+ | |||
+ | git update-server-info | ||
+ | |||
+ | Zdroj: [[http://john.albin.net/git/convert-subversion-to-git]] |
programovani/svn-to-git.txt · Poslední úprava: 24.03.2013 11:50 autor: wladik