2011-11-01 12 views
7

Nasz zespół używa zgłoszeń Github Pull do zarządzania przepływem pracy, podobnie jak what is described here. Po ręcznym sprawdzeniu zaakceptowanego żądania wyciągnięcia, czasami musimy przywrócić to scalenie, ponieważ nie jest ono gotowe do wdrożenia na naszych serwerach produkcyjnych.Przywracanie zatwierdzenia scalania git, a następnie cofanie przywracania

Jeśli jednak programista ponownie spróbuje wysłać żądanie wyciągnięcia, nie rozpoznaje tych zmian, które zostały cofnięte i widzi, że zatwierdzenia znajdują się już w gałęzi głównej. Będzie zawierać tylko ich ostatnie zatwierdzenia od czasu powrotu, ale to, czego naprawdę chcemy, to przywrócenie wszystkich przywilejów, które tam zostały, oraz ich nowej pracy. Innymi słowy, podoba nam się sposób na ponowne wydanie pierwotnego wniosku Pull.

Ponieważ Github nie obsługuje tej funkcji (tj. Ani nie przywraca scalenia, ani nie cofa/nie wysyła oryginalnego żądania ściągnięcia), obecnie cofam scalone połączenie. To źle działa.

Jakie inne sposoby mogę wykorzystać do osiągnięcia tego samego celu w git? (lub Github, jeśli to możliwe)

+1

Jeśli lokalnie próbowałeś scalić zatwierdzenia z żądania ściągnięcia i zdecydowałeś się po przetestowaniu, że nie chcesz tego jeszcze scalać, dlaczego powracasz do scalania, zamiast resetować główny wzorzec przed scaleniem ? (Zakładam, że nie publikujesz swojego głównego oddziału po scaleniu żądania ściągnięcia, ale przed podjęciem decyzji, czy je zachować, czy nie.) –

+0

Po zaakceptowaniu żądania wyciągnięcia jest ono automatycznie łączone z wzorcem, dzięki czemu każdy z naszego zespołu może wyciągnąć stamtąd w dowolnym momencie. Odwracając się, poszedłem za radą na blogu, o którym wspomniałem w moim pytaniu, ponieważ pozwoliło nam po prostu przejść do innych wniosków o wycofanie i zminimalizować wąskie gardła w naszym przepływie pracy. Obawiam się, że resetowanie może pogorszyć sytuację, ponieważ mistrz jest zawsze dostępny dla naszych współpracowników z repo. –

+0

Ah, więc akceptujesz żądanie ściągnięcia w GitHub. (Funkcja, aby poprosić GitHub o faktyczne scalenie, została dodana całkiem niedawno.) Zamiast tego chciałbym pobrać sugerowane zatwierdzenia do lokalnego repozytorium, połączyć je i przetestować. Jeśli jesteś z tego zadowolony, możesz oznaczyć żądanie ściągnięcia jako zaakceptowane na GitHub. –

Odpowiedz

1

Myślę, że twój problem powstaje tutaj, ponieważ gdy masz do czynienia z żądaniami ściągania, wybierasz automatyczne scalanie ich na GitHub. Spośród trzech sugerowanych sposobów radzenia sobie z żądaniami pobierania described in the documentation używasz ostatniego ("Auto Merge"), który był tylko recently implemented. Osobiście uważam, że jest to właściwe tylko dla banalnych wniosków o ściąganie, które są oczywiście poprawne. Do niczego bardziej skomplikowanego, chciałbym użyć pierwszego podejścia, tj

  • dodając repozytorium wnioskodawcy wyrażone jako nowy zdalny
  • ściągam z tego odległego
  • próbuje scaleniu
  • testowanie starannie
  • popychanie wyniku, jeśli jesteś szczęśliwy

Oznacza to, że scalona wersja jest tylko publiczna, gdy ją przetestujesz i zdecydujesz o push. Jeśli nie chcesz, możesz po prostu zresetować swój master branch do poprzedniej pozycji.


W gruncie zainteresowania, być może warto powiedzieć więcej o tym, co się dzieje, jeśli zrobić skończyć konieczności przywrócić pożałowania seryjnej, ale nadal chcesz mieć możliwość ponownego łączenia się nowsza wersja tej gałęzi. Chociaż może to wydawać się błędne, jak rozumiem, najprostszym sposobem radzenia sobie z tą sytuacją jest rzeczywiście odwrócenie odwrotu. Możesz znaleźć więcej dyskusji na ten temat w this post from the Pro Git blog i another discussion of the same problem przez Linux Torvalds, które mogą być również pomocne.

+0

Witam Mark - Przeczytałem te dwa ostatnie artykuły przedtem i doceniam je, przypominając o nich. Chciałbym wprowadzić w życie twoją sugestię, z wyjątkiem tego, że żaden z członków naszej Organizacji nie ma własnego widżetu na Githubie, oni po prostu klonują z naszego repo, ponieważ nasz szef chciał, aby każdy dev popychał ich pracę do gałęzi, tak, żebyśmy mieli kopię ich praca. Mogę jednak być w stanie skonfigurować wszystkie "piloty" na jednym wspólnym komputerze i popchnąć je do tego, abyśmy mogli przetestować. Dużą przeszkodą będzie automatyzacja procesu wdrażania/przeglądu. Dzięki za wgląd! –

+0

@Chip Castle: Bez problemu. W rzeczywistości jest jeszcze łatwiej, jeśli po prostu naciskają na gałęzie - nie musisz dodawać pilota, po prostu wykonaj polecenie 'git fetch origin' i spróbuj scalić z prawej gałęzi śledzenia zdalnego. –

+0

Hmmm ... nasz obecny proces wymaga, aby osoba kontroli jakości ręcznie przeglądała je po przejściu przez CI. Muszę skonfigurować Jenkinsa do "git pull --rebase origin master", aby mieć najnowszą kopię, a następnie sprawdzić gałąź funkcji i "git rebase -i", aby upewnić się, że wszystko jest aktualne przed uruchomieniem zestawu testów. Jeśli to przejdzie, mógłbym go automatycznie wdrożyć na serwerze testowym, na którym sprawdzane są nasze kontrole jakości. Wtedy, jeśli wszystko to przeminie, mógłbym przyjąć żądanie Pull, ponieważ to jedyna akcja, która połączy się z mistrzem. To może bardzo pomóc. Daj mi znać twoje przemyślenia na ten temat. Dzięki! –

0

Proponuję, abyście zastosowali inne podejście. Twój proces powrotu i powrotu jest dla mnie bardzo kłopotliwy. Rzeczywisty problem, który próbujesz rozwiązać, można rozwiązać inaczej.

Proponuję zmienić przepływ pracy, aby korzystać z dwóch oddziałów. Jedna stabilna gałąź (master) i jedna gałąź rozwojowa (develop). Cała praca przechodzi do gałęzi develop lub do osobnych gałęzi tematycznych. Żądania pobrania są zawsze przesyłane do oddziału develop, a następnie po zatwierdzeniu połączone w develop.

master jest początkowo rozgałęziony od develop.Gdy tylko develop jest w stabilnym stanie, łączysz go w master. master to aktualne wydanie stabilne. Jest to luźno oparte na nvie's "A successful Git branching model".

+0

Przeczytałam ten artykuł wcześniej i na pewno jest to świetna metoda do naśladowania, ale wydawało się, że nie działa dobrze dla naszego zespołu. Używamy już gałęzi elementów i przebiegów CI po połączeniu w master (poprzez żądanie Github Pull), więc posiadanie gałęzi rozwijania, której próbowaliśmy przez jakiś czas, było po prostu więcej pracy do zarządzania. Co więcej, nawet przy naszym pakiecie testowym zdarzały się sytuacje, w których mistrz stał się niestabilny, więc nie pomogło to tak bardzo naszemu zespołowi. Jednak będę o tym pamiętać w przyszłości. Jeszcze raz dziękuję za Twoją sugestię. –

0

Jeśli zdobędziesz pułk rozgałęzień na funkcję, możesz odbudować kandydata do wydania, korzystając z funkcji, które lubisz. Nie będzie trzeba „przywrócić seryjną”:

dalsze czytanie: https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

Proszę zobaczyć komentarze, jak również dla dodatkowego wglądu. Działa to bardzo dobrze dla nas.

Powiązane problemy