2009-07-29 6 views
11

Jeśli zrobisz sync, może się zdarzyć, bardzo często, że nic nie robić, nawet jeśli powinno. Jeśli wykonasz wymuszoną synchronizację (sync -f), to z całą pewnością zsynchronizujesz wszystkie pliki z serwera, co jest nie do przyjęcia, jeśli masz duży projekt.Jak wykonać szybką i bezpieczną synchronizację na perforce?

Pytanie brzmi, jak wykonać szybką synchronizację?

Odpowiedz

18

Kluczową częścią pytania jest "nawet jeśli powinno". Bezbłędnie, w całym moim (zbyt) wieloletnim doświadczeniu z Perforce, użytkownicy, którzy zwyczajowo powracają do wymuszonych synchronizacji, ponieważ normalna synchronizacja nie robi tego, czego oczekują, nie używają poprawnie Perforce.

Musisz pozwolić Perforce zarządzać twoim twardym dyskiem - serwer wie, które wersje posiadanych plików posiadasz, więc normalna synchronizacja dostanie to, czego potrzebuje. Jeśli się nie powiedzie, jest to prawie bez wyjątku znak, że użytkownik modyfikuje, usuwa, dodaje i zmienia nazwy plików poza Perforce (np. W Eksploratorze).

Czasami może się zdarzyć, że system jest zabawny (tj. Błąd PC), więc nie musi to być wina użytkownika. Ale są one bardzo rzadkie - stąd mój "zwyczajowo" kwalifikator powyżej.

Jeśli myślisz, z ręką na sercu, że nie robisz nic niezwykłego, zacznij patrzeć na to, jakie inne procesy mogą poprawić te pliki. Na przykład. czy tworzysz system, robisz coś dziwnego, i próbujesz modyfikować pliki podczas ich kompilacji? Czy masz otwarty udział sieciowy, który być może ktoś inny nieumyślnie szturchnie? Czy masz system zapasowy, który zakłóca działanie?

Nadzieję, że pomaga.

+2

Perforce kojarzy, jakie wersje posiadanych plików posiadasz ze specyfikacją każdego klienta. Ta informacja jest przechowywana na serwerze z każdą specyfikacją klienta - w tym, co nazywa ona "listą". Klienci współużytkowani nie są typową praktyką użytkownika. Są one dozwolone przez Perforce, aby umożliwić określone scenariusze użycia. Ale jeśli pracujesz na różnych maszynach, jest to obsługiwane przez specyfikację klienta na maszynę. Właśnie do tego zostały zaprojektowane. –

+0

Załóżmy, że masz farmę kompilacji - czy chcesz utworzyć obszar roboczy (clientspec) dla każdego komputera w farmie? – sorin

+0

Tak, w większości przypadków wskazana byłaby specyfikacja klienta na maszynę. Możesz zautomatyzować ich tworzenie, więc nie jest to tak bolesne, jak ci się wydaje. –

4

Jeśli utworzysz niespójność, gdzie perforce tracisz kontrolę nad tym, co dzieje się w twoim obszarze roboczym, powinieneś użyć funkcji "Uzgodnij pracę offline ..." (w P4V).

Spowoduje to uruchomienie folderu diff i wyświetlenie informacji o dostępnych opcjach rozwiązania niespójności.

Ogólnie upewnij się, że zawsze wyewidencjonujesz pliki jawnie przez perforce (otwórz do edycji). To dziwne, jeśli jesteś przyzwyczajony do innych systemów.

+3

Przepraszam, ale nie zamierzam użyć do tego klienta wizualnego. W przypadku tego samego projektu synchronizuję pliki z 6 różnych serwerów perforacji, więc akceptuje się tylko rozwiązanie wsadowe - nie chcę powtarzać tego procesu ręcznie. – sorin

+0

@sorin: Czy kiedykolwiek znalazłeś akceptowalne rozwiązanie? Występuje coś podobnego przy próbie automatyzacji kompilacji. Nie chcę wymuszać synchronizacji za każdym razem, ponieważ zajmuje to około 2 godziny. – Jordan

+0

Przepraszam, ale już mówię. Moje ostatnie doświadczenie z nimi było prawie 5 lat temu. Dla nich jest tylko jedna przyszłość, jedna podobna do jeżyny. – sorin

6

Jak wspomniano w innych odpowiedziach, należy utworzyć oddzielny klient (obszar roboczy) dla każdej "instancji" drzewa katalogów zsynchronizowanego ze składu.

Jeśli chcesz wymusić synchronizację tylko te pliki, które uległy zmianie od zajezdni:

p4 diff -se ... | p4 -x - sync -f 
p4 diff -sd ... | p4 -x - sync -f 

Warning: że zastąpi każdy lokalnie zmienionych plików (w bieżącym katalogu i podkatalogów).

Jeśli zamiast tego edytowany niektóre pliki i zapomniał je otworzyć do edycji pierwsze, można to zrobić:

p4 diff -se ... | p4 -x - edit 

który zostanie otwarty do edycji dowolnego pliku, który jest różny od zajezdni.

I tak:

p4 diff -sd ... | p4 -x - delete 

otworzą dla usunięcia pliku, który został usunięty lokalnie.

0

Wierzę, że polecenie, którego szukasz, jest czyste p4.

Od: http://www.perforce.com/perforce/r14.2/manuals/cmdref/p4_clean.html

„Pliki obecny w przestrzeni roboczej, ale brakuje w zajezdni zostały usunięte z obszaru roboczego Pliki obecny w zajezdni, ale brakuje przestrzeni roboczej wersji plików, które zostały.. zsynchronizowane z magazynu są dodawane do obszaru roboczego. Pliki zmodyfikowane w obszarze roboczym, które nie zostały odprawione, są przywracane do ostatniej wersji zsynchronizowanej z magazynu. "

+0

P4 Clean ostatecznie wykona zadanie, ale w przypadku bardzo dużego projektu jest bardzo powolny (wymaga uzgodnienia z automatyczną obsługą spraw znalezionych na korzyść serwera). Najlepszym przypadkiem dla OP jest wykonywanie operacji na plikach przez perforce (usuwanie, przenoszenie, edytowanie itp.). Od czasu do czasu należy sprawdzić, czy nic nie przeszło przez szczeliny. – Newtopian

Powiązane problemy