2010-07-01 51 views
45

我在Subversion中遇到版本控制問題。我從存儲庫中檢出了一個工作副本,並鎖定了所有文件。然後,在不釋放鎖的情況下,我從磁盤中刪除了該文件夾。如何遞歸地在Subversion中釋放鎖?

  • 我無法從庫中刪除文件夾,因爲它有一個鎖
  • 如果我和嘗試遞歸釋放鎖,它說有沒有鎖釋放。
  • 在Browse Repository視圖中,我只能遞歸地打破特定的文件夾,而不是文件夾。

如何破解存儲在存儲庫中的鎖?我在Windows上使用TortoiseSVN。 是否有一個命令爲文件夾遞歸地分解鎖定?

+0

您是否嘗試對工作副本進行清理? – khmarbaise 2010-07-01 05:31:40

+0

是的,我曾嘗試過。我原封不動地刪除了我的工作副本。現在,如果我簽出一份工作副本,它將不會有任何鎖定。 – vikmalhotra 2010-07-01 05:50:53

+0

你的工作副本沒有鎖了......文件/文件夾在存儲庫中有鎖嗎? – khmarbaise 2010-07-01 06:08:03

回答

54

好吧,我明白了。

  • 我所做的是我檢出了 工作副本。
  • 然後在資源管理器菜單, TortoiseSVN的去 - >檢查 修改...
  • 點擊了檢查庫按鈕
  • 選擇所有文件,右鍵單擊並選擇 破鎖選項。
  • 刪除存儲庫中的工作副本和 。瞧! :)

問候

+1

我認爲這隻會在你的用戶鎖定文件時才起作用。如果你偷了鎖,那麼我認爲命令行是你唯一的選擇。 – karmasponge 2011-08-04 03:43:28

+3

這對我有用 - 我能夠打破別人的鎖。 – Keith 2012-07-26 21:40:36

+5

只有SVN會採取數據庫功能(鎖),並強制您使本地工作副本打破它們... – whitey04 2012-10-09 02:26:49

15

advance locking section

$ 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. 

(這就是你的di通過TortoiseSVN的GUI d)

+0

我也做了你在倉庫中告訴的,但如果我必須做一個文件每個,它會花費我很多年。由於我對cli的有限知識不允許我找到遞歸命令,這就是爲什麼我花了更多時間。 :) – vikmalhotra 2010-07-01 06:53:02

+0

@ShiVik:true沒有遞歸選項,但你可以找到一些腳本來編寫腳本:http://old.nabble.com/recursive-find-locks-unlock-in-repository-td25010776.html'svnadmin lslocks | grep -B2 Owner | grep Path | sed「s/Path:\ ///」|例如,xargs svn unlock --force'。但是TortoiseSVN GUI也是一個很好的解決方案。 – VonC 2010-07-01 07:10:00

29

做一個SVN清理將釋放鎖,以及:

$ svn cleanup 
+0

當烏龜(或任何客戶端)沒有意義時,此功能特別有效。我試圖犯下,烏龜墜毀。在隨後的嘗試中,Tortoise告訴我一些文件被鎖定。檢查回購,沒有任何文件成功,所以這是一個本地的事情,但沒有上述答案適用於我的情況。這樣做(通過右鍵單擊資源管理器中的文件夾 - > TortoiseSVN - >清理...並使用選項「清理工作副本狀態」運行它。之後,一切正常。 – 2013-08-01 16:35:07

+0

當Xcode鎖定文件時工作得很好,因爲它無法完全提交(不管是什麼原因) – Daniel 2014-12-02 14:03:38

+0

沒有爲我工作我試圖刪除一個文件夾,其中有別人的鎖,甚至在我檢出有問題的文件夾並運行'svn cleanup'然後'svn刪除',我仍然無法提交,因爲鎖仍在服務器上。 – Apteryx 2016-09-02 01:23:52

0

對我來說,刪除裏面的.svn鎖文件,因爲我得到了壞的校驗和味精試圖更新後沒有工作文件。

我得到了以下味精執行目錄內的清理命令後:

的svn:在目錄「」 的svn:無法複製「的.svn/tmp /文基/ file_name.svn基」到'filename.3.tmp':沒有這樣的文件或目錄

因此,我將我的文件複製到.svn/tmp/text-base並將其名稱更改爲file_name.svn-base。然後清理和更新工作正常。

7

如果其他人已經遠程鎖定文件,我發現使用TortoiseSVN 1.7.11在我的工作副本中成功解鎖了它們。(類似於vikkun的答案)

  • 右鍵單擊工作副本>檢查修改
  • 單擊檢查庫按鈕
  • 選擇文件要解鎖
  • 右鍵單擊>取出鎖
  • 檢查「偷鎖「複選框
  • 鎖被盜後,再次選擇
  • 右鍵單擊>釋放鎖

工作副本中的文件現在應該被解鎖。

2

存儲庫管理員可以刪除鎖(遞歸),在有問題的目錄內的數百個文件上操作 - 但只能通過腳本編寫,因爲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 

此解決方案適用於文件名中有空格的文件名。

0

當我嘗試從最初提供的腳本上面運行腳本時,我在嘗試設置變量時出現錯誤: ./scriptname:line1:=/svn/repo/path /:沒有這樣的文件或目錄 ./scriptname:line2:=目錄/:沒有這樣的文件或目錄

我從前兩行刪除'$',並在此之後完美運行。

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

除非你的svn機管理員權限,可以使用「svnadmin的」工具,你最好的選擇似乎是這樣的:

  1. 結帳使用svn checkout --ignore-externals *your_repo*
  2. 使用svn status --show-updates有問題的目錄在檢出的存儲庫中找出哪些文件可能被鎖定(如果有人發現關於狀態碼含義的文檔,請發表評論)。
  3. 使用svn unlock --force *some_file*上在2

我用下面的一行自動化2和3:

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

發現如果你有機會到svnadmin工具中的文件在回購服務器中,您可以使用此替代方法刪除所有鎖(基於VonC發佈的腳本)

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