Безопасный способ UTF-8 для git diff как diff-diff? [Дубликат]

Вот альтернативное решение: если у вас есть дата в PHP как временная метка, обход, обрабатывающий ее с помощью PHP, и пусть DB позаботится о ее преобразовании с помощью функции FROM_UNIXTIME.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
16
задан chestozo 27 June 2013 в 06:57
поделиться

5 ответов

Решение для меня было использовать git difftool.

Я написал этот инструмент https://github.com/chestozo/dmp на основе https: / /code.google.com/p/google-diff-match-patch/.

Иногда это также дает лучший diff по сравнению с git diff --color-words=.:)

2
ответ дан chestozo 19 August 2018 в 17:35
поделиться

Для нескольких платформ, работающих с LANG до C.UTF-8 (или en_US.UTF-8 и т. д.), будет работать:

$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[-人-]{+丁+}

Однако LANG, похоже, не соблюдается на некоторых платформ (например, Git для Windows ):

$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
<E4>[-<BA><BA>-]{+<B8><81>+}

Обходной путь на этих платформах заключается в предоставлении необработанных байтов для символов UTF-8 (например, $'[^\x80-\xBF][\x80-\xBF]*' для '.' ) для git diff:

$ echo '人' >test1.txt && echo '丁' >test2.txt
$ git diff --no-index --word-diff=plain --word-diff-regex=$'[^\x80-\xBF][\x80-\xBF]*' -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[-人-]{+丁+}
1
ответ дан Danny Lin 19 August 2018 в 17:35
поделиться
  • 1
    LANG var в моем случае en_US.UTF-8, и это мало помогает. git diff --color-words=. --word-diff-regex=$'[^\x80-\xBF][\x80-\xBF]*' хороший! спасибо) проверит! – chestozo 13 May 2018 в 08:16
  • 2
    Если вы используете -word-diff-regex, лучше использовать -word-diff = color вместо --color-words (что является комбинацией обоих). Кроме того, вы можете установить diff.wordRegex, чтобы в будущем вы могли указать только цвет -word-diff =, а git будет использовать настроенное регулярное выражение для слова diff. – Danny Lin 13 May 2018 в 08:22
  • 3
    Будьте осторожны с отображением символов UTF8 в git diff. Очень возможно прокрасть какой-то вредоносный код, спрятав его с сомнительными символами UTF8 (символы нулевой ширины, которые я смотрю на вас) – Yarek T 13 August 2018 в 16:12

Я видел много отчетов, xterm на самом деле не умеет печатать символы Unicode в некоторых случаях. Может быть, по крайней мере, отправная точка для решения.

0
ответ дан frlan 19 August 2018 в 17:35
поделиться
  • 1
    В этом случае проблема заключается в 2 байтах, используемых для представления символа юникода в оболочке. Пока git diff знает, что имеет дело с символами 1 байт. Я не уверен, что это проблема xterm. – chestozo 23 November 2013 в 17:56
  • 2
    Ну ... Не похоже ... по крайней мере, это сработало для меня diff -git / README b / README index e69de29..b562a56 100644 --- a / README +++ b / README @@ -0 , 0 +1 @@ + μÜäčřúůжжвыаьь – frlan 23 November 2013 в 20:25

Для меня лучшим решением для этого является установка export LESSCHARSET=utf-8.

В этом случае обе git log -p и git diff отображаются без ошибок. Unicode

9
ответ дан Maga Abdurakhmanov 19 August 2018 в 17:35
поделиться
22
ответ дан toolbear 19 August 2018 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: