Git SVN

Da Andreabont's Wiki.

GIT può anche funzionare come client SVN, in modo da garantire l'interoperabilità tra isistemi di versionamento. Questa tecnica permette di avere un repository locale GIT, con tutte le sue funzionalità, e allo stesso tempo permette di committare su un server remoto SVN.

Comandi base

Info

Per conoscere le informazioni sul server SVN

git svn info

Push

Git lavora in modo distribuito, contrariamente a SVN, quindi ti permette di fare un numero imprecisato di commit locali prima di inviarli ad un altro repository. Su SVN un push equivale ad un commit, per farlo si usa il seguente comando, che effettua automaticamente dei commit SVN per ogni commit locale creato.

git svn dcommit

Pull

git svn rebase
git svn fetch

History in stile SVN

Puoi usare la normale gestione della history di git, oppure avere una history in stile SVN.

git svn log

Crea un branch SVN

git svn branch <nome-branch>

Merge

git merge --no-commit --no-ff <nome-branch>
git commit --amend
git svn dcommit

Migrazione SVN -> Git

Per migrare un repo SVN in un repo Git è necessario prima fare una lista di conversione degli autori:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

Successivamente è possibile scaricare in locale l'intero repo SVN:

git svn clone -A authors-transform.txt --stdlayout <indirizzo-repo-svn>

Se necessario è possibile migrare anche la lista dei file da ignorare:

git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

Alla fine, è possibile fare push ad un repo remoto per concludere la migrazione

git remote add bare <indirizzo-repo-git>
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare