pokud máte nainstalovaný vim, zkuste toto:
vimdiff file1 file2
nebo
vim -d file1 file2
přijde vám to fantastické.
Zkuste sdiff
(man sdiff
)
sdiff -s file1 file2
Pokud dáváte přednost výstupnímu stylu rozdílu z git diff
, můžete jej použít s --no-index
příznak pro porovnání souborů, které nejsou v úložišti git:
git diff --no-index a.txt b.txt
Pomocí několika souborů s přibližně 200 000 řetězci názvů souborů v každém jsem provedl benchmarking (s vestavěným time
command) tento přístup vs některé další odpovědi zde:
git diff --no-index a.txt b.txt
# ~1.2s
comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s
diff a.txt b.txt
# ~2.6s
sdiff a.txt b.txt
# ~2.7s
vimdiff a.txt b.txt
# ~3.2s
comm
se zdá být zdaleka nejrychlejší, zatímco git diff --no-index
se zdá být nejrychlejším přístupem pro výstup ve stylu diff.
Aktualizace 25. 3. 2018 Ve skutečnosti můžete vynechat --no-index
flag, pokud nejste uvnitř úložiště git a nechcete porovnat nesledované soubory v tomto úložišti. Z manuálových stránek:
Tento formulář slouží k porovnání daných dvou cest na souborovém systému. Možnost --no-index můžete vynechat, když spouštíte příkaz v pracovním stromu řízeném systémem Git a alespoň jedna z cest ukazuje mimo pracovní strom, nebo když příkaz spouštíte mimo pracovní strom řízený Git.
Seřaďte je a použijte comm
:
comm -23 <(sort a.txt) <(sort b.txt)
comm
porovná (seřazené) vstupní soubory a standardně vypíše tři sloupce:řádky, které jsou jedinečné pro a, řádky, které jsou jedinečné pro b, a řádky, které jsou přítomné v obou. Zadáním -1
, -2
a/nebo -3
můžete potlačit odpovídající výstup. Proto comm -23 a b
uvádí pouze položky, které jsou jedinečné pro a. Používám <(...)
syntaxe pro třídění souborů za chodu, pokud jsou již seřazeny, nepotřebujete to.