2008-09-25 27 views
216

Używam pliku git-diff, ale zmiana jest na końcu długiego wiersza.git diff - obsługa długich linii?

Jeśli użyję klawiszy kursora, aby przesunąć w prawo, utraci on kodowanie kolorów, a co gorsza, linie nie są wyrównane, co utrudnia śledzenie zmiany.

Czy istnieje sposób, aby temu zapobiec, lub po prostu zamiast tego zawijać linie?

(uruchomione git 1.5.5 poprzez mingw32)

+90

Gah .. Nie miałem pojęcia, że ​​możesz ruszyć w prawo za pomocą klawiszy strzałek! Dzięki. –

+5

Możesz chcieć wypróbować 'git diff - kolor-słowa', to nie rozwiąże problemu przewijania, ale zmiany słów są otoczone kontekstem w jednym wierszu! – kevinf

+5

Używanie "fold" wydaje się działać całkiem dobrze: 'git diff --color-words | fold' – Amy

Odpowiedz

106

Wyświetlanie danych wyjściowych git diff jest obsługiwane przez dowolny pager, którego używasz.

Powszechnie, pod Linuksem, użyłoby się less.

Możesz powiedzieć git, aby użyć innego pagera, ustawiając zmienną środowiskową GIT_PAGER. Jeśli nie masz nic przeciwko stronicowaniu (na przykład twój terminal pozwala ci przewinąć wstecz), możesz spróbować jawnie ustawić GIT_PAGER, aby je opróżnić, aby zatrzymać je za pomocą pagera. Pod Linuksem:

$ GIT_PAGER='' git diff 

Bez pagera linie zostaną zawinięte.

Jeśli twój terminal nie obsługuje kolorowych wydruków, możesz to wyłączyć, używając argumentu --no-color lub wpisując w sekcji kolorów pliku konfiguracyjnego git.

$ GIT_PAGER='' git diff --no-color 
+1

Mogę potwierdzić, że ustawienie GIT_PAGER na puste powoduje zawijanie wierszy. Wprowadza również symbole, które sprawiają, że czytanie jest trochę trudne, ale w razie potrzeby mogę znaleźć inny pager, a więc nadal prawidłową odpowiedź. :) Dzięki. –

+1

Jakie symbole dodają, że utrudnia czytanie? Być może będę w stanie edytować moją odpowiedź, aby rozwiązać ten problem. – SpoonMeiser

+0

Głównie "<- [m" dla każdego nowego wiersza (gdzie <- był pojedynczą postacią ze strzałką), ale także znaczniki, w których (jak sądzę) zaczynałby się każdy kolor, np. "<- [1m" i "<- [32m"] . –

2

Nie to idealne rozwiązanie, ale gitk i git-gui może pokazać zarówno te informacje, i mają paski przewijania.

-1

Kiedy mam kłopoty, często uciekam się do DiffMerge. Doskonałe narzędzie do porównywania różnic między liniami. Ponadto, w najnowszych wersjach dodali tryb, aby mieć tryb poziomy.

Nie byłem w stanie skonfigurować gita, aby go użyć. Tak więc muszę się zamaskować, aby najpierw uzyskać obie wersje tego pliku.

18

Właśnie googled to. GIT_PAGER='less -r' działa dla mnie

+9

Jeszcze lepiej (dla mnie): 'less -R' (Właściwie używam' less -eiFRSX', co rozwiązuje również problemy związane z kolorem i linią.) – cdunn2001

+1

less -R jest jak -r, ale tylko ANSI "color" sekwencje escape są wyprowadzane w postaci "surowej". W przeciwieństwie do -r, wygląd ekranu jest w większości przypadków poprawny. (man less) – richk

211

Lub jeśli używasz mniej jako domyślny pager, po prostu wpisz -S podczas przeglądania porównania, aby ponownie włączyć owijanie w mniej.

+48

związana wskazówka, użyj '--word-diff', aby zobaczyć podświetlone kolorami podświetlanie zmienionych słów –

+4

po prostu na to uwagę, ponieważ widziałem, że niektórzy ludzie mieli z tym problemy, -S różni się od -s (upewnij się, że uderzasz w shift + s) – longda

+1

@JoshDiehl: Mam nadzieję, że nie masz nic przeciwko ... Myślę, że część '--word-diff' zasługuje na własną odpowiedź w tej kwestii, ponieważ uderza mnie to robiąc wiele, aby pomóc rozwiązać podstawowy problem: dowiedzieć się, co się zmieniło na długiej linii. Zrobiłem to: http://stackoverflow.com/a/19253759/313756 – lindes

109

Możesz także użyć git config, aby ustawić pagarek do zawijania.

$ git config core.pager 'less -r' 

Ustawia ustawienia pagera dla bieżącego projektu.

$ git config --global core.pager 'less -r' 

Ustawia pager globalnie dla wszystkich projektów

+3

z msysgit (1.8.1.msysgit.1) działał dla mnie używając podwójnych cudzysłowów -' git config --global core.pager 'less -r "' – kerim

+0

To spowodowało, że zapakowałem się na stałe z wersją git na OS X. dzięki! –

+0

Działa, ale nie rozumiem dlaczego. Czy ktoś może wyjaśnić? 'man less',' -r' nie mówi nic o pakowaniu. –

17

Mac OSX: żaden z pozostałych odpowiedzi wyjątkiem someone45 na „S”, podczas gdy mniej jest uruchomiony pracował dla mnie.Zajęło następujące aby zawijanie wierszy trwałe:

git config --global core.pager 'less -+$LESS -FRX' 
+2

to działało dla mnie na Ubuntu Linux –

+0

To działało również dla mnie, ale nie rozumiem dlaczego. Do czego służy parametr '- + $ LESS"? Jeśli git go nie definiuje, moja zmienna środowiskowa LESS nie jest nawet ustawiona. – jakar

+3

@jakar: to nic nie robi. W niektórych środowiskach '$ LESS' jest ustawiony na pewną wartość (np. Przez' .login' lub '.profile' lub coś w tym stylu), a ta opcja, jak sądzę, po prostu dodaje wartości domyślne, a następnie dodaje' -FRX' na dodatek. – naught101

27

Aby użyć mniej jako pager i uczynić linia owijania stałe można po prostu włączyć opcję rozkładana taklami:

git config --global core.pager 'less -+S' 

ten sposób nie musisz wpisywać go, gdy używasz mniej.

Cheers

+0

To działało dla mnie na OS X Mavericks. – stiemannkj1

+0

Pracowałem dla mnie na OS X 10.9.5. Dzięki! –

+0

Podobnie, jeśli chcesz WYŁĄCZYĆ zawijanie wiersza podczas czytania Git diffs, ustawienie jest podobnie: 'git config --global core.pager 'less -S' –

2

Mogłeś po prostu rura wyjście git diff się więcej:

git diff | more 
+0

To usuwa kolorowanie, ale działa jak urok. – infoclogged

32

Z pełną kredytu Josh Diehl w a comment do this answer, ja mimo to czuję się jak to powinno być odpowiedź sama w sobie , więc dodajemy:

Jednym ze sposobów radzenia sobie z dostrzeganiem różnic w długich liniach jest użycie zorientowanego na słowo typu diff. Można to zrobić za pomocą:

git diff --word-diff 

W tym przypadku otrzymasz znacznie inne wyjście diff, które pokazuje dokładnie, co zmieniło się w linii.

Na przykład, zamiast się coś takiego:

diff --git a/test-file.txt b/test-file.txt 
index 19e6adf..eb6bb81 100644 
--- a/test-file.txt 
+++ b/test-file.txt 
@@ -1 +1 @@ 
-this is a short line 
+this is a slightly longer line 

Można dostać coś takiego:

diff --git a/test-file.txt b/test-file.txt 
index 19e6adf..eb6bb81 100644 
--- a/test-file.txt 
+++ b/test-file.txt 
@@ -1 +1 @@ 
this is a [-short-]{+slightly longer+} line 

lub, za koloryzacji, zamiast tego:

result of just <code>git diff</code>

Możesz uzyskać to:

result of <code>git diff --word-diff</code>

Teraz, jeśli porównać naprawdę długą linię, może nadal mieć problemy z sytuacji pagera pierwotnie opisany, i która została skierowana najwyraźniej do satysfakcji w innych odpowiedzi. Mam nadzieję, że daje to nowe narzędzie, które pozwala łatwiej określić, co zmieniło się na linii.

+4

Istnieje kilka opcji dla '--word-diff':' color', 'plain' i' porcelain'. Można również zmienić wyrażenie regularne dla granic słów za pomocą '--word-diff-regex'. Wartością domyślną jest "\ S +". ([v2.1.1] (http://git-scm.com/docs/git-diff/2.1.1)) – Michael

+3

'--color-words' wydaje się być skrótem dla' --word-diff = color' , co jest miłe, gdy tylko przeglądasz diff, nie udostępniając go. – CivFan

-1

Prosty sposób, aby to zrobić, w moim przypadku używam system Linux

git diff > text.txt 

Ta linia komend tworzy i wstawia wyjście git diff do tekstu.txt możesz go otworzyć za pomocą innego edytora tekstu, na przykład wysublimowanego tekstu.

sublime text.txt 

Mam nadzieję, że ci to pomoże.

nie zapomnij usunąć go po. = 0)

0

lista prąd/default config:

$ git config --global core.pager 
    less -FXRS -x2 

następnie zaktualizować i opuścić -s jak:

$ git config --global core.pager 'less -FXR -x2' 

-s: Powoduje linie dłuższe niż szerokość ekranu, aby być posiekane, a nie złożone.

1

Nikt nie wskazał tego aż do teraz. Jego dość prosta do zapamiętania i bez dodatkowych konfiguracji należy zrobić w config git

git diff --color | less -R 
2

Kiedy używasz „git diff” i to pokazuje kilka stron (widać „:” na końcu strony) w tym przypadku możesz wpisać "-S" i nacisnąć enter. (S powinno być kapitałem). będzie przełączać fold długie linie.

+0

jest to znacznie łatwiejsze niż konieczność bałagania z dowolnymi ustawieniami – chharvey