Jak możemy poznać różnicę między dwoma repozytoriami git?
Scenariusz: mamy repo_a i repo_b. Ten ostatni został utworzony jako kopia repo_a. Później nastąpił równoległy rozwój obu repozytoriów. Czy jest sposób, abyśmy mogli wymienić różnice między aktualnymi wersjami tych dwóch repozytoriów?
Odpowiedzi:
W repo_a:
źródło
origin/master
raczej sprecyzowania niż nagiegomaster
. Znajduje to również różnicę między gałęziami głównymi, więc co zrobić, jeśli chcesz znaleźć wszystkie inne gałęzie? Np. Aby sprawdzić stan kopii zapasowej repozytorium?Meld może porównywać katalogi:
Po prostu użyj katalogów dwóch repozytoriów git, a otrzymasz ładne porównanie graficzne:
Kiedy klikniesz na jeden z niebieskich elementów, możesz zobaczyć, co się zmieniło.
źródło
Możesz najpierw dodać inne repozytorium jako zdalne do bieżącego repozytorium:
następnie pobierz brach z tego pilota:
spowoduje to utworzenie tej gałęzi jako nowej gałęzi w obecnym repozytorium, a następnie możesz porównać tę gałąź z dowolną gałęzią, na przykład, aby porównać bieżącą gałąź z nową gałęzią (nazwa_gałęzi):
źródło
Gdy masz już obie gałęzie w jednym repozytorium, możesz wykonać plik
git diff
. A pobranie ich w jednym repozytorium jest równie łatwe jakźródło
To jest niepoprawne.
remotes/b
to odległy, ale nie oddział.Aby to zadziałało, musiałem zrobić:
źródło
Zobacz http://git.or.cz/gitwiki/GitTips , sekcja „Jak porównać dwa lokalne repozytoria” w sekcji „Ogólne”.
Krótko mówiąc, używasz zmiennej środowiskowej GIT_ALTERNATE_OBJECT_DIRECTORIES, aby mieć dostęp do bazy danych obiektów innego repozytorium, i używasz git rev-parse z
--git-dir
/ GIT_DIR do konwersji nazwy symbolicznej w innym repozytorium na identyfikator SHA-1.Nowoczesna wersja wyglądałaby mniej więcej tak (zakładając, że jesteś w 'repo_a'):
gdzie
../repo_b/.git
jest ścieżką do bazy danych obiektów w repo_b (byłoby to repo_b.git, gdyby było to czyste repozytorium). Oczywiście możesz porównać dowolne wersje, nie tylko HEAD.Zauważ, że jeśli repo_a i repo_b są tym samym repozytorium, bardziej sensowne może być umieszczenie ich obu w tym samym repozytorium, albo używając "
git remote add -f ...
" do stworzenia pseudonimu (-ów) dla repozytorium dla powtarzających się aktualizacji, albo odejdź "git fetch ...
"; jak opisano w innych odpowiedziach.źródło
Używam PyCharm, który ma świetne możliwości porównywania folderów i plików.
Po prostu otwórz folder nadrzędny dla obu repozytoriów i poczekaj, aż się zindeksuje. Następnie możesz kliknąć prawym przyciskiem myszy folder lub plik
Compare to...
i wybrać odpowiedni folder / plik po drugiej stronie.Pokazuje nie tylko, jakie pliki są różne, ale także ich zawartość. O wiele łatwiejsze niż wiersz poleceń.
źródło
Najlepszym rozwiązaniem jest posiadanie obu repozytoriów na komputerze lokalnym i użycie polecenia linux diff z dwoma katalogami jako parametrami:
diff -r repo-A repo-B
źródło
Łatwy sposób na zrobienie tego bez dotykania konfiguracji pilota. Z repozytorium A, w głównym (załóżmy, że chcesz porównać główne gałęzie):
źródło
Możesz użyć następującego polecenia:
lub obok siebie możesz użyć:
W przypadku kolorowania każdego pliku różnicowego możesz użyć:
źródło
Przypomnienie o samodzielnym ... pobierz najpierw, w przeciwnym razie repozytorium nie ma lokalnego skrótu (chyba).
krok 1. Skonfiguruj nadrzędnego pilota zdalnego sterowania i wyższego ^
porównywanie pojedynczego pliku przebiega według tego wzorca:
git diff localBranch uptreamBranch --spacepath / singlefile
git diff master upstream/nameofrepo -- src/index.js
źródło