Jak mogę wygenerować różnicę dla pojedynczego pliku między dwoma gałęziami w github

111

Muszę wygenerować różnicę dla pojedynczego pliku, która pokaże różnice między dwiema wersjami, które w rzeczywistości są tagami w githubie. Następnie chcę wysłać tę różnicę do kogoś pocztą e-mail, aby adres URL pliku różnicowego na githubie był idealny. Widok porównania github pozwoli mi to zrobić dla wszystkich zmienionych plików, ale to nie jest dobre, ponieważ w moim repozytorium są tysiące plików.

Mogę to zrobić w linii poleceń w następujący sposób, ale to nie pomaga, ponieważ muszę wysłać różnicę do kogoś przez e-mail:

git diff tag1 tag2 -- path/to/file

Znalazłem omawianą tutaj wersję wiersza poleceń: jak mogę zobaczyć różnice w wyznaczonym pliku między oddziałem lokalnym a oddziałem zdalnym?

plainflavour
źródło

Odpowiedzi:

90

GitHub ujawnia tylko sposób pokazania różnicy między dwoma zatwierdzeniami.

Pod warunkiem, że te tagi faktycznie wskazują na zmiany, format adresu URL wyglądałby podobnie

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

Na przykład https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 pokazuje różnicę między dwiema wersjami projektu LibGit2Sharp. Ta różnica obejmuje wszystkie zmodyfikowane pliki.

Jeśli chcesz pobrać adres URL, który kieruje do określonego pliku:

  • Przejdź do zakładki Pliki zmienione

zmieniona karta

  • Kliknij przycisk Show Diff Stats (Spowoduje to wyświetlenie listy zmodyfikowanych plików jako łącza)

show-diff

  • Skopiuj do schowka link do konkretnego pliku, którego szukasz ... i Tada! Jesteś skończony.

Na przykład, biorąc pod uwagę powyższą różnicę , link https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 wskaże LazyFixtures.cszmiany, które zaszły między wersją v0.9.0 i v0.9.5.

Aktualizacja

Po komentarzu, który stwierdza, że ​​plik różnicowy jest zbyt duży, aby można go było renderować przez interfejs WWW, co powiesz na powrót do starych, dobrych narzędzi wiersza poleceń? Możesz przekierować dane wyjściowe różnicy do pliku, a następnie wysłać plik jako załącznik do wiadomości e-mail.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff
nulltoken
źródło
8
Cześć, wygląda na to, że to nie zadziała, ponieważ moja różnica jest za duża. Otrzymuję komunikat „Ta różnica jest duża! Pokazujemy informacje o stanie tylko dla pierwszych 2500 plików”. więc otrzymuję tylko statystyki różnic, a nie pełne różnice, nawet z linkami #diff.
plainflavour
1
jednak myślę, że masz rację - tak właśnie można to zrobić. Dzięki
plainflavour
1
Możesz także użyć tego rozszerzenia Chrome github.com/danielribeiro/github-diff-highlight-extension, aby uzyskać wyróżnienie składni podczas porównywania gałęzi.
Daniel Ribeiro,
3
@plainflavour Jeszcze jedna przydatna wskazówka na wypadek, gdybyś napotkał to ponownie - za każdym razem, gdy wskazany jest adres URL porównania, taki jak @nulltoken, możesz również po prostu dodać .diff na końcu adresu URL, aby zobaczyć pełną różnicę (choć jako zwykły tekst ). Np. https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff Źródło
dmccabe
1
Nie widzę przycisku Pokaż statystyki różnic . Czy to zniknęło? A może po prostu tego nie widzę?
dckc
7

Oto moje obejście, gdy występuje następujący problem.

To porównanie jest duże! Pokazujemy tylko ostatnie 250 zatwierdzeń

Skopiuj nieprzetworzony widok pliku, który chcesz porównać, do https://gist.github.com/ . Użyj dwóch konkretnych punktów zatwierdzenia, które chcesz porównać. Zacznij od starszego zatwierdzenia.

https://gist.github.com/ ma ładny widok porównania obok siebie po kliknięciu „Wersje”.

f01
źródło
3
Dziękuję, to była dokładnie sugestia, której potrzebowałem do gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/… ! :)
ncoghlan
3

Odpowiedź jest przeznaczona dla osób, które chcą tylko zobaczyć (nie pobierać) historię / wersję zmian kodu pliku na stronie GITHUB WEB podczas poprzedniego logowania.

Przejdź do tego pliku na githubie, a następnie wybierz HISTORIA . Otworzy się strona z listą linków do komentarzy, jak poniżej.

wprowadź opis obrazu tutaj Po kliknięciu pokaże zmiany kodu. Po kliknięciu historii; możesz kliknąć pakiety, aby zobaczyć wszystkie checkins plików na poziomie pakietu.

W eclipse możesz porównać historię używając wtyczki EGit i "Kliknij prawym przyciskiem -> Porównaj z" na pliku. Jak mogę porównać dwie wersje w git w Eclipse?

Kanagavelu Sugumar
źródło
1
Aby być bardziej precyzyjnym, klikasz 7-cyfrową „nazwę” zatwierdzenia (nie ma etykiety ani podpowiedzi po najechaniu na nią kursorem; znajduje się ona po prawej stronie, tuż obok „kopiuj do schowka” icon), a to przeniesie Cię do strony, która pokazuje różnicę między wersją tego zatwierdzenia a tym, co zakładam, jest wersją poprzednią.
JonathanZ wspiera MonicaC
@Jonathan Yeah; to prawda
Kanagavelu Sugumar
Hej, ostatnim razem nie widziałem tego zrzutu ekranu. Nie wiem, czy po prostu się wtedy dla mnie nie ładował, czy też dodałeś go od tamtego czasu, ale tak czy inaczej, dziękuję za odpowiedź; wspaniale.
JonathanZ wspiera MonicaC
W przypadku zatwierdzenia 5000 plików nie przenosi mnie to do różnic jednoplikowych. Na podstawie tej historii spróbuj znaleźć różnicę w tym pliku z tego ogromnego zatwierdzenia .
Carl Walsh
0

Kiedyś odpowiedź nulltoken za ułożyła prosty skrypt wygoda dla podjeżdżaniu diff między dwoma zatwierdzeń na GitHub z wiersza poleceń.

Możesz znaleźć pełny skrypt w istocie , ale oto dobre bity:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# [email protected]:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

Przyjmuje jako argumenty gałęzie, zatwierdzenia i wszystko, co może zostać rozwiązane przez git rev-parse. Użyłem open, który działa tylko na MacOS do otwierania stron internetowych, więc jeśli jesteś w innym środowisku, będziesz chciał to poprawić.

Podobnie jak w przypadku odpowiedzi nulltoken, aby wskazać pojedynczy plik w pliku różnicowym, musisz kliknąć tytuł pliku, aby ciąg kotwicy pojawił się na pasku adresu URL, który możesz następnie skopiować.

Chris
źródło
jakikolwiek sposób, aby uzyskać ciąg kotwicy do porównania, który nie pokazuje żądanego pliku, ponieważ jest ich zbyt wiele?
sgarg
@sgarg Kotwica to „diff- <md5 nazwy pliku>” - nieudokumentowane AFAIK - ale to mnie zirytowało i zgadłem.
Ben Walding
0

Ponieważ nadal nie jest to możliwe, oto metoda narzędzia porównywania oparta na przeglądarce. Nie wykorzystuje automatyzacji, ale wymaga jedynie możliwości instalowania rozszerzeń Chrome:

  1. Zainstaluj narzędzia Diff dla przeglądarek Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Otwórz Diff Tools ( http://iblogbox.com/devtools/diff/ )
  3. Z GitHub przejdź do PRZED zatwierdzeniem, tagiem lub gałęzią, otwórz plik, a następnie kliknij Rawprzycisk, aby uzyskać widok pliku surowego, wybierz wszystko i skopiuj, a następnie umieść w lewym polu tekstowym w Diff Tools
  4. Powtórz krok 3, ale dla pliku AFTER i wklej w polu po prawej stronie w Diff Tools
  5. Kliknij Compare Nowi wykonaj porównanie ad-hoc
kayleeFrye_onDeck
źródło