有没有办法让git gui以某种方式显示和显示UTF16文件的差异?
我找到了some information,但这主要是指命令行,而不是gui。
发布于 2013-04-30 03:07:23
在msysGit人员的帮助下,我一直致力于一个更好的解决方案,并提出了这个干净/污迹过滤器。筛选器使用Gnu file和iconv命令来确定文件的类型,并将其转换为msysGit的内部UTF-8格式,或将其转换为msysGit的内部UTF-8格式。
这种类型的清理/涂抹过滤器为您提供了更多的灵活性。它应该允许Git在大多数情况下将混合格式的文件作为UTF-8文本处理: diffs、merge、git-grep,以及像eol-conversion、ident-replacement和内置的diff模式这样的gitattribute属性。
上面概述的diff过滤器解决方案仅适用于diffs,因此受到更多限制。
要设置此筛选器:
filter "mixedtext“clean = iconv -sc -f $(文件-b --mime-编码%f) -t utf-8 -sc = iconv -sc -f utf-8 -t $(文件-b --mime-编码%f)所需的
*.txt filter=mixedtext
我在一个包含ANSI、UTF-16和UTF-8格式的sql文件的目录上使用过它。到目前为止,它是有效的。除非有任何意外,这看起来像是20%的努力,可以解决所有Windows文本格式问题的80%。
发布于 2013-04-10 04:57:55
此方法适用于MSysGit 1.8.1,并在Windows XP上进行了测试。我使用的是Git扩展2.44,但由于这些更改是在Git级别上进行的,因此它们也应该适用于Git Gui。步骤:
Git
astextutf16,并将其放置在安装的/bin目录中(这基于现有的astextplain脚本):#!/bin/sh -e #将Windows Unicode (UTF-16 / UCS-2)转换为Git友好的UTF-8 #备注:#*需要Gnu图标:# http://gnuwin32.sourceforge.net/packages/libiconv.htm #*此脚本必须放在:~/Git/bin #*修改全局的~/Git/etc/gitconfig或本地的~/.git/config:# diff " astextutf16“# textconv =astextutf16#*或者,从命令行:#$ git config diff.astextutf16.textconv astextutf16 #*修改全局~/Git/etc/Git属性或本地~/.git属性:# *.txt diff=astextutf16 if test "$#“!= 1;然后回显"Usage: astextutf16“1>&2 exit 1 fi # -f(rom) utf-16 -t(o) utf-8 "\Program Files\GnuWin32\bin\iconv.exe”-f utf-16 -t utf-8 "$1“exit 0
从命令行比较astextutf16
$ git config diff.astextutf16.textconv astextutf16
*.txt diff=astextutf16
发布于 2016-02-06 11:52:42
我遇到了类似的问题。
我想改进公认的答案,因为它有一个小缺陷。我遇到的问题是,如果文件不存在,我会收到以下错误:
不支持将
转换为
我更改了命令,这样就不需要文件了。它只使用stdin/stdout。这解决了这个问题。我的.git/config文件现在如下所示:
[filter "mixedtext"]
clean = "GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP"
smudge = "GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP"
required = true要在.git/config文件中创建条目,请使用以下命令:
git config --replace-all filter.mixedtext.clean 'GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP'
git config --replace-all filter.mixedtext.smudge 'GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP'
git config --replace-all filter.mixedtext.required true我的.gitattributes文件如下所示:
*.txt filter=mixedtext
*.ps1 filter=mixedtext
*.sql filter=mixedtext仅指定可能有问题的文件,否则清理/涂抹必须执行更多工作(临时文件)。
我们还将git中的UTF-16le文件批量转换为UTF-8,因为这是最紧凑和可移植的UTF编码。在清理和涂抹中使用的相同的iconv命令对于永久转换文件来说是完美的。
清理/污点命令的好处是,即使使用UTF-16le检入了文件,diff仍然可以工作。
https://stackoverflow.com/questions/3915072
复制相似问题