2011-10-25 24 views
11

Używam gerrit. Kiedyś następujące polecenieGerrit odtwarza change-idy

$ cd .git/hooks 
$ scp -P 29418 [email protected]:hooks/commit-msg . 
$ cd ../.. 

Dodaje Zamiana id do mojego popełnienia wiadomości, jednak jeśli zmieniają się zatwierdzeniem tworzy Nowy Zmiana-id. Tak więc, kiedy cofam się do gerrit, to nie dodam zestawu poprawek, tworzy on zupełnie nowy wpis opinii.

Wszelkie sugestie proszę?

Znaleziono odpowiedź, ale stackoverflow nie pozwoli mi odpowiedzieć na własne pytanie.

To był kompletny błąd z mojej strony. Kiedy próbował popełnić git commit -m --amend „Initial Commit”

byłem inline wiadomość popełnienia i który został ocierając Zamiana Id, dając mi nowy.

+0

Czy jesteś pewien, że ChangeId jest w ostatnim akapicie wiadomości popełnić? Spójrz na: [ChangeId] (http: //gerrit.chromium.org/gerrit/Documentation/user-changeid.html) – vquintans

+0

Mmmm, właśnie skończyłem czytać twoje pytanie :-) i tak, -m jest typowym błędem. – vquintans

Odpowiedz

21

popełnić-MSG pracom hak, który sposób:

  1. sprawdź czy masz zmiany-ID w popełnienia wiadomości.
  2. Jeśli nie, generuje jeden.

Po wpisaniu git commit --amend i edycji wiadomości zatwierdzenia nadal masz stary identyfikator zmiany (jest dobry).

Ale jeśli wpiszesz git commit --amend -m "....", usunąłeś identyfikator zmiany, więc gerrit wygeneruje nowy.

Zasada kciuka: Nie używaj --amend -m z gerrit.

+0

Jeśli naprawdę chciałeś, możesz napisać hook przygotowawczy-msg, który wyrzuciłby zmienną i włożył ją ponownie. – forivall

+2

Yikes! znalazłem to za późno :) – mlvljr

+0

- amnij i -m pracuję ... musisz tylko pamiętać o "git rebase --interactive" przed pchaniem - aby oczyścić rzeczy. I oczywiście musisz się upewnić, że nie zmienisz identyfikatora zmiany ;-) – GhostCat

1

Jeśli git commit --amend lub git commit --amend -m "...." nie pomaga i gerrit wciąż narzeka na brakujący identyfikator zmiany. (Dzieje się tak z powodu problemów sieciowych głównie)

To jak mam go rozwiązać (upewnił się, że nie zastosowano commit-msg hak, na katalogu nadrzędnego sprawdzanego-out katalogu reference):

  1. Zastąp zmiany za pomocą git stash.
  2. Używane gitk & do twardego ponownego wprowadzenia zmiany do poprzedniego zatwierdzenia. enter image description here
  3. Następnie pociągnij i przebij ponownie z Repo git pull --rebase.
  4. Następnie zastosuj zmiany ukryte za pomocą git stash apply, reference. Rozwiązuj konflikty połączeń, jeśli używasz git mergetool.
  5. ponownie przyznano w zmianie ponownie stosując git commit lub git commit --amend, to wygenerowany nowy zmiana-Id
  6. popchnąć zmiany oddział na repozytorium poleceniem git push ....

Jest podobna kwestia wokół także for reference