←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Inny
[GIT] git diff pokazujący zmiany linia pod...

  • +
  • -
Rivit's Photo 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.

Quote

  • +
  • -
Ogen Dogen's Photo 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ć.

Quote

  • +
  • -
Rivit's Photo Rivit 27.07.2020

To że używam git diffa, nie znaczy, że używam go w repozytorium w ogóle :D

 

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

Quote

  • +
  • -
dasiek's Photo dasiek 28.07.2020

gugl mi podpowiedział, że możesz definiować "jak ma wyświetlać różnicę"

https://superuser.com/a/706286

Quote

  • +
  • -
Rivit's Photo 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 :/

 
Quote

  • +
  • -
Rivit's Photo 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 :D

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

Quote