2009-02-27 1 views
48

Quali sono le migliori pratiche e i suggerimenti per l'utilizzo di git per l'interfaccia con un repository CVS?Best practice per l'utilizzo di git con CVS

+3

Sarei tentato di fare la stessa domanda per SourceSafe, ma davvero non voglio uscire dalla derisione (totalmente sul bersaglio). –

risposta

21

Ho scritto una risposta a una domanda simile here.

Questo funziona sorprendentemente bene quando si è costretti a continuare a trasferire le modifiche in un repository CVS centrale.

11

Ho lavorato solo con le interazioni Git-CVS per demo Git per un amico, ma era molto semplice.

  • È necessario installare una copia corrente di cvsps. Git cvsimport utilizza questo per accedere alla cronologia CVS.
  • Abbiamo scoperto che, per un grande progetto, inital set-up era molto velocemente prendendo una copia completa del repo CVS sul vostro computer, e fare la git cvsimport a livello locale:

    $ rsync rsync://yourprojecthost.com/cvsroot/yourproject/* 
    $ mkdir myproject.git 
    $ cd myproject.git 
    $ git cvsimport -p -x -v -d :local:/path/to/cvsroot/yourproject 
    

Si noti che il -x dopo -p è molto importante. Questo passa -x a cvsps. Per ulteriori informazioni, consultare lo cvsps man page.

+1

Penso che ci sia un errato/al punto 3. –

+2

@PeterBurns: Che ci sia ... Dovrebbe essere 'git cvsimport -p -x -v -d: local:/percorso/a/cvsroot yourproject' – Archenoth

1

Leggermente meta-risposta. Se sei costretto ad usare git 'guerilla style', cioè la tua azienda è bloccata usando cvs per il controllo della versione e usi git sulla tua workstation per semplificarti la vita, potresti prendere in considerazione l'idea di fare qualcosa del genere;

CVS=realCvsPath 
# commit to the git first 
if ($ARGV[0] && $ARGV[0] eq "commit") 
{ 
system 'git commit -a'; 
} 

# execute the appropriate cvs program 
# =================================== 
exec "$CVS", @ARGV 

Chiamando questo file "cvs" e includendolo il percorso prima del comando CVS reale. In caso contrario, si può avere git impegna più vecchio di CVS quelli, che non è poi così utile ...

8

ho scritto i dettagli della mia workflow for remote CVS, local Git

+1

tu" don " "non fidarti" di "cvsimport" per motivi non specificati (ci sono anche altri strumenti per farlo), quindi promuovi l'eliminazione di tutte le precedenti informazioni di revisione? Questa è una soluzione terribile. –

+0

Cosa c'è di così terribile? Se sto trasferendo le mie modifiche in CVS, la cronologia delle revisioni non viene "eliminata". E se voglio vedere la cronologia delle revisioni, posso sempre usare i comandi CVS per farlo. –

+0

Che vantaggio ottieni aggiungendo 'CVS' a' .gitignore', invece di commetterlo su git? Non rende il repository git incompleto? Vedi http://stackoverflow.com/a/37585092/1122270 e http://stackoverflow.com/q/37585385/1122270 per quello che intendo. – cnst

1

Se il monte è al 100% in CVS (ad esempio, OpenBSD , o molti dei suoi sottoprogetti come e, soprattutto, se è arrugginito come l'albero CVS di OpenBSD (ad esempio, a volte anche con riscrittura della cronologia), trovo molto utile semplicemente impegnare i file sottostanti direttamente nel mio git repository.

Questo lo rende molto facile da non avere più aree di lavoro indipendenti, permettere alla cassa con git su qualsiasi macchina, e poi cvs up in atto, o cvs diff per generare patch CVS corretti per mailing ai manutentori git-less a monte.