2010-07-02 11 views
11

Questo è forse insolito quindi lasciami impostare la scena:Gestisci sorgente sotto git e svn simultaneamente - ha senso?

Abbiamo un repository SVN contenente la nostra cronologia del progetto - un sistema embedded basato su Linux. Il repository SVN contiene sorgenti di kernel Linux, U-Boot, busybox, ecc. E tutte le nostre app, file system e simili.

Il kernel di Linux che abbiamo è vecchio e croccante e sto lavorando al porting sulla linea principale, che è in fase di sviluppo attivo per le nostre piattaforme. Sto facendo il lavoro sul lato kernel sotto git e le patch di trading con "The Community".

Potrei far funzionare le cose e scattare un'istantanea dei sorgenti del kernel e scaricarlo in SVN, ma mi piacerebbe mantenere la possibilità di ottenere aggiornamenti, avere filiali locali e gestire le patch con git. Potrei conservare due copie del kernel, una gestita da ciascun SCM, ma sarebbe un po 'complicato. Ci sono anche rischi di sviluppare e testare usando sorgenti del kernel gestite con git, e dimenticando di mettere queste modifiche in SVN con il risultato di versioni SVN rotte in cui i sorgenti non del kernel sono fuori sincrono.

La migrazione dell'intero progetto su git non è un'opzione. Gestire solo il sorgente del kernel con git e avere un mucchio di script di colla e hash memorizzati in SVN è possibile ma è più bello avere una storia unificata/capacità di differenziazione da SVN per l'intero progetto.

Quello che sto considerando è il tentativo di gestire i sorgenti del kernel sotto SVN e git contemporaneamente, nella stessa directory.

Come dev del kernel, userei principalmente git e faccio un commit SVN per uso interno quando le cose sembrano buone. Per gli altri utenti interni sarebbero in grado di ottenere tutte le origini coerenti con un controllo SVN, vedere una cronologia unificata e potrebbero apportare modifiche alle origini del kernel in SVN. Più tardi io o un'altra persona che usa Git può aggiornare SVN a tali modifiche e impegnarle a fare il giro giusto.

Un po 'di divertimento per ottenere git per ignorare i file .svn e viceversa dovrà essere fatto. Inoltre non sono abbastanza sicuro di come si possa prendere un semplice checkout SVN e dire a git di iniziare a gestire anche la sottostruttura del kernel, ma sono sicuro che Git ha alcune oscure opzioni di swiss-army-knife per farlo.

Questa è la mia idea del giorno. Significa che la maggior parte dei colleghi non deve preoccuparsi di git, e possiamo tranquillamente ignorare git e fork via più tardi, se necessario.

La domanda qui è davvero, qualcuno ha fatto qualcosa di simile, come è andata a finire, o quali soluzioni alternative hai escogitato?

+1

Seguito, ora lo sto facendo da un po 'e funziona bene. – blueshift

+0

Che dire se hai mai avuto bisogno di clonare questa configurazione su un'altra macchina? Ad esempio, se ho una directory sotto controllo git, aggiungila a svn con le ignores appropriate, ma poi voglio la stessa impostazione su un'altra macchina. Dovrei clonare il repository git e poi provare a fare il checkout del repository svn in quella directory? Viceversa? –

+1

Capito che si può fare quello che ho chiesto facendo git clone quindi 'svn checkout --force ' per combinare i due repository. –

risposta

6

L'ho eseguito regolarmente e funziona benissimo.

L'unica cosa importante che dovevo fare era aggiungere la cartella .git alla lista di sovversione di sovversione e le cartelle .svn/al file .gitignore.

+0

Promettente! Grazie per la risposta. – blueshift