Convertire un repository Svn in Git: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
|||
| Line 8: | Line 8: | ||
sudo mkdir -p /files/git/repos/etc | sudo mkdir -p /files/git/repos/etc | ||
cd /files/git/repos/etc | cd /files/git/repos/etc | ||
sudo chmod 600 /files/git/repos/etc | |||
sudo chown -R :www-data /files/git/ | |||
sudo chmod g+rX -R /files/git/ | |||
sudo git init --bare | sudo git init --bare | ||
Revision as of 10:13, 30 August 2011
Manualmente
- Installare il convertitore git-svn
sudo apt-get install git-core git-svn
- Creare il repo git vuoto ed inizializzarlo
sudo mkdir -p /files/git/repos/etc cd /files/git/repos/etc sudo chmod 600 /files/git/repos/etc sudo chown -R :www-data /files/git/ sudo chmod g+rX -R /files/git/ sudo git init --bare
- Fare il checkout del repository svn per estrarre gli autori
cd /tmp/ mkdir svn cd svn sudo svn co file:///files/svn/repositories/etc .
- Verificare che abbia la struttura standard trunk/ branches/ tags
- Estrarre gli autori
sudo svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
- Editare nomi ed email
vi authors-transform.txt
root = Root Fireman <root@fireman.mannesmann.priv>
- Convertire il repository CHE DEVE AVERE IL LAYOUT STANDARD trunk/ tags/ branches/
sudo mkdir /tmp/git cd /tmp/git sudo git svn clone file:///files/svn/repositories/etc --no-metadata -A ../svn/authors-transform.txt --stdlayout .
- Convertire gli ignore
sudo git svn show-ignore -i trunk | sudo tee .gitignore sudo git add .gitignore sudo git commit -m 'Convert svn:ignore properties to .gitignore.'
- Linkare il repository locale a quello remoto:
sudo git remote add etc /files/git/repos/etc
- Tweak per i percorsi svn
sudo git config remote.etc.push 'refs/remotes/*:refs/heads/*'
- Fare il push
sudo git push etc (oppure sudo git push etc trunk) ?
- Convertire il trunk nel repository centrale
cd /files/git/repos/etc
sudo git symbolic-ref HEAD refs/heads/trunk
sudo git branch -m trunk master
- Creare lo script per convertire i branches
sudoedit convert-tags-branches
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
sudo chmod +x convert-tags-branches
- Convertire il branch
sudo ./convert-tags-branches
Riferimenti
Con git-svn-migrate
Lo script è compatibile solo con git>=1.7 (NON va da lenny) IN OGNI CASO ANCHE DA SQUEEZE NON VA
- Installare il convertitore git-svn
sudo apt-get install git-core git-svn
- Scaricare lo script di conversione
cd /tmp/
- Fino a che i fix con /bin/bash non sono stati integrati, prelevare da
git clone https://github.com/mallman/git-svn-migrate.git
- e cambiare gli interpreti in /bin/bash
- poi si può usare il repository originale
git clone https://github.com/JohnAlbin/git-svn-migrate
cd git-svn-migrate/
- Fare l'ultimo commit sul repository svn
- Creare il file contenente l'elenco dei repository da convertire
vi repositories-list.txt
file:///files/svn/repositories/etc
- Creare il file con gli autori:
sudo ./fetch-svn-authors.sh --url-file=repositories-list.txt > author-transform.txt
- Editarlo per correggerlo:
vi author-transform.txt
root = Root Crosrv01 <root@crosrv01.cross.priv>
- Convertire il repository:
sudo ./git-svn-migrate.sh --url-file=repositories-list.txt --authors-file=author-transform.txt /tmp/git-converted
- Creare la dir per il repo centrale git vuoto
sudo mkdir -p /files/git/repos/etc cd /files/git/repos/etc
- Spostarci quello convertito
sudo mv /tmp/git-converted/etc.git/* /files/git/repos/etc
- Provare a fare un clone:
cd /tmp mkdir test cd test sudo git clone /files/git/repos/etc/ .