2016-10-28 25 views
5

Mój zespół używa github i sourcetree do zarządzania naszym przepływem pracy. Niedawno zaczęliśmy wypróbowywać funkcję github's squash merge. Naprawdę podoba nam się to, jak utrzymuje porządek w naszej historii pracy i zasadniczo ma jeden commit na PR.Nie można ustalić, czy oddział został scalony podczas używania squasha.

Jedną z nieoczekiwanych wad korzystania ze skryptów squasha jest to, że trudno jest określić, kiedy można usunąć lokalny oddział. Cały mój zespół wydaje się zarządzać swoimi lokalnymi oddziałami, ponieważ jest w stanie wizualnie zobaczyć na wykresie commitów, że został scalony i co kilka dni przechodzimy przez nasze lokalne oddziały, jeden po drugim, sprawdzając, czy zostały scalone, a następnie usuń go lokalnie, jeśli tak. Włączenie scalania squasha usuwa tę wizualizację i utrudnia nam stwierdzenie, czy gałąź została scalona.

Chcielibyśmy użyć funkcji zatwierdzania squasha, ale potrzebujemy niezawodnego sposobu na sprawdzenie, czy oddział został scalony i czy można go bezpiecznie usunąć lokalnie. Czy są jakieś dobre sposoby, o których nie pomyśleliśmy, aby to osiągnąć?

+0

Jeśli masz dostęp do powłoki, możesz 'git diff . Lub jeśli nie możesz powiedzieć, który commit jest połączeniem, może 'git checkout ; git rebase origin/master; git diff HEAD origin/master' – 0x5453

+0

Czy github i sourcetree nie oferują opcji '- first-parent'? Zlinearyzowane historie mogą być łatwiejsze do przyjrzenia się, ale byłyby dokładniej napisane "lobotomizowane". Czasem to wszystko, czego potrzebujesz, ale to ograniczenie jako sposób na życie. – jthill

+0

@ 0x5453 uruchamianie poleceń git dla każdego oddziału nie wydaje się rozwiązaniem bardzo skalowalnym. Musielibyśmy stworzyć skrypt lub coś w celu iteracji przez wszystkie lokalne gałęzie i usunąć te, które zostały scalone. To może być coś, co może zadziałać. jthill Nie wierzę, że tak. – spierce7

Odpowiedz

4

Mój cały zespół wydaje się zarządzać ich lokalne oddziały na podstawie jest w stanie zobaczyć wizualnie w commit wykres że to było połączone,

To wydaje się być rzeczywisty problem tutaj. Jeśli korzystasz już z przepływu pracy GitHub pull-request, status żądania pobrania powinien być autorytatywną odpowiedzią na to pytanie. Czy PR został zaakceptowany? Dobry! Oddział jest połączony, kontynuuj swoje życie.


Jedną z opcji, którą warto rozważyć, jest przyjęcie (i ewentualnie egzekwowanie) przepływu pracy, w którym akceptuje się tylko pojedyncze żądania pobrania. Niech ludzie robią wszystko, co chcą w swoich lokalnych repozytoriach, ale przesyłając żądanie ściągnięcia, zgłaszają odpowiednie zatwierdzenia przed przesłaniem (i dokonują liberalnego użycia przepływu pracy w bazie w celu zaktualizowania żądania ściągnięcia, jeśli muszą wprowadzić zmiany).

Ma to tę zaletę, że metoda "inspekcji wizualnej" będzie nadal działać, ponieważ nie będzie już syntezy zatwierdzeń na GitHub.


Aktualizacja

I już ułożyła a small tool który używa API GitHub celu ustalenia, czy wnioski wysuwane związane z danym popełnić sztuczny zostały zamknięte.Upuść skrypt git-is-merged do swojej $PATH gdzieś, a następnie można to zrobić:

$ git checkout my-feature-branch 
$ git is-merged 
All pull requests for 219e0f04a44053633abc947ce2b9d700156de978 are closed. 

Lub:

$ git is-merged my-feature-branch 
All pull requests for 219e0f04a44053633abc947ce2b9d700156de978 are closed. 

Skrypt zwraca tekst stanu i kody wyjścia dla:

  • Nie ciągnąć żądania istnieją:
  • Wszystkie żądania pobrania są zamknięte
  • Niektóre żądania wysuwane są zamknięte
  • Wszystko wyciągnąć wnioski są otwarte

Dla zgniecione zatwierdzeń, można użyć dowolnego z agentów kondycji popełniają które były częścią oryginalnego wniosku ciągnącej lub commit SHA z następujących zgnieciony popełnić .

Jak napisane to narzędzie działa tylko z repozytoriami publicznymi, ale używa modułu PyGithub, który obsługuje uwierzytelnianie.

+0

Problem polega na tym, że trudno jest zarządzać, czy PR został zaakceptowany. Ludzie nie od razu usuwają swój oddział lokalny po scaleniu PR. Tak, na Githubie łatwo jest dopasować PR do oddziału, ale tydzień po połączeniu PR i mam 12 lokalnych oddziałów, które potencjalnie trzeba usunąć, to ból w kolbie pasującej do oddziału lokalnego do jego PR w github i potwierdzenie połączenia, aby można go było usunąć. Żądania pobrania pojedynczego zatwierdzenia to ciekawy pomysł, ale egzekwowanie tego jest trudniejsze, gdy zmiany są wymagane w danym PR. – spierce7

+0

Zobacz moją aktualizację rozwiązania, które wykorzystuje interfejs API GitHub do odpowiedzi na pytanie. – larsks