2012-01-30 202 views
2

如何刪除已從Repo刪除但尚未在本地刪除的文件?從本地存儲庫中刪除「已刪除」文件

本質上講,我在PowerShell中需要得到從回購和檢查用最先進的最新變化寫構建腳本,但有可能是這是從哪些還沒有回購刪除的文件尚未從我的本地結帳中刪除。我的意思是,一個解決方案就是刪除所有內容並進行乾淨的結賬,但這相當昂貴,而且需要很長時間。我也可以做一個svn狀態,並用「D」查找任何東西並在本地刪除它們,但這很枯燥。我想也只是重寫任何衝突,並強制結賬需要合併的文件。

是否存在一些簡單的命令,例如我缺少的恢復或檢出開關?


* *編輯:實際上有兩種,我需要處理不同的情況:

A部分)在其中一個部分,我要留下什麼人在工作拷貝修改,只是簽出不衝突或合併的更改。我需要這個永不中止,這意味着我只想扔掉任何有問題的東西並保留工作/本地副本。

我想使用的:svn update --accept mine-full --force:這是在根目錄下,而不是單個文件)

部分B)在其他部分,我要覆蓋任何更改和刪除文件這些在回購中被刪除。

我想使用的:svn update --accept theirs-full --force:根目錄,這不是單個文件)

將這工作

?或者--force(或--accept)不是我想要使用的?


我使用update的主要問題是,如果出現問題,它會中止整個過程,不是嗎? - svn update有什麼作用?它也不會刪除未版本控制的項目。

恢復不正是我所需要的,是嗎?它不會刪除我的任何未版本控制的項目。

另外,如果已經存在本地文件,那麼不檢出只是更新相同的東西嗎?在沒有任何東西存在的情況下使用結賬會更簡單。問題是我不能用svn checkout指定--accept參數。我想我可以測試該文件夾是否存在,然後做相應的結帳或更新。

+3

'svn up' not work?它應該爲你刪除文件(但也會更新工作副本的其餘部分)。 – crashmstr 2012-01-30 17:46:00

+0

將更改從回購變爲工作副本的命令是** update **。如果有一個原因阻止你使用它,你應該清楚地解釋它,所以我們能夠提供幫助。 – 2012-01-30 17:48:18

+0

@crashmstr:我編輯過我的帖子。有了這兩種不同的情況,svn update仍然是我想要做的嗎?謝謝! – Jordan 2012-01-30 18:27:21

回答

1

對於部分A中,我使用:

svn update --accept mine-full --force 

對於部分B,我只是做:

步驟1:

svn revert $localPath 

步驟2:

svn update $localPath 

第3步(使用powershell + svn狀態,但可以使用rm -rf grep/sed在* nix中完成:

svn status $localPath --no-ignore | 
       Select-String '^[?I]' | 
       ForEach-Object { 
        [Regex]::Match($_.Line, '^[^\s]*\s+(.*)$').Groups[1].Value 
       } | 
       Remove-Item -Recurse -Force -ErrorAction SilentlyContinue 
0

如果您手動刪除文件,它將被還原,直到您將本地存儲庫更新爲缺少存儲庫中文件的相同版本。因此,第一步是嘗試更新您的存儲庫。

svn update 

有幾點注意事項。首先,如果有人刪除了該文件但沒有簽入他的刪除,那麼刪除不在真正的遠程存儲庫中。其次,如果您修改了該文件,則可能會發生衝突,因爲存儲庫中的已刪除文件與您的磁盤上的已刪除文件不同。

假設存在某種衝突會使更新變得困難。你應該試試

svn revert <problem file name> 

然後再次嘗試更新。

使用--force選項沒有對發生的事情有很好的描述幾乎總是一個壞主意。基本上這就像不聽專家意見。如果你有更多的專業知識而不是建議者,你應該知道應該避免的警告和痛點。如果你沒有比建議者更多的專業知識,你將會傷害自己。 --force不是「再試一次,忽略警告」的標誌,它是「無論如何,即使它完全搞砸了」選項。

+0

嘿,我編輯了我原來的帖子,澄清了一下。但是,這是用於構建腳本的,所以我不必擔心我是否無法重新提交所有內容,只要該過程不會由於檢出或合併提示失敗而中止。 – Jordan 2012-01-30 19:50:49

+0

@Jordan,如果這是一個自動構建腳本,它應該檢出整個源代碼樹「新鮮」到一個新的目錄中。如果這是針對開發環境的,那麼用戶應該沒有問題輸入這些命令。如果你正在做一些事情,可能最好將這兩種情況分開。 – 2012-01-30 19:56:50

+1

@Jordan,我想你誤解了'svn revert'它會將你恢復到你從版本庫中檢出的文件副本。在這樣的命令之後,這個文件就不會有文件衝突,所以你的'svn update'將會爲那個文件乾淨地工作。 – 2012-01-30 19:59:01

相關問題