SVN如何解决*文件夹*上的"本地添加,传入添加更新"?

Zip*_*nor 49 svn tree-conflict

这是我的场景:

假设我们有一个SVN repo,其中包含以下内容:myfolder myfolder\file.txt

现在我创建了两个这个repo,co1和co2的签出.

在co1中我们修改file.txt.在二氧化碳我们:

  • svn删除myfolder
  • svn提交
  • 创建一个名为myfolder的新文件夹
  • svn添加myfolder
  • svn提交

现在,如果我在co1中尝试更新,我会遇到树冲突:

A  +  C myfolder >   local edit, incoming delete upon update
M  +    myfolder\file.txt
Run Code Online (Sandbox Code Playgroud)

我想保留myfolder和修改后的文件,所以我解决了树冲突:

svn resolve --accept working folder
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试提交,我会得到"svn:Directory'/ myfolder'已过期".如果我尝试使用svn up myfolder解决此问题,我会再次遇到树冲突:

A  +  C folder >   local add, incoming add upon update
M  +    myfolder\file.txt
Run Code Online (Sandbox Code Playgroud)

好的,我们再试一次svn resolve --accept工作文件夹.但是我们仍然无法提交,我们得到的结果是"svn:Directory'/ myfolder'已经过时了",如果我们将myfolder设置为svn,我们会回到最后一次树冲突.

解决此类冲突的正确程序是什么(当我们希望保留myfolder及其更改时)?

编辑:Windows cmd行脚本来说明:

rmdir /S /Q C:\svntest 
mkdir C:\svntest

cd C:\svntest

svnadmin create repo

svn co file:///c:/svntest/repo co1
svn co file:///c:/svntest/repo co2

cd co1
mkdir folder
echo content > folder\file.txt
svn add folder
svn commit folder -m ""

cd C:\svntest\co2
svn up

cd C:\svntest\co1
svn del folder
svn commit -m ""
mkdir folder
svn add folder
svn commit -m ""

cd C:\svntest\co2
echo changed_content > folder\file.txt
svn up
svn resolve --accept working folder
svn commit -m ""

svn up folder
svn resolve --accept working folder
svn commit -m ""
Run Code Online (Sandbox Code Playgroud)

这是运行该脚本的输出(注意最后的提交失败):

C:\>rmdir /S /Q C:\svntest  

C:\>mkdir C:\svntest 

C:\>cd C:\svntest 

C:\svntest>svnadmin create repo 

C:\svntest>svn co file:///c:/svntest/repo co1 
Checked out revision 0.

C:\svntest>svn co file:///c:/svntest/repo co2 
Checked out revision 0.

C:\svntest>cd co1 

C:\svntest\co1>mkdir folder 

C:\svntest\co1>echo content  1>folder\file.txt 

C:\svntest\co1>svn add folder 
A         folder
A         folder\file.txt

C:\svntest\co1>svn commit folder -m "" 
Adding         folder
Adding         folder\file.txt
Transmitting file data .
Committed revision 1.

C:\svntest\co1>cd C:\svntest\co2 

C:\svntest\co2>svn up 
A    folder
A    folder\file.txt
Updated to revision 1.

C:\svntest\co2>cd C:\svntest\co1 

C:\svntest\co1>svn del folder 
D         folder\file.txt
D         folder

C:\svntest\co1>svn commit -m "" 
Deleting       folder

Committed revision 2.

C:\svntest\co1>mkdir folder 

C:\svntest\co1>svn add folder 
A         folder

C:\svntest\co1>svn commit -m "" 
Adding         folder

Committed revision 3.

C:\svntest\co1>cd C:\svntest\co2 

C:\svntest\co2>echo changed_content  1>folder\file.txt 

C:\svntest\co2>svn up 
C folder
At revision 3.
Summary of conflicts:
  Tree conflicts: 1

C:\svntest\co2>svn resolve --accept working folder 
Resolved conflicted state of 'folder'

C:\svntest\co2>svn commit -m "" 
Adding         folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date

C:\svntest\co2>svn up folder 
   C folder
At revision 3.
Summary of conflicts:
  Tree conflicts: 1

C:\svntest\co2>svn resolve --accept working folder 
Resolved conflicted state of 'folder'

C:\svntest\co2>svn commit -m "" 
Adding         folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date
Run Code Online (Sandbox Code Playgroud)

aug*_*sto 42

我想通了

svn resolve --accept working  PATH_TO_FILE
Run Code Online (Sandbox Code Playgroud)

最终应该:

已解决'PATH_TO_FILE'的冲突状态


zel*_*lus 16

树冲突可以很好地概述树冲突及其解决方案.在某些情况下,svn revert也可能有所帮助,同时失去所有本地修改.作为最后的手段,一个新的工作副本与"破碎"的手动合并更改将使您重回正轨.绝对是颠覆的黑暗面.


hlo*_*dal 5

尝试

C:\svntest\co2>move folder folder.SAVE
C:\svntest\co2>svn revert folder
C:\svntest\co2>svn update
Run Code Online (Sandbox Code Playgroud)

然后,Svn 应该引入folder一个与co1. 然后您可以用 中的内容覆盖folder.SAVE