[GIT] git diff pokazujący zmiany linia pod...
Rivit
27.07.2020
W skrócie mam dwa pliki binarne, chce je porównać za pomocą git diff i wszystko jest ok, ale output jest taki:
https://i.imgur.com/7AGe8K3.png
Komenda, której użyłem:
git diff --color-words=. plik.hex kopia.hex
No i jest beznadziejny bo tak do d*py pokazuje te zmiany w przypadku binarnych plików, że hej....
Chciałbym, żeby pokazywał te zmiany jakby pod spodem, w osobnej linii, bo tak to nie sposób se porównać....
O tak chciałbym, żeby to wyglądało:
https://i.imgur.com/04Miufk.png
Jak takie coś zrobić? kurde tych przełączników tam tyle, sprawdziłem przeczytałem, ale nie znalazłem. Jakiś pomysł jak to zrobić? Od biedy napisze jakiś skrypt czy coś, ale nie chce mi sie w to bawić póki co.
Ogen Dogen
27.07.2020
Wydaje mi się, że idziesz w złym kierunku. Git nie powstał do obsługi plików binarnych, czemu w ogóle je trzymasz w repozytorium?
Ja bym tu raczej właśnie użył jakiegoś zewnętrznego narzędzia do porównywania takich plików (minuta w google), a gita jeśli już to użył tylko do wyciągnięcia wersji, które chcesz porównać.
Rivit
27.07.2020
To że używam git diffa, nie znaczy, że używam go w repozytorium w ogóle
Próbowałem wielu różnych kombinacji i drugi sposób jest prawie ideolo, ale on nie ogarnia pojedynczych znaków, tylko całe linie zaznacza tak jak np tu:
https://i.imgur.com/Hlg2APu.png
A chciałbym, żeby nie zaznaczał tego co jest niezmienione.
git dobrze to rozpoznaje tylko output jest dupny.
Skrypt, który używam w sposobie drugim (python3):
from watchgod import watch import os os.system("touch plik.hex") for changes in watch('./plik.memdump'): os.system("cp plik.hex kopia.hex") os.system("hexdump -C plik.memdump > plik.hex") os.system("clear") os.system("diff -U 6 kopia.hex plik.hex | colordiff | diff-highlight") # os.system("diff-highlight kopia.hex plik.hex")
brzydkie, ale to testy
dasiek
28.07.2020
gugl mi podpowiedział, że możesz definiować "jak ma wyświetlać różnicę"
https://superuser.com/a/706286
Rivit
28.07.2020
Spróbowałem iiiii no effect
Przypuszczam, że ta opcja --color-words=. coś miesza, ale dobrze zaznacza różnice tylko, że w shitowy sposób je prezentuje
Rivit
28.07.2020
Sprawdzę. Póki co poradziłem sobie jakoś pokracznie pythonem + bashem, pewnie zamiast pythona dałoby się wykorzystać coś typu 'tail -f' albo 'inotifywait' ale who cares
from watchgod import watch import os os.system("touch plik.hex") os.system("touch ascii.hex") os.system("touch diff_res2") for changes in watch('./plik.memdump'): os.system("./w.sh")
#!/bin/bash cp plik.hex kopia.hex cp ascii.hex kopia_ascii.hex hexdump -e '"%08.8_ax "' -e' 4/1 "%02x " " " 4/1 "%02x " " " 4/1 "%02x " " " 4/1 "%02x " ' -e '" \n"' plik.memdump > plik.hex hexdump -e '" |" 16/1 "%_p" "|\n"' plik.memdump > ascii.hex clear diff -U 6 kopia.hex plik.hex | colordiff | diff-highlight > diff_res1 cp diff_res2 diff_res2_old if cmp -s kopia_ascii.hex ascii.hex; then echo "TAKIE SAME" else diff -U 6 kopia_ascii.hex ascii.hex | colordiff | diff-highlight > diff_res2 fi clear paste diff_res1 diff_res2