簡體   English   中英

從本地存儲庫中刪除“已刪除”文件

[英]Delete “Deleted” files from local repository

如何刪除已從Repo中刪除但尚未在本地刪除的文件?

基本上,我在powershell中編寫了一個構建腳本 ,需要從repo和checkout獲取最新的更改,但是可能有從repo中刪除的文件尚未從我的本地刪除查看。 我的意思是,一個解決方案是刪除所有內容並進行干凈的結賬,但這相當昂貴並且需要很長時間。 我也可以做svn狀態並查找帶有“D”的任何內容並在本地刪除它們,但這相當繁瑣。 我還想覆蓋任何沖突,並強制檢查需要合並的文件。

是否有一些簡單的命令,如恢復或結賬開關,我錯過了?


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

A部分)在一個部分中,我需要在工作副本中留下任何修改過的內容,只檢查不沖突或合並的更改。 我需要這個永遠不會中止,這意味着我只想扔掉任何有問題的東西並保留工作/本地副本。

我正在考慮使用: svn update --accept mine-full --force注意 :這是在根目錄而不是單個文件)

B部分)在另一部分中,我想覆蓋任何更改並刪除在repo中刪除的文件。

我正在考慮使用: svn update --accept theirs-full --force注意 :這是在根目錄而不是單個文件)

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


我主要擔心使用更新是否會在出現問題時中止整個過程,不是嗎? 什么--force做svn更新? 它也不會刪除未版本化的項目。

還原不是我需要的,是嗎? 它不會刪除任何我的無版本項目。

另外,如果已經存在本地文件,那么結賬不會像更新那樣做嗎? 在沒有任何東西存在的情況下使用checkout會簡單得多。 問題是我無法使用svn checkout指定--accept參數。 我想我可以測試該文件夾是否存在,然后相應地進行結帳或更新。

對於A部分,我使用了:

svn update --accept mine-full --force

對於B部分,我剛剛做了:

第1步:

svn revert $localPath

第2步:

svn update $localPath

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

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

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

svn update

有一些警告。 首先,如果有人刪除了文件但未檢查刪除,則刪除實際上並不在遠程存儲庫中。 其次,如果您修改了文件,則可能會發生沖突,因為存儲庫中的已刪除文件與磁盤上的已刪除文件不同。

假設存在某種沖突,確實使更新變得困難。 你應該試試

svn revert <problem file name>

並再次嘗試更新。

使用--force選項而不能很好地了解正在發生的事情幾乎總是一個壞主意。 基本上它就像不聽專家的建議。 如果您擁有比建議提供者更多的專業知識,您應該知道要避免的警告和痛點。 如果你沒有比建議提供者更多的專業知識,你將傷害自己。 --force不是“再試一次,忽略警告”的標志,它是“無論如何都要做,即使它完全搞砸了”的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM