2009-04-24 14 views
12

Jak już wspomniałem w artykule previous question, zamierzam przeprowadzić migrację naszej kontroli kodu źródłowego z Perforce do git.
Rozejrzałem się, znalazłem git-p4 (musisz wykopać nieco więcej, ponieważ nie jest to nawet w repozytorium wskazanym przez link. Rzeczywiste git-p4 script trudniej znaleźć).Uzyskiwanie całej historii plików za pomocą git-p4

Teraz uruchamiam ten skrypt i importuje on aktualną wersję plików do nowego repozytorium git, ale nie mogę uzyskać historii, niezależnie od tego, co robię.

Oto aktualny wiersz polecenia używam to:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

Tak, prawdziwe pytanie brzmi: czy ktoś udało się zaimportować P4 Depot, tym historia, chciałbym wiedzieć, jak zrobiłeś to.

Dzięki!

joce.

Odpowiedz

19

Spróbuj dołączyć "@all" do ścieżki pliku. Na przykład ten wytwarza repo pojedynczej wersji dla mnie:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/... 

Polecenie importowane pełną historię:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/[email protected] 

Próbowałem za pomocą przykładowy git-P4, ale zrezygnował z kilku powodów i napisał moja własna szybko importowana pompa. Minęło trochę czasu, więc niektóre problemy mogły zostać naprawione teraz, ale git-p4 miał problemy z dużymi listami zmian (np. Początkowe utworzenie gałęzi) (chociaż użycie specyfikacji klienta mogło pomóc, ja nie myślę, że próbowałem) i pliki z modyfikatorem rodzaju pliku "+ S" (który jest Bad And Evil, ale użyliśmy go). A mój Python-fu nie był w stanie pozwolić mi rozwiązać problemów, które miałem.

EDYCJA: ponieważ ktoś o to poprosił, oto jest.

https://github.com/araqnid/p4utils ma kilka rzeczy p4, z których p4-git-xfer jest replikatorem p4-> git (one-way). Ma jednak sporo problemów, ponieważ jest głównie narzędziem osobistym, a nie prawdziwym elementem infrastruktury.

Rozpoczęcie:

p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \ 
    trunk 'release/*' 'branch/*' \ 
    trunk=master release/*=r* branch/*=dev/* 

będzie klonować, że siłą rzeczy ścieżkę do gołego "dictionary.git". Pierwszymi argumentami po ścieżce bazowej są "specyfikacje gałęzi", które wskazują replikatorowi, gdzie znaleźć gałęzie pod bazą. Te późniejsze (z symbolami "=") są "lustrzanymi specyfikacjami", które mówią replikatorowi, jak tworzyć lokalne gałęzie z zaimportowanych. Specyfikacja gałęzi powoduje utworzenie "refs/remote/p4/trunk", "refs/remote/p4/release/1.0" itp. Lustrzane specs wymusza "refs/heads/master", aby odzwierciedlić "refs/remote/p4/trunk", "refs/heads/r1.0", aby odzwierciedlić "refs/remote/p4/release/1.0" itp. To było przeznaczone jako sposób na umożliwienie mi wybrania tylko konkretnych gałęzi z tych, które zostały zreplikowane, aby uzyskać propagację do klonów.

Spróbuje wykryć, jak tworzona jest gałąź, ale w Perforce jest to w pewnym stopniu pewne. Poza tym nie próbuje w ogóle robić żadnego śledzenia gałęzi: nawet scalenia całych gałęzi nie będą zapisywane jako takie, przepraszam.

Po początkowym klonie, uruchomienie p4-git-xfer fetch z wewnątrz repliki git spowoduje przyrostową aktualizację. Lista zmian o wysokim poziomie wody jest pobierana z marks/p4 w repozytorium git. To jest plik znaczników, który szybko importuje ładunki, więc jeśli masz ochotę na nogą, jak na przykład przy użyciu gałęzi filtra, aby przerobić rzeczy, pamiętaj, że możesz to również zaktualizować.

To nie jest ładne i ma kilka poważnych problemów; Używam go głównie dla własnej wygody, aby odizolować się od problemów z Perforce, a nie jako codziennej krytycznej infrastruktury. Jest jednokierunkowy: generalnie używam skryptu p4-am do stosowania łat stworzonych przez git format-patch. Że sama tylko działa głównie z ogólnego złośliwość analizowania, problemy z EOF nowej linii, zmiany binarnych itp

+0

Czy Twój skrypt importu p4 jest publiczny? Jeśli tak, czy mógłbyś go udostępnić? – joce

0

Próbuję również dowiedzieć się git-p4. Niestety, nie ma tam zbyt wiele dokumentacji. Chciałbym się z tobą skontaktować, ponieważ prawdopodobnie możemy sobie nawzajem pomagać.

+0

Hej tam Carl. Możesz skontaktować się ze mną na jocelynlegault z gmail.com – joce

-1

Pomoc git-p4 jest rzeczywiście bardzo dobre: ​​

man git-p4 

Na Ubuntu 12.04 jest dołącz do pakietu git-man.

0
  1. zainstalować bash git (CLI)
  2. zainstalować p4 CLI
  3. zainstalować Python 2.7
  4. get skrypt git-p4 >>http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. umieścić ten skrypt do c/program/files/git/bin/
  6. teraz otwórz git bash lub cmd sprawdź pisząc python done, p4 done, git done, git p4,
  7. utwórz obszar roboczy klienta o nazwie git.
  8. git p4 klon depo/ścieżka/@ wszystko repo/ścieżka

tylko w przypadku robi praca ustawić ścieżkę w zmiennych środowiskowych dla pytona czy pyton stwarza problemu zestaw P4CLIENT = git

Powiązane problemy