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
risposta
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.
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.
Penso che ci sia un errato/al punto 3. –
@PeterBurns: Che ci sia ... Dovrebbe essere 'git cvsimport -p -x -v -d: local:/percorso/a/cvsroot yourproject' – Archenoth
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 ...
ho scritto i dettagli della mia workflow for remote CVS, local Git
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. –
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. –
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
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.
Sarei tentato di fare la stessa domanda per SourceSafe, ma davvero non voglio uscire dalla derisione (totalmente sul bersaglio). –