2011-03-17 41 views
9

我有一个应用程序,它的数据保存在目录树中。如何修复工作副本中的受阻目录

现在,我想保持此目录下的版本控制与SVN。

但问题是,此应用程序不时删除并重新创建树中的某些目录,导致相应的.svn子目录丢失,然后TortoiseSVN大声抱怨阻止的目录。

是否有任何特殊选项,脚本(cygwin批处理,windows cmd,python等)或可以修复这些工作副本的程序?目前,我正在使用目录同步工具从第二个工作副本中重新添加丢失的.svn文件,但这非常麻烦。

谢谢!

+0

SVN在管理像这样的目录变化时非常有限。如果这是您的项目的一个选项,我强烈建议看看git。 – payne 2011-03-17 12:32:48

+1

@payne:对不起,git目前不是一个选项。我还读到,svn开发人员计划将工作副本格式更改为工作副本根目录中的全局目录。但是与此同时,一个脚本或者简单地重新创建.svn子目录的东西会很好。 – MarkusSchaber 2011-03-17 13:21:32

回答

4

对不起,但你不能修复丢失的东西。

文件夹消失了,它们不能仅仅凭空重现。重新获得它们的唯一方法是运行更新,但这需要先删除整个文件夹,因为更新不会覆盖现有文件。

+0

但是,所有的信息都存在于SVN存储库中,无需凭空创建它。全新结帐,然后手动将所有.svn目录从新签出的每个子目录复制到我的工作副本,可解决问题(但很麻烦)。应用程序不会以任何方式重构目录,它只是删除一些子目录并以相同的方式重新创建它们(减去一些修改后的数据文件)。 – MarkusSchaber 2011-03-18 07:39:07

+0

我会接受该答案,但它不能解决我的问题。同时,问题通过更新不再删除目录的应用程序来解决,SVN 1.7通过不需要每个目录中的.svn子目录解决了这个问题。 – MarkusSchaber 2011-07-13 14:04:04

+1

答案完全忽略了这一点。我有一个类似的应用程序(Mendeley Desktop),它删除并重新创建目录。我不想恢复它们,只是让SVN添加它们,就好像它们不在版本控制之下一样,在它们中创建一个新的.svn子目录,并在提交时覆盖以前版本中的任何子目录。 – 2012-05-31 23:09:29

14

我重命名了有冲突的文件夹并运行SVN更新以从SVN恢复文件夹。

经过我最喜爱的差异工具(同步在Total Commander中的目录)差异后,我看到唯一的区别是冲突的文件夹中有一个.svn文件夹。

+3

谢谢!原来,我在子目录中有一个svn文件夹,它不需要在那里。我删除了它,然后在父文件夹上像我想的那样运行svn更新,并对子目录中的文件进行版本化。 – AndyClaw 2013-11-20 13:31:34

+0

适合我thnx – 2014-02-18 15:20:33

+0

AndyClaw的评论为我工作,谢谢! – 2015-10-28 03:50:46

-1

我的问题是在VS中的Visual SVN,它失去了它的绑定,虽然上次我承诺的时候evreything很好。删除磁盘上项目根文件夹中的.svn文件夹并进行更新。一切都恢复正常,就像Andy在上面的回答中一样。

0

当SVN提交时,像Visual Studio这样的IDE删除并重新创建输出目录,从而删除.svn文件夹,阻碍目录的一个原因。因此,在其他地方构建这个VS项目,然后覆盖原始签出的地方以保存.svn文件夹。然后做SVN添加和SVN提交。

相关问题