22

インデントにタブ文字を使用するコードをコミットしないようにしています。これは私が自分のコミットに適用しているソフトな制約です(現在、インデント文字の標準はありませんが、スペースの幅に不一致がないため、スペースを使用したいと思いますが、いくつか人々は幅4のタブと幅8のタブを使用します)。

このような制約を確認する最も簡単な方法は、コミットしようとするたびにgit diffの実際の出力を調べて、問題があるかどうかを確認することです。たとえば、私にとっては、デフォルトで末尾の空白が強調表示され、ウィンドウの改行も差分に表示されるため、誤って末尾の空白を含むコードをコミットしようとすると、これが通知されます。タブ文字をgitdiffにも表示させる方法はありますか?

4

4 に答える 4

26

Gittab-in-indentは1.7.2(2010年7月21日)で空白のカテゴリを学習しました。Documentation / RelNotes / 1.7.2.txt
から:

  • 「gitapply--whitespace」と「gitdiff」で使用される空白のルールは、スペースのみでインデントするポリシーを持つプロジェクトを支援するために、ファミリーの新しいメンバー(tab-in-indent)を取得しました。

これは、他の空白チェックオプションと同じ方法で制御および使用されます。

の強調表示git diffは、他の空白エラーと同じです。
で確認できますgit diff --check
など。

tab-in-indent構成変数の値に追加して、core.whitespaceそれを有効にします(おそらく、1つ以上の特定のリポジトリー、または「グローバル」(使用ごと)構成のいずれかで)。

set-show-tabs() {
    global=
    test "$1" = -g || test "$1" = --global && global=--global
    cws=$(git config $global core.whitespace)
    case "$cws" in
        tab-in-indent,*|*,tab-in-indent|*,tab-in-indent,*) ;;
        *) git config $global core.whitespace "$cws"${cws:+,}tab-in-indent ;;
    esac
}
set-show-tabs           # only in local repository
set-show-tabs --global  # for all your Git activities
# or just edit it manually with "git config [--global] --edit"

または、個々のコマンドに設定することもできます(git -c1.7.2からも使用できます)。

git -c core.whitespace=tab-in-indent diff --check

このようなものをpre-commitフックで使用して、実際のリポジトリ構成ファイルにタブを含めずにタブをチェックできます。

于 2011-04-07T08:32:34.027 に答える
12

タブ付きの行を見つけるには:

git grep -n --cached 'LITERAL TAB HERE'

bashまたはzshでは、。を使用してリテラルタブに入ることができますCtrl-V Ctrl-I。このコマンドは、すべてのファイルとタブ付きの行を表示します。

タブを使用したコミットを防止してポリシーを適用する場合は、これを.git/hooks/pre-commit挿入して実行可能としてマークします(chmod +x):

#!/bin/sh
allowtabs=$(git config hooks.allowtabs)
if [ "$allowtabs" != "true" ] &&
   git diff --cached | egrep '^\+.* '>/dev/null
then
   cat<<END;
Error: This commit would contain a tab, which is against this repo's policy.

If you know what you are doing you can force this commit with:

  git commit --no-verify

Or change the repo policy like so:

  git config hooks.allowtabs true
END
  exit 1
fi

*との'間に文字通りのタブがありますgit diff --cached | egrep。これは、Vimを使用してCtrl-V Ctrl-I、またはEmacsを使用して取得できますC-q C-i

それが行うことは、タブを含む差分(「+」で始まる)の新しい行を探すことです。git grep問題のあるタブをフックに表示したい場合は、エラーメッセージにその行を入れることができます。

このフックをここのgithubに配置しました。

于 2011-04-07T00:07:32.087 に答える
0

タブでインデントされたコードをコミットできないようにするpre-commitフックを作成しましたhttps://github.com/martinjoiner/portable-code-pre-commit-hook次のようになります...

ここに画像の説明を入力してください

現在、すべてのプロジェクトで日常的に使用しています。お気軽にご利用ください。

私は、Mac、Windows、Linuxのさまざまな環境でコードを記述し、GithubWebサイトを介してブラウザーでコードをレビューするチームで働いています。チームは、コードをチェックする手助けをしてくれることを本当に嬉しく思っているので、それらすべての場所で一貫しているように見えます。

問題があれば教えてください。弱点を改善する機会があればと思います。ありがとう。

于 2017-06-06T09:46:54.067 に答える
0

タブ文字を表示する1つの方法は、たとえば、目立つもの.       (ドットの後に7つのスペースが続く)に置き換えることです。これは、構成でpagerを置き換えて、の呼び出しを追加することで実現できますsed。このような:

[core]
    pager = sed 's/\t/.       /g' | less -R

カスタムポケットベルなし:

         for (int i = 0; i < 3; ++i) {
-        for (int h = 0; h < 4; ++h) {
+                for (int h = 0; h < 4; ++h) {
                         for (int k = 0; k < 4; ++k) {

カスタムポケットベルの場合:

 .       for (int i = 0; i < 3; ++i) {
-        for (int h = 0; h < 4; ++h) {
+.       .       for (int h = 0; h < 4; ++h) {
 .       .       .       for (int k = 0; k < 4; ++k) {
于 2017-07-16T15:08:47.937 に答える