2014-04-22 16 views
7

Jestem użytkownikiem Git próbującym nauczyć się Perforce.Gałęzie rozgałęzień vs rozgałęzienie git

W Git użytkownik może kasować z głównej gałęzi, zmieniać niektóre pliki i przekazywać swój kod do serwera w innym oddziale z określonym identyfikatorem zatwierdzenia.

Inny użytkownik Git może pobrać nowy oddział za pomocą jego ID zatwierdzenia i pracować nad nim.

Jak można to zrobić za pomocą Perforce?

+2

Czy używasz strumieni lub tylko tradycyjnych gałęzi perforowanych? Wiele z tego zależy od tego, jaki jest twój tryb działania i struktura. W strumieniach są lekkie gałęzie, a do tworzenia tymczasowych roboczych pseudo-zmian używa się regałów. Tak wiele zależy od struktury twojej organizacji. – gaige

Odpowiedz

13

Jestem użytkownikiem Git, który próbuje nauczyć się Perforce.

Przykro mi.

Jak można tego dokonać za pomocą narzędzia Perforce?

Jestem lepszym użytkownikiem Git niż jestem użytkownikiem Perforce, więc popraw mnie, jeśli coś wydaje się nie tak. Gorąco polecam czytanie stron man i a tutorial.

To "nie może" być, przynajmniej nie tak, jak robi to Git.

Po utworzeniu odgałęzienia w git tworzony jest cały katalog repozytorium dla całego stanu repozytorium. Perforce nie obsługuje tego, a raczej "rozgałęzianie" jest bardziej per-file: to znaczy, plik A rozgałęziony A do pliku B, w którym plik punktu B zawiera odwołanie do pliku A mówiącego "Przyszedłem stąd". To odwołanie zwrotne może następnie zostać użyte do określenia wspólnego przodka do celów scalania. Rozumiem jednak, że te referencje zwrotne dotyczą pliku, a Ty możesz dowolnie zintegrować (scalić) dowolny plik. (Porównaj z git, gdzie „nadrzędna popełnić” is your back-odniesienia, ale na całe repozytorium skali).

można rozgałęziać całych zestawów plików przy użyciu p4 integrate, używając składni typowy z konieczności (np //depot/some/path/...) . Zazwyczaj należy utworzyć cały katalog w całym katalogu, na przykład //depot/main/my_project w //depot/release-1.0/my_project lub coś podobnego. Perforce, o ile mi wiadomo, nie dba o ścieżki: po prostu "rozgałęzia" pliki z jednej lokalizacji do drugiej. Jakikolwiek wzór lub rozsądek na ścieżkach zależy od ciebie.

Dodatkowo można użyć p4 branch, aby utworzyć "specyfikacje oddziałów", które są w zasadzie sposobem na zapisanie źródłowego zestawu plików i ich miejsc docelowych w celu ułatwienia rozgałęzienia. (Jeśli weźmiesz przykład zwolnienia, możesz ewentualnie połączyć zmiany z powrotem lub scalić kolejne zmiany w wydaniu itp.)

Za każdym razem, gdy współpracowałem z Perforce, gałęzie były bestiami o innym charakterze niż w Git, i tutaj jest trochę różnicy kulturowej. Gałęzie były stosunkowo rzadkie. (Widziałem tylko, że były używane do wydań, nigdy.) Nie używaliśmy ich do gałęzi z funkcjami, może poza największą z funkcji; w porównaniu do git, gdzie dla mnie "gałąź funkcji" jest zwykle "zajęło" 1 zatwierdzenie ".

+0

Jak powiedział gaige w komentarzu do pierwotnego pytania, zależy to od Twojej organizacji. Perforce jest centralnie zorganizowany, więc od centralnej instancji zależy, czy gałęzie, gałęzie kontroli jakości, gałęzie wydawnicze itp. Są potrzebne, czy nie. Powszechną praktyką jest nie pozwalać użytkownikom większej organizacji decydować o oddziałach (ile i gdzie). Możesz jednak pomyśleć o użyciu mostka git-p4. – pitseeker

+0

@pitseeker: "Powszechną praktyką jest nie pozwalać użytkownikom kontrolować oddziałów (ile i gdzie)" To może być trochę bardziej ekstremalne niż to, co widziałem (ale brzmi to niewiarygodnie, niestety) ... (org zwykle miał wzór do naśladowania, biorąc pod uwagę, że w przeciwnym razie rzeczy mogą szybko ulec dezorganizacji). Sposób, w jaki to opisujesz, jest niefortunny i wydaje się, że przeszkadza ci w krytycznej części pracy inżyniera. – Thanatos

+0

* Przykro mi. * Rozśmieszyłem mnie o wiele bardziej niż powinienem. – DevNull

1

Jeśli gardzisz Perforce tak samo jak ja, powinieneś dalej używać Git. Muszę powiedzieć, że czuję się o wiele wygodniej używając Gita.

Obecnie używać git-P4 + zestaw skryptów Bash napisałem (git-p4-helpers)

śledzę uproszczoną odmianę this workflow:

$ git checkout p4-integration 
$ git p4 sync 
$ git p4 rebase 
$ git tag last-green <SHA1> # last green build 
$ git rebase last-green develop 
$ git checkout -b <my-feature> 
$ git commit # as needed 
# Sync Git->P4 (see Github:git-p4-helpers) 
# Submit using P4 

Jest jedna rzecz, mam wciąż nie jest udało mi się wymyślić, a mianowicie, jak szybko przesłać od Git-P4 do P4 (za każdym razem, gdy próbowałem, trwa to wiecznie, aby wykonać git p4 sync, a następnie kilka innych rzeczy, które sprawiają, że bardzo denerwujące jest przesyłanie z mojego repozytorium Git bezpośrednio do P4. Napisałem skrypt do zsynchronizowania mojego repozytorium Git z moim obszarem roboczym P4, a następnie Prześlij używając P4.

Na razie pozwala mi to korzystać z wszystkich funkcji Git podczas pracy nad moimi zmianami, a następnie po prostu przesłać za pomocą P4.

0

Pamiętaj, że perforce tworzy kopię dla oddziału, w którym Git właśnie tworzy wskaźnik do nowej gałęzi, która jest znacznie szybsza.

Powiązane problemy