web-dev-qa-db-ja.com

Subversionで再帰的にロックを解除するにはどうすればよいですか?

Subversionのバージョン管理に問題があります。リポジトリから作業用コピーをチェックアウトし、そのすべてのファイルをロックしました。次に、ロックを解除せずに、フォルダをディスクから削除しました。

  • フォルダーがロックされているため、フォルダーをリポジトリから削除できません
  • Iがロックを再帰的に解除しようとすると、ロックを解除する必要がないと表示されます。
  • [リポジトリの参照]ビューでは、特定のフォルダーでのみロックを解除でき、フォルダーを再帰的に解除できません。

リポジトリにあるロックを解除するにはどうすればよいですか? WindowsでTortoiseSVNを使用しています。フォルダのロックを再帰的に解除するコマンドはありますか?

49
vikmalhotra

はい、分かりました。これが私のために働いたものです。

  • 作業コピーをチェックアウトする
  • 次に、Windowsエクスプローラーメニューで、TortoiseSVN->変更を確認...
  • [リポジトリの確認]ボタンをクリックします
  • すべてのファイルを選択し、右クリックしてブレークロックオプションを選択します
  • 作業コピーとリポジトリ内のコピーを削除します。出来上がり! :)
56
vikmalhotra

SVNクリーンアップを行うと、ロックも解除されます。

$ svn cleanup
34
rgubby

事前ロックセクション から

$ svn status -u
M              23   bar.c
M    O         32   raisin.jpg
       *       72   foo.h
Status against revision:     105
$ svn unlock raisin.jpg
svn: 'raisin.jpg' is not locked in this working copy

これは単に、現在の作業ディレクトリでファイルがロックされていないことを意味しますが、リポジトリレベルでまだロックされている場合は、強制的にロックを解除できます(「ロックを解除する」)

$ svn unlock http://svn.example.com/repos/project/raisin.jpg
svn: Unlock request failed: 403 Forbidden (http://svn.example.com)
$ svn unlock --force http://svn.example.com/repos/project/raisin.jpg
'raisin.jpg' unlocked.

(これはTortoiseSVN GUIを使用して行ったことです)

17
VonC

他の誰かがファイルをリモートでロックしている場合、TortoiseSVN 1.7.11を使用して次の操作を行うと、作業コピーでファイルが正常にロック解除されることがわかりました。 (vikkunの答えに似ています)

  • 作業コピーを右クリック>変更を確認
  • [リポジトリの確認]ボタンをクリックします
  • ロック解除するファイルを選択します
  • 右クリック>ロックを取得
  • [ロックを盗む]チェックボックスをオンにします
  • ロックが盗まれた後、もう一度選択します
  • 右クリック>ロック解除

作業コピー内のファイルはロック解除されるはずです。

6
Dan

Svnマシンへの管理者アクセス権があり、「svnadmin」ツールを使用できる場合を除き、最適なオプションは次のように思われます。

  1. svn checkout --ignore-externals *your_repo*を使用して問題のあるディレクトリをチェックアウトします
  2. チェックアウトされたリポジトリでsvn status --show-updatesを使用して、ロックされている可能性のあるファイルを見つけます(誰かがステータスコードの意味に関するドキュメントを見つけた場合はコメントしてください)。
  3. 2で見つかったファイルに対してsvn unlock --force *some_file*を使用します。

次のワンライナーを使用して、2および3を自動化しました。

svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force
3
Apteryx

リポジトリ管理者はロックを(再帰的に)削除して、問題のあるディレクトリ内の数百のファイルを操作できますが、svnadmin rmlocksには--recursiveオプションがないため、スクリプトによってのみ可能です。

$repopath=/var/svn/repos/myproject/;
$problemdirectory=trunk/bikeshed/
IFS=$'\n'; for f in $(Sudo svnadmin lslocks $repopath $problemdirectory \
| grep 'Path: ' \
| sed "s/Path: \///") ; \
do Sudo svnadmin rmlocks $repopath "$f" ; done

このソリューションは、スペースが含まれるファイル名で機能します。

2
Greg Rundlett

リポジトリサーバーのsvnadminツールにアクセスできる場合、この代替手段を使用してすべてのロックを削除できます(VonCによって投稿されたスクリプトに基づいて)

svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo>
2

最初に提供されたように上記からスクリプトを実行しようとすると、変数を設定しようとしたときにエラーが発生しました:./scriptname:line1:=/svn/repo/path /:No such file or directory ./scriptname: line2:= directory /:そのようなファイルまたはディレクトリはありません

最初の2行から「$」を削除しましたが、これはその後完全に機能しました。

repopath=/var/svn/repos/myproject/;
problemdirectory=trunk/bikeshed/
IFS=$'\n'; for f in $(Sudo svnadmin lslocks $repopath $problemdirectory \
| grep 'Path: ' \
| sed "s/Path: \///") ; \
do Sudo svnadmin rmlocks $repopath "$f" ; done
0
EricMG

私にとっては、ファイルを更新しようとした後、チェックサムメッセージが間違っていたため、.svn内のロックファイルを削除できませんでした。

ディレクトリ内でsvn cleanupを実行した後、次のメッセージを受け取りました。

svn:ディレクトリ '' svn: '.svn/tmp/text-base/file_name.svn-base'を 'filename.3.tmp'にコピーできません:そのようなファイルまたはディレクトリはありません

そこで、ファイルを.svn/tmp/text-baseにコピーし、名前をfile_name.svn-baseに変更しました。その後、クリーンアップと更新は正常に機能しました。

0
Greg