2012-01-30 164 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

相关问题