Git可以在~/.gitconfig文件中配置使用空格吗?

19
当我使用 git config --global <some option> <some value> 时,Git会在我的 ~/.gitconfig 中添加相关的条目,并且缩进一个制表符。由于我的~/.gitconfig是受版本控制的,我不希望它变得混乱,因此我必须手动替换制表符为空格。
能否让Git在将条目添加到 ~/.gitconfig 时自动使用空格呢?
(请注意,这不是关于我用Git提交代码时的缩进,而是关于Git自己配置文件中的缩进。)

1
选项卡有什么问题吗? - David
4
另外,为什么你的个人 ~/.gitconfig 被发布到 SCM 上了?你的整个 home (~) 目录都在版本控制下吗?我有什么遗漏的吗? - ddavison
3
"git config"没有真正的配置选项可以告诉它使用制表符而不是空格,但是由于你提到了你的.gitconfig是仓库的一部分,你可以为你的.gitconfig设置一个filter来取消展开,并使用gitattribute来使用该filter。如果需要示例,我可以写下一个 - 否则,只需使用谷歌并在此处着陆:https://alexzaytsev.me/2014/10/19/git-filter-to-convert-spaces-to-tabs-and-vice-versa/ - rasjani
3
@sircapsalot 发布点文件集合到 Github 上非常普遍。这就是我所做的。我的其中一个点文件是 ~/.gitconfig;它包含许多有用的别名,其他人可能会感兴趣。您可以在此处查看整个存储库。 - Radon Rosborough
2
哇,上面的讨论让人想起了https://www.youtube.com/watch?v=SsoOG6ZeyUI。 - Ashutosh Jindal
显示剩余6条评论
1个回答

9
这是对我有用的方法(请注意,如@rasjani在评论中指出,使用git config时没有选项可以防止git在第一次插入制表符。)

创建过滤器

创建一个filter,在你对文件执行git add时自动将制表符转换为空格。这个过滤器是由以下操作创建的:

git config --global filter.spacify.clean 'expand --tabs=4 --initial'
< p > < em > < code > expand 命令表示将每个行首的制表符转换为 4 个空格字符

因此,该过滤器的定义包括它所做的事情以及它所执行的时间(即哪个 git 操作)。

(在 OSX 上,您需要使用 gexpand,并通过执行 brew install coreutils 进行 coreutils 安装后使用)

当然,您需要决定上述配置的 scope--system--global 或默认的 --local)。


指定要应用过滤器的文件/路径模式

例如,对于您的存储库,创建一个.git/info/attributes文件,并添加以下内容:

.* filter=spacify

这句话的意思是,在将这些文件提交到代码库之前,对匹配模式为“.*” 的任何文件应用 spacify 过滤器。
请注意,以上只会影响添加到存储库中的新文件。如果您想对所有现有文件执行此操作,则可以手动运行expand,或者让git为我们执行此操作,方法如下:
git config --global filter.spacify.smudge 'expand --tabs=4 --initial'
git checkout HEAD -- **

使用 spacify 过滤器来进行 smudge 操作将会导致该过滤器被应用到正在检出的文件上。检出后,您应该会看到一堆点文件的更改,其中前导制表符已转换为空格。重新提交这些更改,从此以后,smudgeclean 将保持您的点文件无制表符!

更新 -- 拉取请求!

这是您的存储库的拉取请求: https://github.com/raxod502/radian/pull/156


1
虽然这个解决方案有所帮助,但我希望能够在一开始就阻止Git插入制表符。例如,你提供的最后一个命令(git config --global filter.spacify.smudge ...)会在我的.gitconfig文件中自动插入一个制表符! - Radon Rosborough
1
但是,由于一旦提交更改的.gitconfig文件,spacify过滤器就会执行其黑魔法,因此该选项卡不会出现在您的存储库中。我已更新我的答案以强调在撰写本文时,似乎没有强制git使用空格而不是制表符进行git config的选项。 - Ashutosh Jindal
好吧,这让我感到难过。我会接受这个答案,因为对于想要使用空格的人来说,这是下一个最好的选择。 - Radon Rosborough
我认为你应该添加一条说明,即如果不阻止该过滤器更改某些文件(如Makefile),将会给他们带来很多麻烦。如果使用空格,Makefile将会出错并无法运行。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接