あなたが見ているのは、誰かがWindowsでファイルを編集し(おそらくメモ帳を使用して)、ファイルをSubversionリポジトリにコミットしていることです。これにより、Makefileとシェルスクリプトを台無しにする行末が追加されます。
幸いなことに、優れたプログラムエディタ(つまり、メモ帳ではない)は、さまざまなファイルの行末が異なることを理解でき、行末を保持し、変換することさえできます。これは、UnixシェルスクリプトまたはMakefileを作成しているWindowsマシンで作業している人が、理論的には、表示されているものを排除できることを意味し^M
ます。開発者には、この問題を処理するEclipseなどのIDEを使用するか、少なくともVIMやNotepad ++などのプログラムエディターを使用することをお勧めしますが、多くの場合、メモ帳を使用してすべてを台無しにするのが好きです。
あなたがしなければならないことは、開発者に正しいプログラミング環境を使用し、ファイルを台無しにするのをやめるための適切なインセンティブを与えることです。
ここにいくつかの推奨事項があります。
開発者のすべての椅子に高圧線を配線して、メモ帳を使用してファイルを編集するたびに、すぐに1,000ボルトの衝撃を与えることができます。
Subversionの組み込みメカニズムを使用して、これらのファイルの行末を処理できます。
最初のアプローチは非常に魅力的ですが、後者のアプローチを強くお勧めします。svn:eol-style
Subversionには、ファイルで終わる正しい行を強制的に自動的に作成できるというプロパティがあります。たとえば、に設定snv:eol-style
したLF
場合、ファイルはコミットまたはチェックアウトされたときに常に正しい改行行末を持ちます。このように、これらの行末を削除するために後処理を行う必要はありません。問題が解決しました。
唯一の問題は執行の問題です。開発者が新しいファイルを作成したり、古いファイルを編集したりする場合は、プロパティもsvn:eol-style
正しい値に設定する必要があります。Subversionにはこれを実行できるauto-propメカニズムがありますが、開発者がそれを使用することを確認する方法はありません。
このプロパティがアタッチされていない場合、ファイルのコミットを拒否できるpre-commitフックを使用します。このフックスクリプトを設定して、このタイプの行末を必要とするファイル(Unixスクリプト、Makefilesなど)と影響を受けないファイル(Javaソースコード、XMLなど)のみを設定できるようにする必要があります。 。
私のpre-commitフックは、セットアップと使用がかなり簡単です。制御ファイルを使用して、必要なものを設定します。例えば:
[PROPERTY All Unix Scripts must have "svn:eol-style" set to "LF"]
match = .\(sh|pl|py|ksh|csh)$
property = svn:eol-style
value = LF
type = string
[PROPERTY All Makefiles must have "svn:eol-style" set to "LF"]
match = [Mm]akefile
property svn:eol-style
value = LF
type = string
これにより、開発者は最初に正しい行末のファイルをチェックインするので、後処理スクリプトを実行する必要はありません。これにより、展開プロセスが大幅に簡素化され、エラーの最大の原因の1つが排除されます。