能否在所有git项目中,让所有的 "git diff "命令都使用 "Python diff"?

问题描述 投票:14回答:3

当包含以下一行时

*.py diff=python

在本地.gitattributes文件中。git diff 为Python文件的不同差异块生成了漂亮的标签 (包括变化所在的函数名称等)。

能否要求 git 为以下文件使用这种差异模式? Python文件跨 git项目? 我试着设置了一个全局的~.gitattributes,但它并没有被本地的git仓库使用。 有没有比在每个新的git项目中初始化一个 ln -s ~/.gitattributes?

python git diff gitattributes
3个回答
4
投票

引自 gitattributes(5):

核心.attributesfile配置选项(见git-config(1))所指定的文件中,应将影响单个用户的所有仓库的属性放在其中,默认值是$XDG_CONFIG_HOMEgitattributes。它的默认值是 $XDG_CONFIG_HOMEgitattributes。如果 $XDG_CONFIG_HOME 没有设置或为空,则使用 $HOME.configgitattributes 来代替。系统中所有用户的属性应该放在$(prefix)etcgitattributes文件中。

TL;DR.Gitattributes文件中。 echo '*.py diff=python' >> "${XDG_CONFIG_HOME:-$HOME/.config}"/git/attributes


更新,7年后

好的,不需要配置为 diff=python 为*.py文件 - 这是很久以前的默认值。

但总的来说,你可以在本地(每个仓库)设置的任何东西。.gitattributes你也可以做全局(每台机器)。

有很多好的例子在 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

最后,我们将其与 *.md, *.markdown 通过全球gitattributes。

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

这就是所有的人!测试一下吧。


3
投票

要告诉 git 使用 ~.gitattributes,你需要把这个放到 ~.gitconfig 中。

[core]
  attributesfile = ~/.gitattributes

0
投票

不,git只在本地寻找属性。.gitattributes.git/info/attributes

© www.soinside.com 2019 - 2024. All rights reserved.