56

svnsync の使用

$ svnsync --non-interactive sync ${REPO}

プロセスの中止後、再試行を伴うこのエラー メッセージが表示されました

Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'  
...  
Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'   
svnsync: Couldn't get lock on destination repos after 10 attempts  

この問題を解決する方法はありますか?

4

6 に答える 6

65

実際、svnsync (v1.7 以降) には、ロックを「盗む」ことができる機能が組み込まれています。

svnsync help sync

ショー:

--steal-lock             : Steal locks as necessary.  Use, with caution,
                           if your mirror repository contains stale locks
                           and is not being concurrently accessed by another
                           svnsync instance.

そして、それを実行すると、次のように表示されます。

Stole lock previously held by '[hostname]'

つまり、結局プロプデルは必要ありません

于 2013-04-17T07:02:30.460 に答える
54

同期中の失敗から残ったリモート サイトの svn コマンド ラインを使用して、リモート リポジトリのロック プロパティを削除する必要があります。

svn propdel --revprop -r0 svn:sync-lock file:///path/to/the/repository
于 2010-11-02T12:37:33.887 に答える
11

技術的には、宛先がローカルである可能性があるため、プロパティを削除する必要があるのは宛先リポジトリであり、必ずしもリモート リポジトリではありません。したがって、この特定の質問については:

svn propdel --revprop -r0 svn:sync-lock ${REPO}
于 2011-12-23T06:48:00.557 に答える
3

ロックの存在を確認するには (エラーは明らかにそれを示していますが)、proplist を次のように実行します。-verbose

svn pl --revprop -v -r 0 file:///svn/slave

次に、必要に応じてプロップを削除します!

于 2013-10-14T05:44:04.830 に答える
3

ロックを削除するとうまくいきました。ただし、アカウントのロックを解除するために使用するアカウントのユーザー名とパスワードを送信する必要があったため、少し異なるコマンドを使用する必要がありました。

svn pdel --revprop -r 0 --username ??? --password ??? svn:sync-lock file:///path/to/the/repository

また、リポジトリが存在するドライブからこのコマンドを実行する必要がありました。(リポジトリが d: にある場合は、コマンドを実行する前にコマンド プロンプトで d: に変更します)

ユーザー名とパスワードを入力する前に、コマンドを実行すると、次のエラーが発生しました。

revprop change blocked by pre-revprop-change hook (exit code 255)

フック ファイルを見つけて開いたところpre-revprop-change、必要な変更を加えることができる特定のユーザー名のみをリストするコードが含まれていました。上記のコマンドでそのユーザー名とパスワードを使用すると、フックが削除されました。

于 2011-06-09T21:19:05.810 に答える
2

問題を解決するには、2 つのことを行う必要があります。1 つは、上記のようにロックを削除します。次に、pre-revprop-change.tmpl ファイルを編集して空にし、実行可能にする必要があります。Linux/Unix/Mac では chmod +x を使用しますが、Windows ではファイル名を pre-revprop-change.bat に変更します。この後、ダンプ ファイルをリポジトリにロードして、必要な場所にミラーリングできます。

于 2011-11-03T16:14:52.843 に答える