2009-09-08 10 views
7

Problem jest prosty. Użyłem git cvsimport do zaimportowania repozytorium cvs do zdalnej gałęzi w lokalnym repozytorium git. Następnie chciałbym zsynchronizować to repozytorium: gałęzie, znaczniki i wszystko, do repozytorium git w chmurze (github/gitorious). Aby to zrobić, nie mam dostępu do rsync lub bezpośrednio kopiować repozytorium, muszę użyć git push.Jak zwierciadlać jednego pilota git na inny za pomocą funkcji push

Jak wykonać kopię lustrzaną mojego lokalnego repozytorium, aby inni mieli dostęp do pełnej historii _cvsimport_d?

Konkretnie:
importować i śledzenia repozytorium przy cvsimport:

git cvsimport -i -v -C cdt-make-core -d :pserver:[email protected]:/cvsroot/tools -r cvs org.eclipse.cdt/all/org.eclipse.cdt.make.core

Powyższe import org.eclipse.cdt.make.core na oddalonych cvs w cdt- git warunkowej make-core.

mogę następnie wcisnąć szef głównej gałęzi CVS do github:

git push github cvs/master:refs/heads/cvs/HEAD

(określić ścieżkę na zdalny wyraźnie więc jeśli nie istnieje to jest tworzony.)

Czy istnieje sposób synchronizacji wszystkich gałęzi: cvs/* => cvs/* na pilocie?
Czy można zsynchronizować wszystkie tagi?

Odpowiedz

3

Moje wnioski są takie, że jeśli użyjesz drugiego rozsądnego rozwiązania poniżej, musisz najpierw wykonać --mirror, ponieważ usuwa on te cv/gałęzie, które próbujesz naciskać. Tak więc pełna formuła to:

git push --mirror -v github 
git push --force github cvs/master:refs/heads/cvs/HEAD 
for x in `git branch -r | grep '^..cvs/[a-zA-Z0-9_-]*$' | sed -e 's/^..//'` ; do 
    git push -v github $x:refs/heads/$x 
    git config branch.$x.remote github 
    git config branch.$x.merge refs/heads/$x 
done 
5

myślę szukasz opcji --mirror przesuwania:

git push --mirror github 

To będzie apelować wszystkie pozycje literatury (branże i tagi), w tym aktualizacje non-fast-forward. Używam tego do tworzenia kopii zapasowych mojego lokalnego repozytorium.

man page opisuje to tak:

Zamiast nazywania każdego ref do pchania, określa, że ​​wszystkie pozycje literatury pod $GIT_DIR/refs/ (która obejmuje, ale nie ogranicza się do refs/heads/, refs/remotes/ i refs/tags/) być dublowane do zdalne repozytorium. Nowo utworzone lokalne refs zostaną przekazane do zdalnego końca, lokalnie aktualizowane refs zostaną wymuszone na zdalnym końcu, a usunięte refs zostaną usunięte ze zdalnego końca. Jest to ustawienie domyślne, jeśli ustawiono opcję konfiguracji remote.<remote>.mirror.

[OT: używam CDT w mojej codziennej pracy i kocham go]

+0

Dzięki. Niestety nie wydaje się, aby to, co chcę. Wygląda na to, że repozytorium w chmurze wygląda jak moje, co oznacza, że ​​repozytorium github ma pilota "cvs", ale nie ma widocznych gałęzi cvs. Chciałem skopiować pełną zawartość pilotów/cvs/* do cvs/* na github. –

+0

Ahh, teraz widzę. Przepraszam za ślepy zaułek. –

1

Po eksperymentował, nie wierzę, istnieje jakikolwiek wbudowane wsparcie dla co chcę zrobić.

Jednak nie wydaje się być uzasadnione dwa rozwiązania:

  • Nie określić -r do cvsimport.
    Zaimportowane gałęzie będą wtedy istnieć bezpośrednio w repozytorium, a jako Pat sugeruje się --mirror.
  • Napisz skrypt powłoki, aby popchnąć * pilotów * cvs/** po jednym na raz (co jest proste).
    Zastosowanie --mirror tak że tagi są prawidłowo synchronizowane

Początkowo chciałem zachować cvsimport d oddziałów oddzielnie dla przestrzeni nazw. Jednak w przypadku pierwszej opcji sensowne jest całkowite oddzielenie repozytorium cvsimport (i tylko klonowanie z niego). Mogę dalej śledzić CVS bez ryzyka zabrudzenia śledzenia repozytorium git.