Подтвердить что ты не робот

Игнорировать любое пустое пространство или разрыв строки в git -diff

У меня есть один и тот же файл, представленный двумя разными способами, и хочу сравнить его с помощью git diff, заботясь о игнорировании каждого пробела, вкладки, перерыва строки, возврата каретки или все, что не является строго исходным кодом моих файлов.

Я действительно пытаюсь это сделать:

git diff --no-index --color --ignore-all-space <file1> <file2>

но когда некоторые html-теги свертываются все на одной строке (вместо одной строки и табулированной) git -diff detect - это разница (в то время как для меня это не так).

<html><head><title>TITLE</title><meta ......

отличается от

<html>
    <head>
        <title>TITLE</title>
        <meta ......

Какой вариант я пропустил, чтобы выполнить то, что мне нужно, и угроза, как будто это было то же самое?

4b9b3361

Ответ 1

git diff поддерживает сравнение файлов по строкам или по слову, а также поддерживает определение того, что делает слово. Здесь вы можете определить каждый непространственный символ как слово для сравнения. Таким образом, он будет игнорировать все пробелы, включая white-spcae, tab, line-break и carrige-return, как вам нужно.

Чтобы достичь этого, существует идеальный вариант --word-diff-regex, и просто установите его --word-diff-regex=[^[:space:]]. Подробнее см. doc.

git diff --no-index --word-diff-regex=[^[:space:]] <file1> <file2>

Вот пример. Я создал два файла с a.html следующим образом:

<html><head><title>TITLE</title><meta>

С b.html следующим образом:

<html>
    <head>
        <title>TI==TLE</title>
        <meta>

Запустив

git diff --no-index --word-diff-regex=[^[:space:]] a.html b.html

Он выделяет разницу TITLE и TI{+==+}TLE в двух файлах в режиме plain следующим образом. Вы также можете указать --word-diff=<mode> для отображения результатов в разных режимах. mode может быть color, plain, porcelain и none, а по умолчанию plain.

diff --git a/d.html b/a.html
index df38a78..306ed3e 100644
--- a/d.html
+++ b/a.html
@@ -1 +1,4 @@
<html>
    <head>
            <title>TI{+==+}TLE</title>
                    <meta>

Ответ 2

git -diff сравнивает файлы по строкам

Он проверяет первую строку вашего файла1 на том, что в файле2, так как они не совпадают с сообщением об ошибке.

Игнорирование пробела означает, что foo bar будет соответствовать foobar, если на той же строке. Поскольку ваши файлы охватывают несколько строк в одной и только одной строке в другом, файлы всегда будут отличаться

Если вы действительно хотите проверить, что файлы содержат одинаковые символы без пробелов, вы можете попробовать что-то вроде этого:

diff <(perl -ne 's/\s*//xg; print' file1) <(perl -ne 's/\s*//g; print' file2)

Надеюсь, что он решает вашу проблему!

Ответ 3

Это делает трюк для меня:

git diff --ignore-blank-lines