41

ファイルのアクセス許可をリポジトリにどのように保存しますか? いくつかのファイルは、サードパーティのプログラムが破棄するのを防ぐために読み取り専用にする必要がありますが、リポジトリからチェックアウトした後、読み取り/書き込みに設定されます。

Google で調べたところ、2005 年のブログ投稿で、Subversion はファイルのアクセス許可を保存しないと書かれていることがわかりました。パッチとフック スクリプトがリストされています (1 つの URL のみが存在します)。3 年経った今でも、Subversion はファイルのパーミッションを保存しておらず、これを行う唯一の方法はフックですか? (私はフックをしたことがなく、むしろ Subversion にネイティブなものを使用しています。)

4

12 に答える 12

36

SVN には、ファイルと共にメタデータ (プロパティ) を保存する機能があります。プロパティは基本的に単なるキーと値のペアですが、「svn:executable」のようないくつかの特別なキーがあります。このプロパティがファイルに存在する場合、Subversion はファイルをチェックアウトするときにそのファイルのファイル システムの実行可能ビットを設定します。これがまさにあなたが探しているものではないことはわかっていますが、それで十分かもしれません(私にとってはそうでした)。

行末 (svn:eol-style) と MIME タイプ (svn:mime-type) のプロパティは他にもあります。

于 2008-09-11T11:25:17.140 に答える
14

SVN にファイルのアクセス許可を保存するネイティブな方法はありません。

asvnとそのブログ投稿のパッチの両方がアップされている (そして公式の SVN リポジトリでホストされている) ようです。

SVN には長い間、シンボリック リンク実行可能ファイルを特別に処理する機能がありましたが、どちらも Win32 では適切に動作しません。このような移植性のない機能がもう 1 つあることに息をのむことはありません (ただし、既存のメタデータ システムの上に実装するのはそれほど難しくありません)。

ファイルのアクセス許可を手動で調整するシェル スクリプトを作成し、それをリポジトリに配置することを検討します。

于 2008-09-11T11:23:52.493 に答える
11

考えられる解決策の1つは、コードの残りの部分と一緒にチェックインし、ビルドプロセスの最初のステップとして実行されるスクリプトを作成することです。

このスクリプトは、コードベースのコピーを実行し、特定のファイルに読み取り権限を設定します。

理想的には、スクリプトは単純な入力ファイルからファイルのリストを読み取ります。これにより、保守が容易になり、他の開発者がどのファイルが読み取り専用としてマークされているかを理解しやすくなります。

于 2008-09-11T10:23:29.503 に答える
4

これは、以前の回答ではまだ完全に述べられていないためです。ただし、ゾンビ化したスレッドを復活させるのは嫌いです。

SVN の許可サポートを追加するには、複数の OS と許可タイプ、NFS、POSIX、ARWED、および RACF に対応する必要があるため

これにより、SVN が肥大化し、NFS や POSIX などの競合するアクセス許可タイプと衝突する可能性があり、エクスプロイトやセキュリティの脆弱性が発生する可能性があります。

いくつかの回避策があります。pre-commit、post-commit、start-commit がより一般的に使用され、Subversion システムの一部です。ただし、好きなプログラミング言語でアクセス許可を制御できます。

私が実装したシステムは、私がパッケージャーと呼んでいるもので、作業コピーのコミットされたファイルを検証し、メタデータ ファイルを解析します。メタデータ ファイルは、ファイル/フォルダーに必要な既定のアクセス許可と、必要な変更を一覧表示します。

Owner, Group, Folders, Files
default: <user> www-user 750 640
/path/to/file: <user> non-www 770 770
/path/to/file2: <user> <user> 700 700

これを拡張して、自動移動、名前変更、アルファ、ベータ、リリース候補、リリースなどのタイプ別のリビジョンのタグ付けなどを許可することもできます

パーミッションが付与されたリポジトリファイルをチェックアウトするクライアントをサポートする限り。パッケージのインストーラーを作成し、それをリソースとして提供することを検討することをお勧めします。

root:www-user 4777 の権限が設定された実行可能ファイルを含むリポジトリを設定する人々を想像してみてください。

于 2012-02-24T03:13:08.180 に答える
3

多くの回答では、svn はファイルのアクセス許可を保存しないと述べています。これは本当かもしれませんが、次の手順を実行するだけで、実行権限の問題なしで dll ファイルを解決できました。

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. SVN更新
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m "dll を削除してアクセス許可を修正"
  6. mv ../badpermission.dll .
  7. svn は badpermission.dll を追加します
  8. svn commit badpermission.dll -m "dll を追加してパーミッションを修正"
  9. rm badpermission.dll
  10. SVN更新
  11. badpermission.dll が実行権限とともに戻ってくる
于 2011-11-21T15:25:23.290 に答える
3

これは、UNIX スタイルのファイル許可を正しく処理する SVN パッチの更新されたリンクです。私は fedora12 でテストしましたが、期待どおりに動作するようです:

/usr/bin/asvn に保存し、権限を正しく処理する必要がある場合は、svn コマンドの代わりに asvn を使用します。

于 2010-06-11T02:13:57.053 に答える
1

@morechilli:

私の以前の投稿のasvnラッパーとOPの投稿のブログは、あなたが提案していることをしているようです。ただし、単一の外部ファイルではなく、対応するファイルのリポジトリ プロパティにアクセス許可を格納します。

于 2008-09-11T11:28:54.087 に答える
1

mtree ユーティリティ (FreeBSD にはデフォルトで含まれています) を使用してパーミッション マップを生成し、マップをリポジトリに保存し、前述のように、最初のステップとしてマップから適切なファイル パーミッションを復元するスクリプトを実行することをお勧めします。ビルドプロセス。

于 2010-07-17T18:54:20.890 に答える
0

ロックしてもこの問題は解決しません。ロックすると、他のユーザーがファイルを編集できなくなります。これは、ビルドプロセスの一部として実行されるサードパーティのアプリケーションであり、ファイルに書き込もうとします(ファイルを変更します)。これにより、ビルドプロセスが中断されます。したがって、ファイルを読み取り専用としてマークするだけのファイルをプログラムが変更しないようにする必要があります。その情報をリポジトリに保持し、チェックインやブランチなどに渡って伝えたいと思います。

于 2008-09-11T10:08:44.123 に答える
0

グラハム、svn権限を保存しません。唯一のオプションは、呼び出しをsvnスクリプトでラップすることです。スクリプトはsvn引数を指定して呼び出し、後でアクセス許可を設定する必要があります。環境によっては、スクリプトを呼び出して、スクリプトが確実に呼び出されるようにsvn微調整する必要がある場合があります。PATH

ファイルと権限のリストをリポジトリ自体にチェックインさせるというmorechilliのアイデアがとても気に入っています。

于 2008-09-11T10:28:44.810 に答える
0

これを行うためのバッチ ファイルを作成しました。ただし、Subversionでの実際のサポートを好むでしょう...

于 2008-09-11T11:12:34.267 に答える
-6

svn lock他のユーザーによるファイルへの書き込みを禁止するために使用することを検討してください。

于 2008-09-11T09:49:11.597 に答える