Subversion的奇怪问题 - 当尝试重新创建USED在我的存储库中的目录时,"文件已经存在"

gna*_*arf 70 svn

所以 - 我以前有一个名为mysql的目录.我删除了它,并决定重新开始 - 但是当我尝试创建新的mysql目录时 - 我一直遇到'File Already Exists'错误:

support:/etc/puppet/modules# mkdir mysql
support:/etc/puppet/modules# svn add mysql/
A         mysql
support:/etc/puppet/modules# svn commit -m " Test"
Adding         modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-r', path '/trunk/modules/mysql'
support:/etc/puppet/modules# svn delete mysql
svn: Use --force to override this restriction
svn: 'mysql' has local modifications
support:/etc/puppet/modules# svn --force delete mysql
D         mysql
Run Code Online (Sandbox Code Playgroud)

我看到其他一些帖子建议强制更新

support:/etc/puppet/modules# svn status
support:/etc/puppet/modules# svn update
At revision 11.
support:/etc/puppet/modules# svn mkdir mysql
A         mysql
support:/etc/puppet/modules# svn commit -m "Test"
Adding         modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-s', path '/trunk/modules/mysql'
Run Code Online (Sandbox Code Playgroud)

Sim*_*ast 62

当我删除文件夹(和子文件夹)并从头开始重新创建它时,我遇到了这样的问题.手动删除和重新添加文件夹时会出现此错误(而文件似乎可以正常处理).

在经历了一些令人沮丧的麻烦之后,发现我不得不:(
在Windows上使用TortoiseSVN)

  1. 将冲突的文件夹移出工作副本(这样我就不会丢失正在进行的工作)
  2. 做一个svn update添加旧文件/文件夹回到工作副本
  3. svn delete
  4. commit
  5. 将新文件夹复制回工作副本(确保删除里面的所有.svn文件夹)
  6. commit

不幸的是,它(A)需要两次提交,并且(B)丢失文件修订历史记录,因为它只追溯到最近的重新添加(除非有人可以解释如何解决这个问题).解决这两个问题的替代解决方案是跳过步骤3和4,唯一的问题是旧的/不必要的文件可能仍然存在于您的目录中.您可以手动删除它们.

希望听到其他人可能对此有任何额外见解.

西蒙.


[更新] 好的,我刚才又遇到了同样的问题,但是违规文件夹update不在最后一次提交中,所以没有恢复它.相反,我不得不浏览存储库和有问题delete的文件夹.然后我可以重新add进入文件夹并commit成功完成.

  • +1通过浏览存储库直接删除违规文件夹为我修复它. (2认同)

Fed*_*TIK 17

有类似的问题.要解决此问题,请从svn trunk更新并选择本地文件的优先级.

svn update path/ --accept=mine-full
Run Code Online (Sandbox Code Playgroud)

你可以照常提交.当然,小心使用它.


Atm*_*ons 12

已经有这种类型的问题.

我的解决方案是:

从svn中删除该文件夹,但在某处保留该文件夹的副本,提交更改.在备份副本中,递归删除其中的所有.svn文件夹.为此,你可能会跑

#!/bin/bash

find -name '.svn' | while read directory;
do
    echo $directory;
    rm -rf "$directory";
done;
Run Code Online (Sandbox Code Playgroud)

删除本地存储库并重新检出整个项目.不知道部分删除/结账是否足够.

问候

  • 这就是整个事情基本开始的地方,很久以前我已经删除了`mysql`而且我 - 但是当我厌倦了"文件已经存在"时我才尝试制作一个空目录...它仍然不会添加它.还有`find -name'.svn'-exec rm -rf {} \;`更短的方式来做你的bash的东西做什么 (2认同)
  • 我在尝试添加包含文件的新文件夹时遇到此问题.为了解决这个问题,我简单地恢复了添加,然后重新添加它,全部使用TortoiseSVN.这与您的解决方案基本相同,除了我不必再检查任何内容. (2认同)

gna*_*arf 11

我设法通过恢复到我拥有mysql目录的最后一个版本来解决它,然后删除目录的内容,将新内容放入其中,然后重新检查新信息.虽然我很好奇任何人都有更好的解释,那里到底发生了什么.


小智 7

这是一个讨厌的...神秘的错误,没有明确的解决方案.

更新/恢复/提交在我的情况下不起作用.我没有做过任何奇怪的事 - 只是一些svn动作.

DID对我有用的是:

svn remove offender
svn commit
cd ..
rm -fR parent
svn up parent
cd parent
svn remove offender again
svn commit
copy offender back in (minus .svn dirs)
svn add
svn commit
Run Code Online (Sandbox Code Playgroud)

奇怪的是至少可以说.基本上,由于svn remove --force offender某种原因,没有完全删除.这是错误消息所说的内容.只有删除父级,然后更新父级,这才变得明显,因为然后犯罪者再次出现!svn再次删除罪犯然后正确删除它.