1

私たちのリポジトリでは、異なる OS のユーザーがアクセスできます。それらの一部、通常は Windows ユーザーは、すべての種類のファイルを実行可能ファイルとしてチェックインしますが、これは Unix ユーザーにとって苦痛です。

svn:executable「設定するのを忘れた」と「実際には実行可能ではない」を区別するのではなく、ファイル上に存在するか存在しないかによって実行可能ビットが決定されるのは、Subversion の設計上の欠陥だと思います。

とにかく、これを社会的ではなく技術的に解決する方法はありますか? コミット フックか、それとも広く普及している Windows サブバージョン クライアント (理想的には Eclipse) の構成エントリでしょうか。

4

3 に答える 3

2

pre-commit フックを使用してファイル名を確認し、ファイル拡張子に基づいて実行可能フラグを変更します。

http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.reposadmin.create.hooks

于 2013-06-28T08:01:12.643 に答える
0

「設定するのを忘れた」と「実際には実行可能ではない」を区別するのではなく、ファイルに 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します。これを使用して、ユーザーにファイルの設定を強制することもできます。たとえば、ディレクトリ内またはで終わるすべてのファイルにこのビットが設定されていることを確認します。私たちにとって、このビットが設定されるべきときに設定されていないことが問題です。いいえ、このビットが設定されているわけではなく、設定されるべきではありません。LFsvn:eol-styleCRLFsvn:executablebin*.sh

ただし、このフックにはDon't set this property という記述はありません。ただし、それが重要な場合は、この pre-commit フックを自由に使用して変更できます。

于 2013-06-28T12:22:46.587 に答える
0

Precommit フックを使用します。precommit フック内で、SVNLook を使用してファイル名を取得し、拡張子部分を切り取り、制限する拡張子のタイプに基づいて、無効化されたファイルについてユーザーにメッセージを表示します。

于 2013-06-28T10:36:15.723 に答える