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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了能否在所有git项目中,让所有的 "git diff "命令都使用 "Python diff"?相关的知识,希望对你有一定的参考价值。

当包含以下一行时

*.py diff=python

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

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

答案

引自 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

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

另一答案

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

[core]
  attributesfile = ~/.gitattributes
另一答案

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

以上是关于能否在所有git项目中,让所有的 "git diff "命令都使用 "Python diff"?的主要内容,如果未能解决你的问题,请参考以下文章

git简单使用

如何让git忽略指定的文件

如何让 Git 日志显示今天所有的提交?

如何在 git 中取消暂存已删除的文件? [关闭]

Windows下遍历所有GIT目录更新项目脚本

即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?