2011-10-03 81 views
7

由於某種原因,我的本地SVN倉庫副本停止將父目錄識別爲工作副本。我通常會通過再次檢出到另一個文件夾並用我更改的文件覆蓋新的工作副本來解決此問題。然後我會從新文件夾執行提交。僞裝SVN結帳的深度

我想在這種情況下避免這樣做,因爲回購包含數以千計的大圖像並且檢出需要很長時間。所以我想要做的是非完全遞歸地檢查到一個新的目錄,將我現有的文件複製到新的目錄中,然後檢查整個東西。

問題是,SVN知道我只檢出了一個幾個文件。有沒有一種方法可以僞造它,並讓SVN認爲我只是做了一個完整的結帳? (例如,我可以在不需要實際檢查所有內容的情況下獲得完整結賬的.svn文件夾)

+0

第一:直接的巨大文件的工作副本的根或至少一個目錄下面?第二:你是否僅在工作副本根目錄中刪除'.svn'目錄,或者是否在其他目錄中缺少該目錄? –

+0

這些文件不在主要根目錄,並且它看起來只是根目錄.svn目錄已損壞 - 在任何子目錄中,所有通常的圖標都顯示在文件旁邊 – wheresrhys

回答

0

首先備份完整的工作副本。然後更新到上次修訂您的工作副本。您的上一次修訂包含根文件夾。 SVN會嘗試再次寫入該文件夾。然後會顯示樹狀衝突。然後運行清理並重新提交。

+0

由於SVN不能更新,我無法更新到最新版本不認爲它是一個工作副本,我不能在目錄 – wheresrhys

1

您很可能會損壞或刪除每個結帳中隱藏的.svn文件夾。

使用命令行在其他地方執行svn co svn://your/svn/repository --depth immediates並從此處還原.svn文件夾。然後,您需要經歷許多svn update .svn cleanup序列才能將子文件夾與父文件夾重新關聯。

+0

上運行任何SVN命令我已經嘗試過,但檢出立即數似乎只需檢查整個事情 - 不知道爲什麼。對我來說這似乎很不合時宜。 – wheresrhys

+1

然後嘗試'svn co svn://你的/ svn/repository --depth empty'並選擇你想要的文件。 – aquaherd

0

如果只是工作副本的根已被破壞和大(或多個文件)都在工作副本的根目錄下面的程序應該沒有再次回購下載文件的工作下的目錄:

> # 1) adjust these: 
> WC=/bad/root/of/working/copy 
> REPO=svn://localhost/url/to/repo/trunk/proj 

> cd $WC 
> # 2) make sure there is no half-baked stuff 
> rm -rf .svn 

> # 3) remove files in WC-root (would wreck havok later) 
> rm -v $(svn ls --depth=files $REPO) 

> # 4) ckeck out a clean .svn for this dir into another place 
> svn co --depth=immediates $REPO /tmp/tmp-wc 
> # 5) copy .svn this to this place 
> cp -a /tmp/tmp-wc . 

> # 6) "reconnect" children, download files in root 
> svn up --set-depth=infinity . 
Revision 42. 

之後,應該可以正常操作 - 如果沒有其他損害。

注:

  • 步驟3 + 4)由於存儲庫根中不包含的數據量,此步驟應該是無痛的。但是,如果可能有未更改的任何更改,可以先備份這些文件。
  • 步驟6)由於子目錄中的數據未觸及,因此不會再次下載。根目錄中的數據將被再次提取。
3

在新位置稀疏簽出您的存儲庫應該做你想做的事(http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html)。如果我正確理解了你的話,你會想做一個空的最高層目錄結賬,然後在你想要的工件上做一個'svn',設置深度。

例如,假設我有一個名爲'foo'的頂級文件夾,它包含兩個文件夾'bar'和'zoog'。

/foo 
    /bar 
    -the files I want 
    /zoog 
    -the universe 

文件夾「zoog」有大量的,我沒有在時刻關心的文件,但我希望能夠與「酒吧」的工作。我會做到以下幾點:

svn co --depth empty file:///var/svn/repos/FooRepo foo 
cd foo 
svn up --set-depth infinity bar 

現在的「svn了」顯示所有信息是最新的,而且我可以在「富」和「酒吧」的變化,並承諾他們,如果我還檢查了「zoog」沒有所有的開銷。

(該參數--set深入的SVN更新被排除,空,文件,立即數,和無窮大)

+0

我已經加了你的答案,因爲它看起來可能是我需要的,但爲了運行命令行svn(而不是龜gui),我最終不得不將SVN升級到1.7,它具有完全不同的元數據結構到v1.6,所以我不能真正測試你的答案,看它是否有效 – wheresrhys

+0

我在步驟3中調用'svn up --set-infinity bar/folder1'並得到錯誤'E155007 - 不是工作副本'所以我先調用'svn up --set-depth-empty bar'然後'svn up --set-depth infinity bar/folder1' –