質問

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

Googleで調べてみると、 2005 年のブログ投稿 これは、Subversion がファイルのアクセス許可を保存しないことを示しています。パッチとフック スクリプトがリストされています (URL が 1 つだけ存在します)。3 年経った今でも、Subversion はファイルのアクセス許可を保存していません。これを解決するにはフックが唯一の方法なのでしょうか?(私はフックを使用したことがなく、むしろ Subversion にネイティブなものを使用しています。)

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

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

両方 として そして パッチ そのブログ投稿からはアップされているようです (そして公式 SVN リポジトリでホストされています)。それは良いことですが、コア バージョンでそのようなメタデータの処理がすぐにできるようになるとは思えません。

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

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

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

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 の権限が設定された実行可能ファイルを含むリポジトリを設定している人々を想像してください。

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

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

多くの回答では、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 が実行権限を持って戻ってくる

@モアチリ:

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

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

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

グラハム svn 権限を保存しません。唯一の選択肢は、呼び出しをラップすることです svn スクリプトで。スクリプトは呼び出す必要があります svn 引数を使用して、後でアクセス許可を設定します。環境によっては、スクリプトを呼び出す必要がある場合があります。 svn そしてあなたのを微調整してください PATH 確実に呼び出されるようにするためです。

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

これを行うためのバッチ ファイルを作成しました。Subversion での実際のサポートを希望しますが...

使用を検討してください svn lock 他の人がファイルに書き込むことを禁止します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top