2009-02-27 13 views
48

Was sind Ihre Best Practices und Tipps für die Verwendung von git als Schnittstelle zu einem CVS-Repository?Best Practices für die Verwendung von Git mit CVS

+3

Ich wäre versucht, die gleiche Frage für SourceSafe zu stellen, aber ich möchte wirklich nicht die (totale Ziel-) Verspottung austragen. –

Antwort

21

Ich schrieb eine Antwort auf eine ähnliche Frage here.

Dies funktioniert überraschend gut, wenn Sie gezwungen sind, Änderungen in ein zentrales CVS-Repository zu verschieben.

11

Ich habe nur mit Git-CVS-Interaktionen gearbeitet, um Git für einen Freund zu testen, aber es war sehr einfach.

  • Sie müssen eine aktuelle Kopie von cvsps installieren. Git cvsimport verwendet dies, um auf CVS-Verlauf zuzugreifen.
  • Wir fanden, dass, für ein großes Projekt, inital Set-up viel schneller war durch eine vollständige Kopie des CVS-Repo auf dem Computer nehmen, und die git cvsimport vor Ort zu tun:

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

Beachten Sie, dass das -x nach -p sehr wichtig ist. Dies übergibt -x an cvsps. Weitere Informationen finden Sie unter cvsps man page.

+1

Ich denke, es gibt eine fehlerhafte/in Schritt 3. –

+2

@PeterBurns: Das ist ... Es sollte sein 'git cvsimport -p -x -v-d: local:/Pfad/zu/cvsroot yourproject' – Archenoth

1

Leicht Meta-Antwort. Wenn Sie gezwungen sind, git 'guerilla style' zu verwenden, d. H. Ihre Firma blockiert die Verwendung von cvs für die Versionskontrolle und Sie verwenden git auf Ihrer Workstation, um das Leben einfacher zu machen, könnten Sie in Erwägung ziehen, so etwas zu tun;

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 

Diese Datei 'cvs' aufrufen und den Pfad vor dem eigentlichen CVS-Befehl einfügen. Ansonsten können Sie git verpflichtet älter als die cvs diejenigen, die nicht so nützlich ist ...

8

ich die Details meiner schrieb auf eigene workflow for remote CVS, local Git

+1

Sie" don 't cvsimport' aus nicht näher spezifizierten Gründen (es gibt auch andere Tools, um dies zu tun), so dass Sie alle vorherigen Revisionsinformationen wegwerfen? Das ist eine schreckliche Lösung. –

+0

Was ist so schlimm daran? Wenn ich meine Änderungen zurück in CVS verschiebe, wird kein Revisionshistory "rausgeworfen". Und wenn ich Revisionshistorie sehen möchte, kann ich immer CVS-Befehle verwenden, um das zu tun. –

+0

Welchen Vorteil hast du, wenn du "CVS" zu ".gitignore" hinzufügst, anstatt es zu begehen? Macht es dein git-Repository nicht unvollständig? Siehe http://stackoverflow.com/a/37585092/1122270 und http://stackoverflow.com/q/37585385/1122270 für was ich meine. – cnst

1

Wenn der Upstream ist zu 100% in CVS (zB OpenBSD , oder viele seiner Unterprojekte wie oder ports-readmes), und besonders, wenn es so rostig ist wie der OpenBSD CVS-Baum (z. B. gelegentlich sogar neu schreiben), finde ich es sehr nützlich, einfach die zugrunde liegenden CVS/{Entries,Repository,Root} Dateien direkt in meine git zu committen Repository.

Dies macht es sehr einfach, nicht mehr unabhängigen Arbeitsbereiche haben müssen, macht es möglich, mit git auf jeder Maschine zur Kasse, und dann cvs up an Ort und Stelle oder cvs diff korrektes CVS-Patches für den Versand an die git-weniger-Maintainer erzeugen stromaufwärts.

Verwandte Themen