2012-10-05 20 views
27

Sto facendo un progetto di sviluppo.git svn - Posso usare git e svn allo stesso tempo? non c'è bisogno di interazione tra git e svn

L'azienda sta usando SVN, quindi per il main commit e checkout dovrebbe essere fatto tramite SVN.

Tuttavia, non mi piace SVN e sono un utente git. Dal momento che solo quando penso che il mio codice è buono, mi impegnerò per l'azienda SVN, vorrei usare git per il mio custode della storia.

Non ho bisogno di usare git per fare la cosa SVN, né viceversa.

Posso controllare la versione del mio stesso codice utilizzando SVN e git allo stesso tempo? Nessuna interazione tra di loro.

+1

Ignora semplicemente la cartella '.git' per SVN e la cartella' .svn' per Git e dovresti stare bene. O stai chiedendo come sostanzialmente spingere/tirare da entrambi contemporaneamente? – Blender

+0

Ma perché? git funziona perfettamente con un repository svn sull'altro lato, perché non beneficiarne? –

+3

Certamente possibile, e un giusto passo verso i tuoi colleghi, non per spingere i cambiamenti incompiuti. tuttavia c'è un pericolo _huge_ nascosto qui: si tenderanno a fare pochissimi commit al repository delle aziende. Ciò significa che genererai molti più conflitti rispetto ai tuoi colleghi. Quando si usa la sovversione, ha senso usare un comportamento di commit frequente. Ho dovuto imparare questo nel modo più duro :-) – arkascha

risposta

32

È possibile clonare un repository di subversion sulla macchina utilizzando git svn clone <SVN repo URL>. Il codice sarà disponibile come repository git. Puoi fare il tuo lavoro lì e fare i commit locali come ti pare. C'è un'opzione a riga di comando per ottenere un checkout "superficiale" piuttosto che l'intero repository che è spesso utile. Ho dimenticato di cosa si tratta.

In qualsiasi momento, si desidera eseguire l'equivalente di svn update, fare un git svn rebase. Questo preleverà nuovi commit che sono stati controllati in SVN dopo l'ultima sincronizzazione e quindi rebase le modifiche sul nuovo suggerimento.

Quando sei pronto con i tuoi commit, fai un git svn dcommit. Questo invierà tutti i tuoi nuovi commit in svn uno per uno. Puoi anche schiacciare i tuoi commit locali in uno solo e inviarlo facendo prima un rebase locale e poi uno svn dcommit. Questo dovrebbe essere fatto sul ramo iniziale (di solito master).

Il fatto stesso che si stia verificando da subversion e che quindi si lavorino localmente in git significa che c'è "interazione" tra di loro in modo che l'ultima istruzione non sia valida.

+1

È stata apportata una modifica alla risposta che avrebbe dovuto essere pubblicata come commento. Ho ripristinato la modifica e ho inserito l'aggiunta testuale in questo commento: è comunemente considerato una cattiva pratica impegnare tutte le modifiche come una singola revisione (ad esempio, consultare http://stackoverflow.com/questions/107264/how-often -to-commit-changes-to-source-control e http://www.codinghorror.com/blog/2008/08/check-in-early-check-in-often.html). –