2008-09-11 40 views
39

ファイルアクセス権をリポジトリにどのように格納しますか?いくつかのファイルは、第三者のプログラムが破棄されるのを防ぐために読み取り専用にする必要がありますが、リポジトリからチェックアウトした後は、読み書き可能に設定されています。Subversionリポジトリにファイルアクセス権を保存する

私はgoogleを見て、blog post from 2005にSubversionがファイル許可を保存していないことがわかりました。パッチとフックスクリプトがリストされています(ただ1つのURLしか存在しません)。 3年後、Subversionはファイルのパーミッションを保存せず、この問題を解決する唯一の方法です。 (私はフックを行わず、むしろ、Subversionのにネイティブであるものを使用しないました。)

+1

しかし、その答えは今日まで同じです。 + xを除くSVNファイルにchmodを変更する方法はありません。 gitで可能ならばさまよう – confiq

+1

@confiq gitで可能です。実際には、権限のみを変更する変更をコミットできます。しかし、私はあなたがコミットをsvnにプッシュすると何が起こるのか分かりません:) –

答えて

9

一つの可能​​な解決策は、あなたのコードとされ、残りのでチェックスクリプトを書くことであろう最初として実行されますあなたのビルドプロセスの一歩。

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

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

+0

サプライズ:Subversionはあなたがコミットするときに実際に*変更*パーミッションのようです:( –

-6

ファイルへの書き込みから他人を許可しないようにsvn lockの使用を検討してください。

0

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

0

グラハム、svnはアクセス許可を格納しません。あなたの唯一の選択肢は、svnにあなたのコールをラップすることです。スクリプトは、引数を指定してsvnを呼び出し、その後にアクセス権を設定する必要があります。環境によっては、スクリプトsvnを呼び出して、PATHを調整して呼び出されるようにする必要があります。

私は、リポジトリ自体にファイルとアクセス権のリストをチェックしてみると、それほど気に入っています。

0

私たちはこれを行うためにバッチファイルを作成しました。しかし、実際のサポートを転覆でより好むだろう...

13

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

ブログ投稿のasvnthe patchはどちらもアップしている(公式のSVNリポジトリでホストされている)のですが、それは良いことですが、いつでもコアバージョンでこのようなメタデータ処理を行うとは思いませんすぐに。

SVNには、特に長い間、symbolic linksexecutablesを処理する機能がありましたが、どちらも正しく動作していません。私はそのような移植不可能な機能のために息を止めませんでした(しかし、既存のメタデータシステムの上に実装するのは難しくありません)。

ファイルを手動で調整するためのシェルスクリプトの作成を検討しますリポジトリに格納します。

+0

asvnの正式版作業ディレクトリ(非常にノイズの多い出力)に多数の無視されたファイルを処理するには、http://mail-archives.apache.org/mod_mbox/subversion-dev/201005.mbox/%3C4BE1A4F0というパッチを修正してください。 [email protected]%3E;何らかの理由でそれでもメインラインリポジトリには届かなかった – Nickolay

+0

上記のasvnリンクが[asvn](https://svn.apache.org/repos/)に変更されました。 asf/subversion/trunk/contrib/client-side/asvn)上記のリードに続いて、私はもっとうまくいくかもしれないいくつかの選択肢を見つけました:[http://fsvs.tigris.org/](http://fsvs.tigris .org /)とおそらく:[https://trac.dass-it.de/pub/wiki/dasscm](https://trac.dass-it.de/pub/wiki/dasscm) –

36

SVNには、ファイルとともにメタデータ(properties)を保存する機能があります。プロパティは基本的にキーと値のペアですが、 'svn:executable'のような特別なキーがあります。このプロパティがファイルの場合、Subversionはファイルをチェックアウトするときにファイルの実行可能ビットを設定します。私はこれが正確にあなたが探しているものではないことを知っているが、それだけで十分かもしれない(私のためだった)。

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

+2

私は偶然、それがあったのでこれを投票した元のドキュメントへのリンク。しかし、この回答は、このようにファイルの読み取り/書き込みアクセス権を設定できることを暗示しているように思われるので、私は退屈させたいと思っています。 – MarkHu

1

@morechilli:

私の以前のポストからasvnラッパーとOPのポストでのブログはあなたが示唆されているものをやっているようです。単一の外部ファイルではなく、対応するファイルのリポジトリプロパティにアクセス権を格納します。

3

Thisは、UNIXスタイルのファイルアクセス権を正しく処理するSVNパッチの更新リンクです。

私はちょうどそれが/ usr/bin/asvnを保存し、正しく処理される権限が必要な場合は、svnコマンドの代わりにasvnを使用しました。

+0

ubuntu 12.04でも動作するようです。ただし、サンドボックスを更新するときに、権限がないリポジトリ内のファイル(またはsudoを使用して作成または更新した可能性があるため)がある場合は、これらのアクセス権を設定するプロシージャ** sudo ** asvn updateを実行しない限り、最後にコミットされた元のワークエリアを再現することはできません。 –

1

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

3

多くの回答は、svnにファイルのアクセス許可が保存されていないと述べています。これは本当かもしれないが、私は単純にこれらのステップで実行権限の問題もなくdllファイルを解決することができました:

  1. のchmod 755 badpermission.dll
  2. MV badpermission.dll ../
  3. のsvn更新
  4. SVNのrm badpermission.dll
  5. のsvnは
  6. MV ../badpermission.dllを "権限を修正するDLLを削除する" badpermission.dll -mをコミットします。
  7. のsvnはbadpermission.dll追加
  8. のsvnコミットbadpermission.dll -m
  9. のrm badpermission.dll
  10. のsvn更新
  11. badpermission.dllがバックで実行権限を来る "の権限を修正するために戻ってDLLを追加"
+5

上記はほとんど動作しますが、単にsvn propset svn:executable on your-pesky-file.extを実行するよりも効率的ではありません。これは何年も前からありました(これはhttps:// www。 google.com/search?q=svn+chmod検索) オープニングの 'chmod 755'でのグループ書き込み権限の削除が「固執しない」ため、私はほとんど言っています。あなたのローカルサンドボックスではそうだと思うかもしれませんが、ファイルをもう一度チェックアウトすると、SVNがg + wに設定されていることがわかります。 – MarkHu

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

関連する問題