「設定するのを忘れた」と「実際には実行可能ではない」を区別するのではなく、ファイルに svn:executable が存在するか存在しないかによって実行可能ビットが決定されるのは、Subversion の設計上の欠陥だと思います。
Windows では、ファイルのサフィックスによって実行可能かどうかが決まります。Windowssvn:executable
では、ファイルを配置しても違いはありません。なぜ Windows ユーザーがバッチ ファイルに対してこれを行っているのか理解できません。それは Unix の人々の心を混乱させるだけです。
問題は、Unix がファイルの実行可能性を判断する際にファイル許可を使用することです。実行可能ファイルは何とでも呼ばれる可能性があり、実行可能ファイルにこの実行許可ビットが設定されていることを除いて、それを特定する簡単な方法はありません。
Subversion はsvn:executable
、ファイルのチェックアウト時にこのビットを設定するかどうかを決定するためにのみプロパティを使用します。Windows では、foo.bat
このビットが設定されているかどうかは問題ではありません。実行可能です。Unix では、設定svn:executable
は単純に権限をfoo
ではrwxr-xr-x
なく にしrw-r--r--
ます。
さらに奇妙なことに、Subversion が Unix ユーザーに非実行ファイルの実行を強制しているように聞こえます。私に関する限り、リポジトリ内のすべてのファイルがsvn:executable
それらにある可能性があります。そのプログラムが何をしているのかわからない限り、プログラムが実行可能であっても、プログラムをむやみに実行するつもりはありません。
いいえ、Windows と Unix の間の本当の問題はファイル サフィックスです。本当の痛みはそこにあります。Windows でシェル スクリプトを作成した場合svn:executable
、そのファイルを設定しても、Unix では実行されません。なぜなら、Windows はそれらのCRLF
行末を付け、Unix はそれらを詰まらせるからです。
プロパティがファイルに設定されていることを確認するために使用できるpre-commit フックがあります。これを使用して、ユーザーにシェル スクリプトと Makefile に = を設定させたり、Windows バッチ スクリプトに = を設定させたりsvn:eol-style
します。これを使用して、ユーザーにファイルの設定を強制することもできます。たとえば、ディレクトリ内またはで終わるすべてのファイルにこのビットが設定されていることを確認します。私たちにとって、このビットが設定されるべきときに設定されていないことが問題です。いいえ、このビットが設定されているわけではなく、設定されるべきではありません。LF
svn:eol-style
CRLF
svn:executable
bin
*.sh
ただし、このフックにはDon't set this property という記述はありません。ただし、それが重要な場合は、この pre-commit フックを自由に使用して変更できます。