2009-02-27 12 views
48

Jakie są twoje najlepsze praktyki i porady dotyczące używania git do interfejsu z repozytorium CVS?Najlepsze praktyki korzystania z git z CVS

+3

Chciałbym pokusić się o to samo pytanie SourceSafe, ale naprawdę nie chcę jeździć na (całkowicie na cel) drwiny. –

Odpowiedz

21

Napisałem odpowiedź na podobne pytanie here.

Działa to zaskakująco dobrze, gdy jesteś zmuszony kontynuować wprowadzanie zmian do centralnego repozytorium CVS.

11

Pracowałem tylko z interakcjami Git-CVS, aby zaprezentować Gita znajomym, ale było to bardzo proste.

  • Musisz zainstalować aktualną kopię cvsps. Git cvsimport używa tego do uzyskania dostępu do historii CVS.
  • Okazało się, że dla dużego projektu, inital set-up był znacznie szybciej biorąc pełną kopię repo CVS na komputerze, a robi git cvsimport lokalnie:

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

Należy zauważyć, że -x po -p jest bardzo ważne. To przechodzi -x do cvsps. Więcej informacji można znaleźć na stronie cvsps man page.

+1

Myślę, że jest błędny/w kroku 3. –

+2

@PeterBurns: To jest ... Powinno być 'git cvsimport -p -x -v -d: local:/path/to/cvsroot yourproject' – Archenoth

1

Lekko meta-odpowiedź. Jeśli jesteś zmuszony do używania git 'guerilla style', np. Twoja firma utknęła przy użyciu cvs do kontroli wersji i używasz git na twojej stacji roboczej, aby ułatwić życie, możesz rozważyć zrobienie czegoś takiego;

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 

Wywołanie tego pliku "cvs" i włączenie go do ścieżki przed prawdziwym poleceniem CVS. W przeciwnym razie można mieć git popełnia starsze niż te, CVS, który nie jest tak przydatny ...

8

pisałem up szczegóły własnego workflow for remote CVS, local Git

+1

you" don "t zaufania" 'cvsimport' z nieokreślonych powodów (są również inne narzędzia do tego), więc promujesz wyrzucanie wszystkich poprzednich informacji o rewizji? To straszne rozwiązanie. –

+0

Co jest takiego strasznego? Jeśli wrzucam moje zmiany z powrotem do CVS, to żadna historia zmian nie zostanie "wyrzucona". A jeśli chcę zobaczyć historię zmian, zawsze mogę użyć komend CVS, aby to zrobić. –

+0

Jaką korzyść uzyskasz dodając 'CVS' do' .gitignore', zamiast zatwierdzić go do git? Czy to nie powoduje, że twoje repozytorium git jest niekompletne? Zobacz http://stackoverflow.com/a/37585092/1122270 i http://stackoverflow.com/q/37585385/1122270 o co mi chodzi. – cnst

1

Jeśli prąd jest w 100% w CVS (np OpenBSD lub wiele jego podprojektów, takich jak mdocml lub ports-readmes), a zwłaszcza jeśli jest tak zardzewiały, jak drzewo CVS OpenBSD (np. czasami nawet ma przepisywane historie), uważam za całkiem przydatne po prostu zatwierdzenie plików CVS/{Entries,Repository,Root} bezpośrednio do mojego git magazyn.

To sprawia, że ​​bardzo łatwo się nie mieć wiele niezależnych obszarów roboczych, sprawiają, że możliwe do kasy z git na dowolnym komputerze, a następnie cvs up na miejscu, albo cvs diff wygenerować odpowiednie łatki CVS dla mailingu do opiekunów git-mniej pod prąd.