1

Linux マシンで Subversion を使用しようとしています。リポジトリは Microsoft sbs2008 サーバー上にあります。(Microsoft Windows 7 マシンからリポジトリにアクセスできます。) 動作させる方法を教えてもらえますか?

これが私がやったことです。

# sudo mount -t cifs -v -o credentials=~/Files/server-mount-credentials,uid=richard,nocase,nounix,nosuid  //sbs2008/local ~/Files/server-mount/

# svn commit -m ""

Adding         file1
Sending        file2
Transmitting file data ........svn: Commit failed (details follow):
svn: database is locked

トレースは次を示します。

open("/home/rdelorenzi/Files/server-mount/svn_repository/db/rep-cache.db", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 12

...

_llseek(12, 162816, [162816], SEEK_SET) = 0
read(12, "\n\0\0\0\20\1 \0\1 \1N\1|\1\252\1\330\2\6\0024\2b\2\220\2\276\2\354\3\32"..., 1024) = 1024

_llseek(12, 100352, [100352], SEEK_SET) = 0
read(12, "\n\0\0\0\24\0i\0\0i\0\227\0\305\0\363\1!\1O\1}\1\253\1\331\2\7\0025\2c"..., 1024) = 1024
_llseek(12, 52224, [52224], SEEK_SET)   = 0
read(12, "\n\0\0\0\24\0k\0\0\231\0\307\0\365\1#\1Q\1\177\1\255\1\333\2\t\0027\2d\2\222"..., 1024) = 1024

fcntl64(12, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbf8e15e8) = 0
fcntl64(12, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbf8e15e8) = -1 EACCES (Permission denied)
4

4 に答える 4

3

ネットワーク共有経由で Subversion リポジトリをマウントしないでください。確実に動作しません。

file:// アクセスは、ローカルのシングル ユーザー アクセスのみを目的としており、特にテストとデバッグに使用されます。リポジトリを共有したい場合は、適切なサーバーをセットアップする必要があり、思ったほど難しくはありません。サーバーの選択と設定に関するガイドラインについては、「リポジトリへのアクセス」というセクションをお読みください。[リンク]

David W が指摘しているように、SVN サーバーを実行する必要があります。

于 2012-03-14T22:44:24.107 に答える
2

Windows マシンを制御できますか? ポート 3690 はブロックされていませんか? svnserveWindowsマシンでサーバーを使用しないのはなぜですか。その後、ファイル システムをマウントする必要はありません。

Windows マシンで:

 c:\> svnserve -r C:\path\to\your\repository -d

Linux ボックスで

$ svn co svn://sbs2008/trunk

もう 1 つの可能性は、Windows ボックスでVisualSVN サーバーを使用することです。次に、Apache の httpd を使用してリポジトリにアクセスできます。

$ svn co http://sbs2008/svn/trunk

VisualSVN Server はオープン ソースではありませんが、Windows Active Directory 接続などの高度な機能を必要としない限り無料です。

于 2012-03-14T20:38:43.853 に答える
1

良い。mountコマンドとパラメーターがわからず、理解できないと想像してみましょう。

この場合、私はただ尋ねます:

正確に何をしたいですか?リポジトリのファイルを直接操作します (リポジトリ内のファイルではなく、のファイル)?! どのような理由で?!

Subversion にはClient-Server アーキテクチャがあり、クライアントはサーバーと通信し、物理リポジトリ バックエンドの処理の詳細をクライアントから隠します

Subversion のネットワーク レイヤーは抽象化されています。つまり、Subversion クライアントは、動作しているサーバーの種類に関係なく、同じ一般的な動作を示します。Apache HTTP サーバーで HTTP プロトコル (http://) を使用する場合でも、svnserve でカスタム Subversion プロトコル (svn://) を使用する場合でも、基本的なネットワーク モデルは同じです。

クライアント人間として、クライアントとサーバーのペアによって提供されるRepository論理表現であるWorking Copyの Repository の物理表現(リポジトリの状態) を操作します。クライアントプログラムとしてのsvn-clientは、リポジトリサーバーと通信し、リポジトリを処理し、サーバーアクセスプロトコルによって公開されたものを使用し、サーバーは後で可能な限り最下層でリポジトリを操作します(読み書きファイル)

于 2012-03-14T20:09:42.027 に答える
0

これは答えではなく、熟考するためのいくつかの質問です。

なぜこれがうまくいくと思いますか?cifs ファイル システム ドライバは、最悪の場合、ファイルの読み取りしかできないような方法で NTFS ファイル システムを公開します。cifs ドライバーによって公開される機能には、NTFS エンドに対応する機能が必要です。

そのため、SVN によって必要な機能が実装されていないか、サポートされていない場合、このような問題が発生する可能性があります。

cifs のドキュメントを見て、既知の制限や、おそらくより多くの機能を提供するためにドライバーを調整する方法を確認することをお勧めします。

もちろん、エクスポートされた NTFS ファイル システムの ACL を確認する必要があります。この操作が cifs ドライバーでサポートされていて、動作するはずである場合でも、NTFS ファイル システムの所有者が間違っていたり、読み取り専用ビットが設定されていたりすると失敗します。

于 2012-03-14T17:02:52.573 に答える