2012-04-24 24 views
7

Aby zaimplementować github jak funkcja żądania fork/pull w moim projekcie, funkcja automatycznego scalania musi wykrywać konflikt między repozytorium źródłowym/docelowym za każdym razem podczas przeglądania żądania ściągnięcia.Jak wykryć konflikt między dwoma repozytoriami git.

Jedno rozwiązanie przychodzi mi do analizy wyników "git request-pull". Czy istnieje łatwiejsza metoda wykrywania konfliktu?

+0

O co tu chodzi? Czy wdrażasz narzędzie do scalania? Lub narzędzie do przeglądania diff? Lub po prostu ciekawy, co zrobi "git push"? –

+0

W github, żądanie ciągłego pobierania może zostać scalone przez kliknięcie przycisku w Internecie. Ponieważ repozytorium źródłowym/docelowym może kontynuować zatwierdzanie, wykrywanie konfliktu jest koniecznością w tym procesie. Pytam o łatwiejszy sposób na wykrycie konfliktu. – stcatz

Odpowiedz

-2

Wreszcie napisałem własną funkcję wykrywania konfliktów.

Jest to dość proste, wystarczy pobrać wszystkie linie diff i porównać, jeśli istnieją takie same modyfikacje.

+2

Byłoby wspaniale, aby opublikować go tutaj na przyszłość – CharlesB

2

ja usunąłem poprzednią odpowiedź, że nie rozumiem pytania ...

Teraz tutaj jest nowy, błyszczący odpowiedź:

git merge --ff-only <branch> 

Jeśli nie ma żadnych konfliktów, będzie to zrobić seryjnej . W przypadku konfliktu wyświetla komunikat: Not possible to fast-forward. Kod powrotu konsoli (echo $?) W tej sytuacji wynosi 128.

+0

Nie ma to większego znaczenia dla pytania, ale jest dobre podczas łączenia po pobraniu. –

0

Z tego, co wiem, nie można się dowiedzieć, czy scalenie spowodowałoby konflikty, dopóki faktycznie nie scalą tych oddziałów.

Zostało to już wskazane w: How to test a merge without actually merging first.

Aby odpowiedzieć na twoje pytanie, jeśli chcesz zaimplementować tego rodzaju funkcję, najprawdopodobniej spróbuj połączyć źródło/cel i wycofać działanie scalające (używając git reset --hard).

Nigdy nie używałem git request-pull, ale patrząc na wynik, nie widzę żadnych informacji, które mogłyby pomóc w rozwiązaniu problemu. Prawdopodobnie możesz uzyskać ten sam wynik, używając git diff, git wtf, git remote show <name>.

Referencje:

1

Stworzyliśmy detektor konfliktu git, który sprawdza najnowsze zatwierdzenia pushed względem wszystkich istniejących gałęzi.

Jest to prosty pojedynczy skrypt zainicjowany przez URL WebHook GitHub, a nawet wie, że wysłał powiadomienie HiChat po wykryciu konfliktu.

, oparty na analizie rozwiązania wyjście git merge --ff-only <branch> jak widać here

Mamy open source tak wszyscy mogą cieszyć się, uczyć się i przyczynić.

Powiązane problemy