缩进配置仅适用于某些文件

时间:2012-12-11 11:49:28

标签: git

我想用

git config core.whitespace tab-in-indent,tabwidth=4

我想对c ++文件进行这些设置,以便在使用git diff时出现错误缩进时会收到警告。但是,我还有需要制表符的Makefile。有没有办法为不同的文件配置不同的空格设置?

3 个答案:

答案 0 :(得分:8)

您可以使用gitattributes调整这些设置。这是我的.gitattributes文件的片段:

*.c     text diff=cpp whitespace=trailing-space,space-before-tab,tab-in-indent
*.cpp   text diff=cpp whitespace=trailing-space,space-before-tab,tab-in-indent
*.h     text diff=cpp whitespace=trailing-space,space-before-tab,tab-in-indent
*.hpp   text diff=cpp whitespace=trailing-space,space-before-tab,tab-in-indent
*.py    text diff=python whitespace=trailing-space,space-before-tab,tab-in-indent
*.tex   text diff=tex whitespace=trailing-space,space-before-tab,tab-in-indent
*.java  text diff=java whitespace=trailing-space,space-before-tab,tab-in-indent
*.pl    text diff=perl whitespace=trailing-space,space-before-tab,tab-in-indent
*.php   text diff=php whitespace=trailing-space,space-before-tab,tab-in-indent
*.rb    text diff=ruby whitespace=trailing-space,space-before-tab,tab-in-indent

*.vcproj    eol=crlf
*.dsp       eol=crlf
*.dsw       eol=crlf

*.sh    eol=lf

*.jpg   binary
*.png   binary
*.gif   binary
*.tiff  binary

要调整空白设置,您可以使用以下内容:

*.ext   whitespace=tab-in-indent,tabwidth=4

*.ext可以指向路径,包含globs等。这是非常灵活的机制。

答案 1 :(得分:1)

正如jszakmeister从我的评论中更新,这里只是你所询问的一个小节。

  • .cpp / .hpp文件不允许使用制表符
  • 制表符允许使用Makefile / makefile和* .mk文件
  • 并非所有
  • 都允许使用尾随空格
  • 所有
  • 中的4个tabwidth

请注意'makefile-ish'条目中-修饰符的使用,表示不要将tab-in-indent称为错误。

makefile text          whitespace=-tab-in-indent,trailing-space,tabwidth=4
Makefile text          whitespace=-tab-in-indent,trailing-space,tabwidth=4
*.mk     text          whitespace=-tab-in-indent,trailing-space,tabwidth=4
*.cpp    text diff=cpp whitespace=tab-in-indent,trailing-space,tabwidth=4
*.hpp    text diff=cpp whitespace=tab-in-indent,trailing-space,tabwidth=4

答案 2 :(得分:1)

John SzakmeisterUpAndAdam的答案中有一些补充。

要设置特定于文件的规则,您必须在项目的根目录中添加一个.gitattributes文件。 docs
(如果您不希望对其进行版本控制,则可以将其添加为:.git/info/attributes。)

# Macro's
[attr]cpp       diff=cpp whitespace=trailing-space,space-before-tab,indent-with-non-tab,tabwidth=4
[attr]makefile  whitespace=trailing-space,indent-with-non-tab,space-before-tab,tabwidth=4

*.[ch]        cpp
*.[ch]pp      cpp
makefile      makefile
s.makefile    makefile
  • 使用.gitignore files的语法匹配文件。即*匹配所有内容,而[ch]匹配两个字符ch
  • whitespace选项列出了需要警告的内容。
    • tabwidth选项中设置whitespace用于确定何时以及如何替换制表符和空格字符。 (默认值为8个字符。)
    • tab-indent认为使用制表符的缩进是错误的。
    • indent-with-non-tab在一行的开头使用4个或更多空格时会在此发出警告。请注意,可以缩进3个空格!
      添加space-before-tab可以捕获选项卡之前和之间隐藏的空间。
      请注意,制表符后面的空格是
  • 旁边diff=cpp为C和C ++文件启用了更智能的差异。
  • Aside 2 trailing-space在行尾和文件尾警告空白字符。

验证规则

  • 要验证已应用.gitattributes中的哪些规则,请使用:
git check-attr --all -- <pathname>

<pathname>不必是现有文件。 (即some.cpp有效)

  • 要测试whitespace规则:
    创建一个与文件名规则匹配的虚拟文件,然后调用:git diff
trailing space 
trailing tab    
  2 spaces
    4 spaces
    tab
     tab and space
    space and tab
        tab, space, tab

用法

调用git diff时会标记问题,调用git -apply ---whitespace=[warn|error|fix]时会检查/修复问题。 使用以下命令配置git apply的默认行为:

git config --[global|local] apply.whitespace [warn|error|fix]