Podoba mi się formatowanie wyjściowe git diff
. Kolor i +
/-
reprezentacja zmian między wierszami jest łatwiejsza do odczytania niż GNU diff.
Mogę uruchomić git diff
za pomocą --no-index
flag poza repo git i działa dobrze. Jednak wydaje się, że brakuje --exclude
opcji wykluczania plików lub podkatalogów z rekurencji diff
.
Czy jest sposób, aby uzyskać to, co najlepsze z obu światów? (opcje kolorów i +
/ -
format git diff
i --exclude
opcja GNU diff).
Eksperymentowałem colordiff
, ale nadal wolę format wyjściowygit diff
newtext
w/etc/colordiff
. Myślę, że git używa zielonego?Odpowiedzi:
Nie wiem, jak zrobić kolor, ale zrobię to
+/-
raczej niż<
i>
.źródło
diff -u file1 file2 | tig
.colordiff
z repozytorium apt / yum / pacman i użyj go.colordiff
: docs.aws.amazon.com/AWSEC2/latest/UserGuide/ ...colordiff
możesz również uzyskać kolorvim
, definiująccdiff() { diff -u $@ | vim -R -; }
.Możesz także użyć
git diff --no-index -- A B
(poprzez stronę podręcznika ).źródło
A
iB
różnią się między sobą, zamiast tego, gdzie każdy plik został zmodyfikowany w stosunku do ich ostatniej odpowiedniej wersji.git diff --no-index
jest świetny, ale jak wskazał OP, brakuje mu--exclude
flagi, więc często ma bardzo ograniczoną użyteczność.Zainstaluj colordiff .
Zaktualizuj swój ~ / .colordiffrc (kopiuj najpierw / etc / colordiffrc, jeśli to konieczne):
Użyj
colordiff -u file1 file2
dla dwóch plików lubcolordiff -ruN path1 path2
do rekursywnego porównywania ścieżek.To nie jest dokładnie to samo, ale jest bardzo blisko.
źródło
To właśnie proponuję i jest całkiem blisko
colordiff
: Musisz to zainstalowaćbrew install colordiff
na moim Macu.port install colordiff
na niektórych komputerach Mac.sudo apt-get install colordiff
na Debianie lub Ubuntu-R
: to mówi Lessowi, aby pokazywał kolory zamiast surowych kodów.Ostatecznie użyłem,
-w
ponieważ nie chciałem widzieć różnic z białymi znakami.Edycja: zgodnie z sugestią @Ciprian Tomoiaga w komentarzu, możesz uczynić to funkcją i umieścić ją również w swoim
~/.bashrc
pliku.źródło
function gdiff () { diff -u $@ | colordiff | less -R; }
GNU
diff
ma--color
opcję od wersji 3.4 pod koniec 2016 r., Zgodnie z tą odpowiedzią na Unix SE. To razem-u
powinno wystarczyć, aby naśladować wyjściegit diff
:diff -u --color=always file1 file2 | less -r
--color
musi byćalways
stosowany w rurze,auto
wyłączy kolor w rurach.Próbowałem tego tylko z Git Bash w systemie Windows, gdzie
less -R
pokolorowałbym tylko pierwszą linię kawałka.less -r
naprawiłem to dla mnie w tym przypadku.źródło
Korzystanie tylko
bash
,diff
,tput
, iless
możemy ściśle zbliżenie wyjściegit diff
. Będą jednak pewne znaczące różnice ze względu na krótkowzrocznośćdiff
programistów.Umieść następującą definicję funkcji Bash w jakimś pliku, który jest pobierany automatycznie przez twoje konto użytkownika, a będziesz mógł uzyskać dostęp do funkcji z wiersza poleceń:
Ta funkcja działa w następujący sposób:
diff
jest wywoływany z różnymi opcjami formatowania, aby określić, jak zmiany w plikach będą wyświetlane.tput
służy do wstawiania kodów kolorów ANSI do tych opcji formatowania. Należy pamiętać, że podczas korzystania z terminali non-ANSI, być może trzeba będzie wymienićtput setaf
ztput setf
.diff
jest przesyłane potokiem doless
.-R
umożliwia zachowanie kolorów ANSI.-X
zapobiegaless
czyszczeniu ekranu po wyjściu.-F
zapobiegaless
działaniu jako pager, jeśli wyjście mieści się na jednym ekranie.@full
, funkcja wyświetli wszystkie niezmienione wiersze oprócz dodanych i usuniętych wierszy.Zwróć uwagę na następujące różnice między tym podejściem a
git diff
:git diff
zgłasza trzy linie kontekstu otaczającego każdą zmianę. Niestety,diff
wydaje się narzekać i kończy pracę, jeśli chcesz określić liczbę linii kontekstu, jednocześnie określając opcje formatowania. (Przynajmniej tak jest w systemie Mac OS X Yosemite). Dziękidiff
programistom. W związku z tym można albo zażądać braku wierszy kontekstu otaczających każdą zmianę, co jest zachowaniem domyślnym, albo zażądać, aby wszystkie niezmienione wiersze w pliku były również zgłaszane, określając@full
jako pierwszy parametr.git diff
, numery wierszy zgłaszane przez tę funkcję będą również różnić się od tych zgłaszanych przezgit diff
.git diff
radzi sobie z tym lepiej, poprzez kontekst.diff
Jeśli wolisz, możesz spróbować przekazać różne opcje, aby lepiej radzić sobie z białymi znakami.źródło
Szukasz
colordiff
:źródło
Umieść to w swoim
.bashrc
lub.zshrc
:diff() { git diff --no-index "$1" "$2" | colordiff; }
wymagania:
git
icolordiff
powinien być zainstalowany wcześniej.stosowanie :
diff file1 file2
przykład: za $
diff .tmux.conf .zshrc.pre-oh-my-zsh
źródło
Inną opcją jest zrobienie tego spoza repozytorium, aby git wiedział, jak rozróżniać pliki. na przykład. funkcja powłoki, taka jak:
źródło
Użyj colordiff :
Instalacja:
Stosowanie:
Daje dokładnie taką samą różnicę, jak pokazano na
git diff
.źródło
Jeśli nie masz
colordiff
lubgit diff
, możesz uzyskać kolor za pomocąvim
.lub po prostu
źródło
Ponieważ nietoperz ma ładne koloryzowanie, przetestowałem, czy to też działa
diff
i, co zaskakujące, działało naprawdę dobrze po wyjęciu z pudełka.$ diff file1 file2 | bat
lub$ diff -u file1 file2 | bat
Więc przypuszczam, że możesz sprawić, by funkcja taka jak ta była bardziej wydajna:
źródło
Przetestowano w Debianie 9
diff -u --color=always file1 file2
źródło
Myślę, że ustawienie config:
w połączeniu z
--relative=<path>
opcją polecenia "diff" zrobiłoby to, co chciałeś. Próbowałeś ?źródło
git
. Pytał odiff
opcje programu