/ / Jak porównać zmiany między zmianami lokalnymi a zdalnym repozytorium - git, github, egit, github-api, jgit

Jak porównać zmiany między lokalnymi zmianami a zdalnym repozytorium - git, github, egit, github-api, jgit

Chcę zsynchronizować zmiany ze zdalnym Gitemrepozytorium (w GitHub) przy użyciu Git Api w Javie (Egit i JGit). W jaki sposób mogę to zrobić? Czy jest to możliwe, znając HEAD ID między dwiema wersjami lub w inny sposób?

Odpowiedzi:

2 dla odpowiedzi № 1

Po prostu wiedząc HEAD o każdym z dwóch repozytoriów wystarczy powiedziećjeśli nie są zsynchronizowane, ale nie wystarczy powiedzieć, która z nich wyprzedza drugą. W ogólnym przypadku więcej niż jedna osoba może naciskać na repozytorium, więc zakładając, że Twoje lokalne repozytorium jest zawsze przed twoim pilotem, nie bądź mądry. Musisz użyć interfejsu API, aby znaleźć pierwszy wspólny SHA, a użycie tego określi sposób obsługi synchronizacji repozytoriów. Będziesz musiał obsługiwać trzy (naprawdę więcej) przypadki:

  1. Twój lokalny oddział znajduje się przed twoim pilotem
  2. Twój pilot wyprzedza Twój lokalny
  3. Zarówno twój lokalny, jak i zdalny mają zestawy zatwierdzeń nie na drugim, np. Wypchnąłeś z jednego komputera, ale nie pociągnąłeś tutaj lub ktoś ostatnio wypchnął zatwierdzenia i nie zauważyłeś itp.

Pierwsze dwa przypadki są trywialne, trzeci dalekobardziej złożony. Zawsze będziesz musiał wyciągnąć, zanim zsynchronizujesz lokalne zmiany ze zdalnym, a wyciągnięcie może spowodować konflikty scalania. Jeśli nie jesteś ostrożny, możesz złamać jakiś kod, próbując wymusić zatwierdzenie po wystąpieniu konfliktu.

Nie wiedząc więcej o tym, co planujesz zrobić ani o tym, jaki dokładnie jest twój przypadek użycia, nie mogę ci dać dużo więcej pomocy niż to. Mam nadzieję, że to wystarczy. :-)