2011-04-01 13 views
13

Ho un repository SVN con un layout simile
project1/tronco
project1/rami
project1/tag
project2/trunk
project2/rami
Progetto2/tag
eccPosso git-svn clone di un repository svn con layout multipli directory standard

per una serie di ragioni, mi piacerebbe un repo git-svn che mi permette di lavorare su uno di questi progetti e prelevo/dcommit da/per tutti loro a una volta. Questo tipo di cose è possibile? So che potrei semplicemente git-svn clonare il tutto senza specificare rami, tag e trunk, ma poi perderei molto del vantaggio di usare git.

risposta

9

Ecco come l'ho fatto. Ci possono essere modi più semplici, però.

  1. selezionare il primo progetto con il layout standard che desideri lavorare e git svn clone esso:

    git svn clone --stdlayout http://sample.com/svn/repository-name/project-name repository-name

  2. andare nella directory repository-name e modificare il suo file .git/config. Puoi farlo anche con i comandi git-config, ma lo trovo più facile in un editor di testo.

  3. Vedrai una sezione [svn-remote "svn"] già definita per il tuo primo progetto. Rinominare lo svn-remote in qualcosa di più esclusivo di "svn", probabilmente uguale al nome del tuo progetto. Ad esempio, [svn-remote "project-name"].

  4. Creare più sezioni [svn-remote "project-name"] per ciascun progetto, seguendo il modello del primo. Dare a ciascuno un nome unico! È necessario modificare le impostazioni fetch, branches e tags per utilizzare i nomi di directory di Subversion corretti per ciascun progetto.

  5. Una volta terminato, salva il file ed esegui git svn fetch --fetch-all. Gli altri progetti verranno recuperati come telecomandi nel repository locale.

  6. Per passare da un progetto all'altro a master, fare un git reset --hard other-project-name/trunk, proprio come se si stesse passando a un altro ramo di Subversion remoto.

+0

Sarà un rebase git svn rebase tutti i progetti? Un git svn dcommit commetterà tutte le modifiche? –

+1

'git svn rebase' ti dà solo le revisioni per il tuo attuale HEAD, quindi no, tutto quello che ottieni è il ramo corrente nel progetto corrente. Lo stesso per 'git svn dcommit'. Per ottenere ogni progetto devi fare un 'git svn fetch --fetch-all' e quindi rebase il tuo attuale HEAD. Sfortunatamente non conosco un equivalente per impegnare tutte le filiali locali che sono in anticipo sui loro telecomandi, ma sono sicuro che potrebbe essere programmato. –

+2

Questo è quello che stavo cercando. Per semplificare, al punto 1 aggiungere -R nome progetto1 --prefix = nome progetto1/al comando git svn clone per fare in modo che il clone iniziale utilizzi il diritto svn-remote nome e il prefisso di ramo dall'inizio. –

Problemi correlati