Archivio

Posts Tagged ‘github’

Importare (molteplici) repository SVN in Git

luglio 23, 2014 Lascia un commento

Non so quanti di voi si sono solo imbattuti in questo video di Linus Torvalds che presenta Git ad un Google Tech Talk.

Fantastico, non puoi non innamorarti di Git. Come fai a non pensare che quello che hai usato fino ad ieri fosse quantomeno in adatto se confrontato a Git. Specie per chi come me usava SVN.

SVN 2 Git

SVN 2 Git

Solo che passare da SVN a Git è semplice se hai un solo repository da migrare. Per capirci, solo se devi riportare tutte la struttura che avevi su SVN nel nuovo repository Git senza cambiare nulla.

Se invece vuoi cambiare la struttura delle directory, per magari riorganizzare il repository e aggiungere qualche progetto SVN che avevi prima, beh, le cose cambiano un attimo e ci si può perdere qualche ora a capire come fare. Perché ad esempio Git non gestisce le directory vuote come fa SVN. In Git non si possono avere directory “committate” vuote, bisogna per forza scriverci dentro qualcosa, ad esempio un file .gitignore. E nemmeno nessuno ti dice che quando crei un repository Git, ad esempio su Github, creare immediatamente un file README.md o .gitignore non è un opzione. E’ una necessità. Perché se il repository è completamente vuoto alcune comandi come il merge non funzionano (e non si capisce perché).

In questo post vi racconterò come importare più repository SVN su Git senza impazzire troppo.

Innanzi tutto creiamo i nostro repository Git vuoto:

cd /tmp/
mkdir git-repo
git init git-repo/
cd git-repo/
ls > deleteme.txt
git add deleteme.txt
git commit -m "first import"

Poi esportiamo il nostro repository SVN:

cd /tmp/
svn clone --preserve-empty-dirs --no-metadata svn://example.net/svn-path svn-export

Ora arriva la parte difficile, finalmente abbiamo il nostro export SVN possiamo portarlo dentro il repository Git (senza committare).

cd /tmp/
cd git-repo
git remote add -f svn-export ../svn-export
git merge --no-commit svn-export/master

Ora manca solo spostare i file o le directory del vecchio progetto nel nuovo path. Per automatizzare il processo ho pensato di salvarmi in una variabile d’ambiente la lista dei file e delle directory che vorrei spostare.

cd /tmp/
export TO_BE_MOVED=$(find svn-export -maxdepth 1  | sed 's/svn-export\///' | sed '/^svn-export$/d' | sed '/^.git$/d')

Poi possiamo creare la nuova directory destinazione e spostare tutto dentro:

cd /tmp/
cd git-repo
mkdir dest-directory
for F in $TO_BE_MOVED; do git mv $F dest-directory/ ; done

Ora non manca che committare tutto il lavoro e, se serve, passare ad un nuovo repository SVN.

git commit -m "first import"
git remote remove svn-export
Categorie:Git Tag:, , , , ,