2015-02-06 12 views
38

Podczas pracy z Gerrit (weryfikacja kodu) często potrzebuję uzyskać kopię zestawu łatek dla celów testowania lub sprawdzania poprawności. Oczywistym i najprostszym sposobem jest pobranie archiwum lub pliku łatki za pośrednictwem interfejsu WWW Gerrit i ręczne zastosowanie go do mojego lokalnego źródła.Jak wyciągnąć dany zestaw łat od Gerrita?

Chociaż powyższe kroki są całkiem proste i spełniają moje potrzeby, w najlepszym świecie chciałbym, aby zestaw poprawek pojawił się jako zatwierdzenie w moim lokalnym Git.

Rozglądałem się i nie znalazłem rozwiązania. Znalazłem kilka rzadkich informacji, które po skompilowaniu razem dają następujące rozwiązanie.

Powiedzmy, że chcesz ciągnąć plaster zestaw 2 zmiany Gerrit 1222:

znaleźć zdalnych bibl jesteśmy zainteresowani:

$ git ls-remote | grep 1220 
From http://something.com:8081/MyProject 
e2e0212a59240ac5cd7c11220c35542523f44b59  refs/changes/13/713/1 
b8c4dceea5eaf1bad711b0ea6938c80ec932726a  refs/changes/20/1220/1 
6f20c182ec7f54a2aa9e8f6188a0eef1b0790df4  refs/changes/20/1220/2 
ed94a98386d224ce3d86004ce99f61220905a077  refs/changes/22/1222/1 

Pull sędziowie:

git pull origin refs/changes/20/1220/2 

Spowoduje to utworzenie punktu zatwierdzenia Git, który można ostatecznie utworzyć ponownie:

git rebase 
+0

Czy istnieje jakikolwiek powód, dlaczego nie używasz standardowych opcji pobierania (https://gerrit-documentation.storage.googleapis.com/Documentation/2.10/user-review-ui.html#download) dostępnych w interfejsie Gerrit? – uncletall

+0

Powodem jest to, że jeśli jest oczekująca weryfikacja kodu (dokonana przez kogoś innego), którą chcę uzyskać, ponieważ mam zmianę, którą muszę wykonać na górze, przeciąganie zestawu poprawek jest wygodniejsze. Pozwala mi to od razu przesłać moją zmianę kodu, podczas gdy poprzedni punkt zatwierdzenia wciąż jest oceniany. –

+0

Dokładnie, to właśnie używasz tych opcji pobierania dla. Przeczytaj dokument, a zrozumiesz. – uncletall

Odpowiedz

29

Lub możesz użyć opcji -d do git-review. Na przykład, zakładając, że zostały roboczej z nova-docker repozytorium i był zainteresowany tą zmianą Gerrit:

Można pobrać najnowszą zestawu poprawek tak:

git review -d 148486 

Or możesz użyć identyfikatora zmiany:

git review -d I35729a86e211391f67cc959d19416c9125c6f9eb 

Możesz również zażądać określonej wersji poprawki, dołączając przecinek i numer poprawki. Na przykład, aby uzyskać drugą wersję tej poprawki:

git review -d 148486,2 
+0

Dzięki za podpowiedź, ale wygląda na to, że będę potrzebował dalszych ustawień, aby użyć funkcji sprawdzania git, ponieważ dostaję błąd (poniżej). $ git review -d I85be47d597611508f5dd9360145bbe2f67cb2148 Nie znaleziono pliku ".gitreview" w tym repozytorium. Nie wiemy, gdzie jest twój gerrit. Proszę ręcznie utworzyć pilota o nazwie "gerrit" i ponownie spróbować . –

+0

Ach, założyłem, że od kiedy pracowałeś z gerrit, już używasz 'git-review'. Plik '.gitreview' wygląda podobnie do [this] (https://github.com/stackforge/nova-docker/blob/master/.gitreview). – larsks

+1

'git review -s' powinien ustawić ten plik. – volker

5

Nie jestem w 100% pewien, jakie jest twoje pytanie. Wygląda na to, że chcesz ułatwić sobie przepływ pracy lub pisanie na klawiaturze. larsks wymienione już git review, który jest najczęściej używany.

Dla Twojej sprawy może to pomóc, aby pobrać wszystkie referencje automatycznie, abyś mógł odnieść się do nich bezpośrednio. Zawsze możesz podać wszystkie określone referencje za pomocą git fetch origin "+refs/changes/*:refs/remotes/origin/changes/*". Następnie możesz pracować lokalnie, używając identyfikatora zatwierdzenia.

Prosty alias git lub skryptowanie go dla wszystkich informacji można łatwo zrobić. Przykładem takiej pętli while można znaleźć w skrypcie na https://github.com/saper/gerrit-fetch-all Przy tak małej skorupy fragmencie można łatwo wykonać, aby pominąć jedną część id ref aby łatwiej odwoływać się do nich:

Server side:     Client side: 
    refs/changes/13/713/1  refs/head/713/1 
    refs/changes/20/1220/1  refs/head/1220/1 
    refs/changes/20/1220/2  refs/head/1220/2 
    refs/changes/22/1222/1  refs/head/1222/1 
+0

Pytanie brzmi, jak wyciągnąć zestaw łatek od Gerrita, a ja również odpowiadałem sobie na to pytanie, dzieląc się tym, jak to robię. Nigdy nie korzystałem z git-review przed napisaniem mojego pytania. –

+2

Dla nas, którzy chcą używać tylko 'git' do pobierania wszystkich zmian i nie trzeba instalować ani konfigurować żadnych konkretnych narzędzi gerrit, jest to poprawna odpowiedź. –

45

Funkcja ta jest standardem w interfejs użytkownika Gerrit.

W prawym górnym rogu interfejsu użytkownika dla plastra, kliknij przycisk Pobierz, a zobaczysz coś takiego:

Gerrit Change Screen Download

Podczas nawigacji łatki udać się do działu download i skopiuj komendę polecenie linia do sprawdzania zestaw łat, na przykład tak:

git fetch https://gerrit.googlesource.com/gerrit refs/changes/03/64403/2 && git checkout FETCH_HEAD 

Potem normalnie utworzyć oddział z numerem przeglądu oraz zestawu poprawek jak nazwa

git checkout -b b64403-2 

Tutaj możesz pracować normalnie i zatwierdzać zmiany lub wybierać/zmieniać na nowo swoje zmiany dotyczące tej zmiany.

Po zakończeniu sprawdzania kodu r64403 kod może zostać scalony lub w przypadku przesłania innego zestawu poprawek konieczne będzie ponowne wykonanie tego samego.

Jeśli nie widać opcji pobrać opcję Checkout lub Cherry Pick trzeba edytować gerrit.config, coś takiego:

[download] 
    scheme = ssh 
    command = checkout 
    command = cherry_pick 

Więcej szczegółów można znaleźć w Gerrit Documentation


Aktualizacja: Jak poprawnie wskazuje barryku, w nowszej wersji należy pobrać wtyczkę downloads-commands. Można to zrobić podczas początkowej konfiguracji lub za pomocą następującego polecenia:

java -jar gerrit-2.11.4.war init -d review_site --batch --install-plugin download-commands 
+0

Interesujące. Nie mam opcji "Checkout" i "Cherry Pick" pod "Pobierz". Mam tylko "Patch-File" i "Archive". Może niektóre opcje administratora Gerrit, aby umożliwić wyświetlanie "Checkout" i "Cherry Pick"? A może trzeba zaktualizować do nowszej wersji Gerrit? –

+2

Dodano odpowiedni przykład sekcji gerrit.config. – uncletall

+1

Dziękuję, zupełnie mi tego brakowało w interfejsie użytkownika i trochę czasu zajęło mi znalezienie prostej odpowiedzi. – SpoonMeiser

1

Jak wspomniano w komentarzach, można po prostu dostać polecenie git bezpośrednio z GUI gerrit. Jeśli naprawdę nie lubią GUI, lub chcesz go (i dla jakiegoś powodu nie można wykorzystać git-review), można użyć API Gerrit zautomatyzować:

curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION&o=DOWNLOAD_COMMANDS' | tail -n+2 | jq -r '.revisions[.current_revision].fetch["anonymous http"].commands.Pull' | bash - 

lub

git pull origin `curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION' | tail -n+2 | jq -r '.revisions[.current_revision].ref'` 
Powiązane problemy