12

以前は OS X Leopard で SVN 1.4 を使用していましたが、すべて問題ありませんでした。数週間前、私は OS X 10.6 の新しいコピーをインストールしました。Snow Leopard に付属する SVN のバージョンは 1.6.5 です。先に進み、1.6.6 で独自のコピーを作成しました。私は組み込みのApacheサーバーを使用しており、リポジトリをローカルでホストしています。

実際に何かをコミットしようとするまで、すべてが正常に機能しているように見えました。変更をコミットしようとするたびに、次のメッセージが表示されます。

Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/svn/svn2': 409 Conflict (http://localhost)

これは古いリポジトリで発生するため、いくつかの新しいリポジトリを作成しました。同じ取引。また、システムに付属の 1.6.5 バージョンを使用してみました... 同じです。最後に、最新の安定した SVN (1.6.9) にアップグレードしようとしましたが、それでも同じ問題が発生しました。

Apache エラーは、失敗したコミットごとに次のログを記録します。

[Mon Mar 29 19:53:10 2010] [error] [client ::1] Could not MERGE resource "/svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1" into "/svn/svn2".  [409, #0]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] An error occurred while committing the transaction.  [409, #2]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] Can't open directory '/usr/local/svn/svn2/db/transactions/5-6.txn/\xeb\xa9\x0f\x1f': No such file or directory  [409, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Could not DELETE /svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1.  [500, #0]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] could not open transaction.  [500, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Can't open file '/usr/local/svn/svn2/db/transactions/5-6.txn/props': No such file or directory  [500, #2]

そしてアクセスログから:

::1 - - [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 401 401
::1 - user [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 200 188
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/vcc/default HTTP/1.1" 207 398
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/bln/6 HTTP/1.1" 207 449
::1 - user [30/Mar/2010:13:02:20 -0400] "REPORT /svn/svn2/!svn/vcc/default HTTP/1.1" 200 1172

奇妙なことに、コミットは実際に変更をコミットしますが、作業コピーはそれを認識せず、すべてがおかしなことになります。

この問題について考えられるすべてのバリエーションを Google で検索しようとしましたが、検索結果はほとんど役に立ちません。私は TortoiseSVN や特別なものを使用しておらず、コミットは新しいリポジトリで失敗するため、古いリポジトリでは問題がないことがわかっています。

どんな助けでも大歓迎です。

更新
svn.conf ファイルに autoversioning を追加しようとしました。これが私のファイルの内容です:

LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
  DAV svn
  SVNParentPath /usr/local/svn
  SVNAutoversioning on

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /usr/local/etc/svn-auth-file

  # only authenticated users may access the repository
  Require valid-user
</Location>    

更新 (解決策)

他の誰かがまったく役に立たないエラーメッセージで同じ問題を抱えている場合に備えて、これを実際の解決策で更新したかっただけです. 問題は apr および apr-util 部分にありました (scherand が示唆したように)。サブバージョンの依存関係パッケージを使用して、両方のコピーを作成していました。OS X 10.6 には独自のバージョンもあります。どちらのバージョンも 1.3.8 でした。どうやら、デフォルトのApacheインストールが使用していたバージョンを使用する必要がありました。

そこで、自分の subversion ビルドから apr および apr-util フォルダーを削除して、これらの独自のコピーを再度ビルドしないようにしました。今回は次の構成を使用して、ソースから svn を再度ビルドしました。

./configure --with-apr=/usr/bin/ --with-apr-util=/usr/bin/ --with-ssl

再度ビルドした後、apache を再起動し、新しい svn リポジトリを作成しました。問題なくチェックアウトし、変更を加え、コミットすることができました。その後、古いリポジトリを試してみましたが、それらも同様に機能しました。

助けてくれてありがとう!

4

6 に答える 6

3

私はここで非常に薄い氷の上にいます(409はあまり具体的ではありません)が、2つの質問を定式化することができます:

  1. コミット前またはコミット後のフックはありますか?
  2. 自動バージョン化」は有効になっていますか?

フックがある場合、それらにエラーが含まれていないと確信していますか? テストのためにそれらを無効にしていただけますか? 自動バージョン管理が有効になっていない場合は、テストのために有効にしていただけますか? これは次のように機能するはずです

<Location /repos>
  DAV svn
  SVNPath /var/svn/repository
  SVNAutoversioning on
</Location>

使用する場合mod_dav_svn(上記の Autoversioning へのリンクを参照)。

たぶん、これはあなたの問題に光を当てるのに役立ち、私たち(および/またはGoogle :))はそこからそれを取ることができます.

ところで: あなたが投稿したログは同じコミットのものではありませんよね? 時差がすごい!?

編集: ずっと前に見つけた場合はお詫びしますが、試してみます:COMMIT(Apache 2.0.55)でリソースをマージできませんでしたは、Googleが私のために見つけたものです:)

そこのOPには、「Apacheが使用するAPRのバージョンを指示する」と書かれています。これは、SVN をコンパイルするときに正しい APR バージョンを参照する必要があることを意味します。システム (OS X 10.6) にMacPortsを介して SVN (v1.6.9) をインストールしました。私は WebDAV や Apache をローカルでは使用していませんが、APR 1.3.12_1 をインストールしています (参考までに)。OPは、--with-apxs=/path/to/bin/apxsSVNをコンパイルするときに使用することを提案していますが、これがあなたの状況に当てはまるかどうかはわかりません(私はずっと前に推測し始めましたが、気付くかもしれません:))。

Apache が期待する APR バージョンと SVN のビルドに使用されるバージョンを確認できる可能性はありますか (たとえばsudo port installed apr、MacPorts を使用している場合、システムにどの APR バージョンが存在するかを確認するために使用できます)。

参考までに、Building Apache the Way You Want Itからの抜粋:

apxsconfigureスクリプトを使用したり、Apache ソース コードを使用したりする必要なく、モジュールを動的にコンパイルするためのスタンドアロン ユーティリティです。--includedirただし、 Apache のインストール時に定義された場所にコピーされる Apache のヘッダー ファイルが必要です 。 ただし、 Apache と同じ構成オプションでビルドされたを使用することが重要apxsです。そうしないと、Apache のさまざまなインストール場所がどこにあるのかについて、誤った仮定を行うことになります。

于 2010-04-07T06:11:53.353 に答える
1

問題が隠れている可能性がある場所について 2 つの考えがありますが、それはもちろん大雑把な推測であるため、注意してください。

一方では、ファイルのアクセス許可の問題である可能性があります。ばかげているように聞こえますが、おそらく、scherandが提案した構成ファイル、またはフック、または10.6への更新または新しいsvnバージョンの構築時に読み取り不能のままになったリポジトリ構造内のフォルダーさえあるので、私はそれを再確認します。

2 番目のアイデアは、svn の作業中の copy-client-server-repository バージョンの互換性を確認することです。Subversion の関係者は、 1.51.6の両方が 1.4 とのリポジトリ レベルでの互換性を壊さないことを誓います (作業コピーではそうしていますが)。しかし、スタック全体のフォーマットが一貫していることを確認することは問題ありません。その間、構築した apache ライブラリが 10.6 に付属する apache 2.2.11 と互換性があることを確認してください (繰り返しますが、互換性があるはずですが、わかりません)。

そして最後に、幸運を祈ります。

于 2010-04-07T11:43:25.023 に答える
1

最初にベースラインを確立します。Snow Leopard (10.6.3) のストック インストールで、まさに私が行ったことを次に示します。

次の内容で「/etc/apache2/other/svn.conf」を作成しました。

LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
    DAV svn
    SVNParentPath /usr/local/svn
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /usr/local/svn/htpasswd
    Require valid-user
</Location>

サブバージョン フォルダとリポジトリ「test」を作成しました。

sudo mkdir /usr/local/svn
sudo svnadmin create /usr/local/svn/test
sudo chown -R _www:_www /usr/local/svn
sudo htpasswd -cb /usr/local/svn/htpasswd testuser testpass

通常のユーザー、ホーム ディレクトリから:

macmini:~ jclark$ mkdir Checkout && cd Checkout
macmini:Checkout jclark$ svn --username testuser checkout http://localhost/svn/test
Authentication realm: <http://localhost:80> Subversion repository
Password for 'testuser':
Checked out revision 0.
macmini:Checkout jclark$ cd test && touch test.txt && svn add test.txt && svn commit -m 'test' test.txt
A         test.txt
Adding         test.txt
Transmitting file data .
Commited revision 1.
macmini:test jclark$

これで、すべてが正常に機能した場合、apache によって提供される作業ストック 1.6.5 サブバージョン リポジトリができたことになります。そうでない場合は、Apple が提供する svn バイナリ/ライブラリと独自の (macports など) を混在させている、パーミッションに問題がある可能性があります。Appleが提供するバイナリを使用していることを確認してください。Apple はソースをわずかに変更しており、過去に「ポート」と「ストック」を混在させたときに互換性の問題に遭遇しました。権限に関しては、apache はユーザー _www、グループ _www として実行されます。すべてのファイルとディレクトリがそのように所有されていることを確認し、svnadmin などを使用して svn リポジトリを直接操作するたびに更新することを忘れないでください。

それが機能しているので、'svn2' リポジトリを /usr/local/svn に戻し (まだ行っていない場合)、どこかでクリーン チェックアウトを行い、テスト コミットを試みます。

それでも問題が発生する場合は、リポジトリのアップグレードを試みてください。

sudo svnadmin upgrade /usr/local/svn/svn2
sudo chown -R _www:_www /usr/local/svn/svn2

チェックアウト/コミット テストを繰り返します。

最後の手段として、リポジトリを再度ダンプしてロードします。

sudo svnadmin dump /usr/local/svn/svn2 > /tmp/svn2.dump
sudo svnadmin create /usr/local/svn/svn3
sudo svnadmin load /usr/local/svn/svn3 < /tmp/svn2.dump
sudo chown -R _www:_www /usr/local/svn/svn3

今度は /svn/svn3 でチェックアウト/コミット テストを繰り返します。

固定リポジトリをお楽しみください...うまくいけば:)

アップデート

Subversion コマンド ライン クライアントにバグがある可能性があります。実行後:

mkdir \!vcc && touch \!vcc/default
svn add \!vcc && svn commit -m 'test'
svn log

svn log の出力 (少なくとも私にとっては) は何もないことに注意してください。Tortoise からの Svn ログに問題はありません。これは、(上記のセットアップのように) サーバーが正しく機能していることを示しています。

もう 1 つの試みは、「http」ではなく「file」を介してリポジトリにアクセスすることです。リポジトリ全体をホーム ディレクトリまたはユーザーが所有者である場所にコピーし、チェックアウト (つまり、svn checkout /Users/Shared/svn/svn2) してコミットを試みます。

于 2010-04-09T06:14:50.297 に答える
0
chown -R apache:apache svn

chmod -R 770 svn
于 2010-10-18T20:57:03.747 に答える
0

これにより、競合が解決されました。ローカルファイルのバックアップを作成し、サーバーからすべてをプルしました。その後、バックアップ ファイルを挿入してプッシュしても、409 競合エラーは再び表示されなくなりました。

よろしく、 ケビン

于 2014-05-29T18:09:43.163 に答える
0

OSX 用のバージョンの SVN クライアントを試しましたか? それはあなたの問題の解決策ではありませんが、おそらく代替手段です。私と私のチームは、SVN と OSX が互いに適切に通信するためにいくつかの問題を抱えていたため、代替クライアントを探しに行き、バージョンがうまく機能しました。

于 2010-03-30T18:04:38.293 に答える