11

使いたい

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

git diff を使用するときに間違ったインデントがある場合に警告が表示されるように、C++ ファイルに対してこれらの設定を行いたいと考えています。ただし、タブが必要な Makefile もあります。ファイルごとに異なる空白設定を構成する方法はありますか?

4

3 に答える 3

3

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 ファイルの構文を使用してファイルを照合します。ie*はすべてに[ch]一致し、文字cとの両方に一致しますh
  • このwhitespaceオプションには、警告する内容がリストされています。
    • オプションの の設定はtabwidthwhitespaceタブとスペース文字をいつ、どのように置き換えるかを決定するために使用されます。(デフォルト値は 8 文字です。)
    • tab-indentタブを使用したインデントはエラーと見なされます。
    • indent-with-non-tabは、行頭に 4 つ以上のスペースが使用されている場合にここで警告します。3 つのスペースでのインデントが受け入れられることに注意してください。タブの前後に隠れているスペースをキャッチするため
      に追加します。 タブに続くスペースはspace-before-tab
  • Aside : diff=cppC および C++ ファイルのよりスマートな差分を有効にします。
  • 余談 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]
于 2019-07-28T19:02:28.477 に答える
2

jzakmeister が私のコメントから更新したように、これはあなたが尋ねたことのサブセクションです。

  • .cpp/.hpp ファイルではインデントにタブを使用できません
  • Makefiles/makefiles および *.mk ファイルで使用できるタブ
  • 末尾のスペースは使用できません
  • 全部で 4 のタブ幅

-「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
于 2015-08-26T19:26:39.900 に答える