如何删除已从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参数。我想我可以测试该文件夹是否存在,然后相应地进行结帐或更新。
答案 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
不是“再试一次,忽略警告”的标志,它是“无论如何都要做,即使它完全搞砸事情”选项。