1

我对主干的工作副本进行了更改。然后,我想切换到一个不同的分支,以便我可以提交它。我做到了,现在我的项目一团糟。我切换到的分支位于主干后面,并且缺少我对其进行修改的文件。沮丧,我切换回后备箱。

现在我在几个地方有树冲突,说“本地编辑,切换时传入删除”。由于冲突,我不能提交这些。我能看到的唯一选择是恢复我的本地更改,或者基本上重新签出整个项目并丢失我的所有更改。

另一个问题 - 我恢复(并删除)了一个存在这种树冲突的文件夹。所以现在,我可以看到存储库中存在该文件夹,但它已从我的本地项目中消失,并且更新不会将它带入我的工作副本。这里发生了什么事?1. 它存在于 repo 中,2. 它不存在于我的工作副本中,因为我刚刚删除了它,以及 3. 更新不会将它带入我的工作副本。为什么是这样?

为什么这么难?我有本地更改,我想提交它们。我不明白为什么我切换到另一个分支并再次返回很重要。如果我切换到的分支上不存在该文件,为什么我不能将我的文件提交到分支以便它存在?

这是 Eclipse 为我提供的其中一个树冲突,这是对我切换到的分支上不存在的文件的本地更改。我假设它想在我切换时删除文件,因为它不在分支中。那么我现在该如何解决这个问题呢?我真正想做的是将它添加到分支并提交我的更改,但我不能,因为现在有冲突!

Resolve Tree Conflict on my_jsp.jsp
Conflict Description:
local edit, incoming delete upon switch
Source left: (file) https://......./WebContent/WEB-INF/jsp/my_jsp.jsp@349
Source right: (none) https://......./WebContent/WEB-INF/jsp/my_jsp.jsp@353

它给我的唯一选择是还原、删除或比较,所有这些都是不可接受的。我有很多本地更改!

4

1 回答 1

1

对于您的第一个问题:

您可以做的一件事是对您当前的更改进行补丁,然后恢复到主干并应用您的补丁。如果您正在运行 linux,则命令看起来像

svn diff > ~/patch.diff
svn switch svn://path/to/trunk
patch -p0 < ~/patch.diff

这应该让你或多或少回到你原来的位置(希望如此)。如果您没有运行 linux,则 Eclipse 或 SVNTortoise 中应该有类似的命令。当你想去新的分支时,为了安全起见,再做一次差异。如果它真的很落后,您可能必须手动进行更改,或者确保先将分支与主干合并(如果这是一个选项)。

对于您的第二个问题:

我想我见过类似的东西,但我不记得问题是什么。您是否尝试过svn up <file_name>仅更新丢失的文件?

于 2011-06-30T05:10:05.270 回答