2015-02-25 8 views
6

Potrzebuję programistycznie wygenerować pełno-kontekstowe rozszerzenie git dla interfejsu sieciowego.Dla "git diff" istnieje opcja -U <infinity>, aby wyświetlić cały plik?

CLI generowania Diff pełnej kontekstowe była pokryta pytania:

Odpowiedź rozpowszechnione jest coś takiego jak git diff -U99999

z opcją -U/--unified z absurdalnie wysokim progiem (np. 999,999), wykonując git diff -U999999:

  1. Sprawia mi podejrzewać, że nie może być wydajność hit
  2. gorsza, jest to kwestia poprawności, jeśli mój plik jest większy niż 1M linie

Czy istnieje opcja -U aby pokazać cały plik?

+1

związane: http://stackoverflow.com/q/27857967/2541573 – Jubobs

+1

Inną opcją jest 'git diff -u \' wc -l | cut -f 1 -d”„\ '' HEAD^ ale ty trzeba uruchomić 'wc' na dłuższej wersji pliku – kdopen

Odpowiedz

4

Jeśli wystarczy użyć dużej liczby z -U, można wybrać wiele się punkt, w którym aplikacja może” t uchwyt wyświetlający tak duży plik (diff).

jest to kwestia poprawności, jeśli mój plik jest większy niż linie 1M

I aby rozwiązać ten problem, można sprawdzić wyjście dla więcej niż jednego @@ ... @@ linii, aby określić, czy jest kompletny - pozwala aby uniknąć cichego podawania niewłaściwej liczby.

+2

Eksperymentalnie, znalazłem 'git diff -U999999999999999999' dał' Segmentation fault (core dumped) '. Jednak zadziałała jedna cyfra mniej, "-99999999999999999". Dodanie dwóch lub więcej cyfr do pierwszego polecenia, '-U999999999999999999999999', spowodowało, że zachowywał się tak, jakby opcja była rzeczywiście" -U0 ". –

0

Szczerze mówiąc, najlepszą opcją jest użycie git difftool zamiast wanilii git diff. Aby zobaczyć, jakie narzędzia wersja podpór git, wprowadź

git difftool --tool-help 

, które z mojej wersji (2.3.0), pokazuje następujący

$ git difftool --tool-help 
'git difftool --tool=<tool>' may be set to one of the following: 
     araxis 
     gvimdiff 
     gvimdiff2 
     gvimdiff3 
     meld 
     vimdiff 
     vimdiff2 
     vimdiff3 

The following tools are valid, but not currently available: 
     bc 
     bc3 
     codecompare 
     deltawalker 
     diffmerge 
     diffuse 
     ecmerge 
     emerge 
     kdiff3 
     kompare 
     opendiff 
     p4merge 
     tkdiff 
     xxdiff 

Zwykle używam meld, ale to tylko osobiste preferencje . git difftool pobiera te same argumenty co git diff oraz kilka, które pomagają w procesie (uważam, że -y jest użyteczny, aby zapobiec monitom podczas przechodzenia z jednego pliku do drugiego).

Aby sprawdzić zmiany wprowadzone przez specyficzny popełnienia, na przykład, można użyć

git difftool -y -t meld 08f0f82^..08f0f82 

oczywiście zastępując 08f0f82 z prawidłowym SHA-1.

Moja największa skarga polega na tym, że uruchamia narzędzie dla każdego zmodyfikowanego pliku w sekwencji (stąd określenie opcji -y).

Jeśli chcesz tylko sprawdzić zmiany w konkretnym pliku w tym zatwierdzeniu, możesz po prostu dodać nazwę pliku do wiersza poleceń.

git difftool -y -t meld 08f0f82^..08f0f82 myfile.c 

Oczywiście, to jest dla interaktywnej użyciu - nie dla skryptów

+0

Potrzebuję tego, aby uzyskać dostęp do programowania z interfejsu WWW. Przepraszam, nie wyjaśniłem od razu. –

+0

Ta odpowiedź nie rozwiązuje nawet problemu uzyskania pełnego kontekstu bez usuniętych linii. –