引自gitattributes(5)
:
应该影响单个用户的所有存储库的属性应该放在由 core.attributesfile 配置选项指定的文件中(请参阅 git-config(1))。它的默认值为 $XDG_CONFIG_HOME/git/attributes。如果 $XDG_CONFIG_HOME 未设置或为空,则使用 $HOME/.config/git/attributes 代替。系统上所有用户的属性都应该放在 $(prefix)/etc/gitattributes 文件中。
TL;博士: echo '*.py diff=python' >> "${XDG_CONFIG_HOME:-$HOME/.config}"/git/attributes
7年后更新
好的,没有必要diff=python
为 *.py 文件配置 - 这是很久以前的默认设置。
但总体要点仍然存在:您可以在本地 (per-repository) 中设置的任何内容.gitattributes
,也可以在全局 (per-machine) 中设置。
本身就有很多很好的例子man 5 gitattributes
,所以请去 RTFM。
让我们只做一个自定义设置:--word-diff
针对所有 Markdown 文件(感谢 @RayLuo在评论中提出这个建议)。
首先,我们添加一个外部差异驱动程序:
git config --global diff.stackoverflow-word-diff.command ~/.local/bin/stackoverflow-word-diff
API 是这样的,我们必须使独立的包装器可执行。
cat > ~/.local/bin/stackoverflow-word-diff << 'EOF'
#!/bin/bash -eu
#-- uncomment for debug:
#echo >&2 "$(basename $0) args: $@"; set -x
FILENAME="$1"
OLDFILE="$2"
OLDHASH="$3"
OLDMODE="$4"
NEWFILE="$5"
NEWHASH="$6"
NEWMODE="$7"
git diff --no-ext-diff --word-diff "$OLDFILE" "$NEWFILE" || exit 0
#-- from https://stackoverflow.com/a/18948381/531179
#-- see `man 1 git` /EXTERNAL_DIFF, or https://www.git-scm.com/docs/git
EOF
chmod +x ~/.local/bin/stackoverflow-word-diff
最后,我们通过全局 gitattributes将其绑定到*.md
:*.markdown
mkdir -vp "${XDG_CONFIG_HOME:-$HOME/.config}"/git
{ echo '*.md diff=stackoverflow-word-diff'; \
echo '*.markdown diff=stackoverflow-word-diff; \
} \
>> "${XDG_CONFIG_HOME:-$HOME/.config}"/git/attributes
这就是所有人!测试一下。