web-dev-qa-db-ja.com

gitがファイルの末尾の空白を気にするのはなぜですか?

ファイルに何を入れるかを心配するために使用しているVCSはどのようなものですか?ここでのポイントがわかりません。 gitバージョン管理または構文チェッカーですか?

34
Bjorn

これは、Gitの非常に一般的な用途の1つが、パッチシリーズを電子メールで送信することであるためです。末尾のスペースは電子メールで問題を引き起こすため、通常は削除されます。つまり、パッチを電子メールで送信して適用する過程で、末尾のスペースは失われます。これは、レポジトリの行に末尾のスペースがあるが、適用されているパッチにはない場合、パッチを適用するときに、誤った競合や意図しない追加の変更が発生する可能性があることを意味します。

この事前コミットフックは、以前はデフォルトで有効にされていましたが、現在は有効ではありません。私は覚えていなかったようです。 デフォルトで意図的に有効にされたことはありません 。他の人が指摘しているように、これは常にサンプルの事前コミットフックでした。以前は実行ビットを与えないことで無効にされていましたが、これはかなり簡単に台無しになる可能性があります(たとえば、WindowsのCygwinで実行)ので、新しいバージョンのGitでは( 1年以上前から) )サンプルはpre-commit.sampleという名前で無効になっています。動作が気に入らない場合は、.git/hooks/pre-commitを削除または移動して、このフックが実行されないようにすることができます。また、Gitをより新しいものに更新する必要があります。これは、かなり前から修正されているためです。

31
Brian Campbell

Gitはまったく気にしません。 example pre-commitフックは、フックの記述方法のデモンストレーションとして空白チェックを実行しますが、デフォルトではenabledではありません。何かを実行するには、実行可能にする必要があります。

10
hobbs

どうして?末尾の空白は簡単に失われるため、誤った変更が行われ、パッチが適用されません(空白が変更されたため)。それはプログラミングスタイルに準拠することの問題です。

とはいえ、それはpre-commithook の質問です。編集、無効化、または末尾の空白(おそらく一部の種類のファイルのみ)をエラーと見なされないように構成できます。


pre-commitフックはデフォルトで無効である必要がありますただし、実行可能権限をオフにすることで、それらをインストールするために使用されていた古いバージョン(1.6.0より前)はオフになりました。これは、FATなどのUNIX以外のファイルシステムでは機能しない可能性があります。 1.6.0以降、「。sample」サフィックスを追加することにより、インストールがオフ(無効)になります。

4
Jakub Narębski

--no-verifyスイッチを使用してこれをバイパスできます。 http://git-scm.com/docs/githooks を参照してください。

3

Hobbsが書いたように、サンプルのpre-commitフックは、末尾の空白をチェックしている可能性があります。無効にするには、.git/hooksを調べて、そこにあるファイルが実行可能でないことを確認します。

フックが有効になっている可能性のある1つの方法は、FATフォーマットのフラッシュドライブでリポジトリを移動している場合に実行可能ビットが設定されている可能性があることです。

3
Phil

優れたプログラミングスタイルが何であるかをVCSが教えようとすることは問題ではありません。末尾の空白はVCSによる無用な変更と見なされる可能性があるため、末尾の空白が彼らにとって悪いことであるのは問題です。

どうして?

次のような行があると想像してください。

puts "Hello World"^M^M^M

各「^ M」は末尾の空白です(簡略化するためにそこに置いてください)。

別の開発者が誤ってこれを次のように変更します。

puts "Hello World"^M^M

VCSはこれを変更と見なします。コードにまったく干渉しないが、変更する役に立たないもの。この種の変更は、VCSによって競合として指摘されることもあります(これは可能な限り回避する必要があります)。その上、それは必要なしにあなたの歴史を汚染します。

1
YuriAlbuquerque