从本地存储库中删除“已删除”文件

时间:2012-01-30 17:43:24

标签: svn tortoisesvn 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参数。我想我可以测试该文件夹是否存在,然后相应地进行结帐或更新。

2 个答案:

答案 0 :(得分:2)

对于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

答案 1 :(得分:0)

如果手动删除该文件,则会将其还原,直到您将本地存储库更新为缺少存储库中文件的相同版本。因此,第一步是尝试更新您的存储库。

svn update

有一些警告。首先,如果有人删除了文件但未检查删除,则删除实际上并不在远程存储库中。其次,如果您修改了文件,可能会发生冲突,因为存储库中的已删除文件与磁盘上的已删除文件不同。

假设某种冲突确实使更新变得困难。你应该试试

svn revert <problem file name>

再次尝试更新。

使用--force选项而不了解正在发生的情况几乎总是一个坏主意。基本上它就像不听专家的建议。如果您拥有比建议提供者更多的专业知识,您应该知道要避免的警告和痛点。如果你没有比建议提供者更多的专业知识,你将伤害自己。 --force不是“再试一次,忽略警告”的标志,它是“无论如何都要做,即使它完全搞砸事情”选项。