【问题标题】:How can I "svn delete" a folder and then add a folder with same name?如何“svn删除”一个文件夹,然后添加一个同名的文件夹?
【发布时间】:2011-06-24 00:58:50
【问题描述】:

我为自己的基于 SQL 和 Subversion 的程序编写了一个部署工具。

我能够创建不同版本的应用程序并使用 Subversion 存储它们,而这些信息存储在 SQL 中。

直到我的“部署工具”工作得很好,但现在我发现了一个问题。

在创建应用程序的版本时,我会检查头部修订并在我的程序中将其可视化。 然后可以通过删除、重命名、添加或覆盖文件和文件夹来编辑最新版本。

假设我的工作副本中有以下树结构:

- ProgramFiles
  - Assemblies
  - Data
     - Type 1
         - ...
     - Type 2 
         - ...
     - Type 3
         - ...

我想替换一个目录(数据)。这会调用 svn delete,然后调用 Directory.Delete,因为“svn delete”只是在您进行提交时将文件夹标记为删除。 现在我想再次添加一个名为“Data”的文件夹,其中包含新的子文件夹和文件,但随后出现异常“缺少工作副本管理区域”。 据我所知,问题在于 ProgramFiles 下的目录 .svn 存储了文件夹 Data 应被删除的信息,如果我读取此文件夹,它会崩溃。
我也知道我可以在添加文件夹之前提交,但这会增加我的“非稳定版本”的修订号。

我该如何解决这个问题?

【问题讨论】:

    标签: svn sharpsvn working-copy


    【解决方案1】:

    如果您需要在单个提交中执行此操作,那么这是可能的,但很棘手!

    您应该编写一个函数来递归检查现有文件和文件夹与所需文件和文件夹,而不是简单的 svn deleteDirectory.Delete(...)

    伪代码:

    function OverwriteFolder(old, new){
        foreach (file system) object in old or new{
            if object is in old and new{
                if object is file{
                    overwrite file //no svn command needed
                }
                if object is folder{
                    OverwriteFolder(old/object,new/object)
                }
            }
            if file is in old and not new{
                svn delete object
            }
            if file is in new and not old{
                svn add object
            }
        }
    }
    

    现在它应该在一次提交中工作。只有当您尝试用同名文件替换文件夹时它才会失败,反之亦然。

    【讨论】:

      【解决方案2】:

      好吧,在我考虑了一段时间后,假设不可能做我在这里想做的事情,我有了一个想法。

      我真正想做的是制作一个工作副本,这意味着交换、删除、移动添加等等。所有这些更改都应在我的程序中可视化。 (基于文件系统上的文件夹结构)

      在用户想要将其保存为新的“数据包”之前,不应提交所有这些更改。这表明他可以取消进度并且什么都没有提交也没有改变。

      我知道尝试了一种解决方法,首先进行导出。编辑这些文件夹和文件。 当我现在准备好提交时,我签出相同的路径,删除工作副本中不存在的所有内容,并将导出的所有新文件添加到工作副本中。

      这只是一种解决方法,但我想到的唯一一件事。

      有没有一种颠覆的方法可以做这样的事情?由于导出和签出而不是仅签出程序,我的解决方法的运行速度只有以前的一半。

      另外两个文件夹的比较也很复杂。有谁知道简化此问题的解决方案?

      【讨论】:

        【解决方案3】:

        你不能一次提交,你需要分别提交删除和添加

        【讨论】:

        • 好吧,如果你是对的并且没有其他办法,我有一个问题。如果有人实际上想删除文件夹以再次添加它们(内容已更改),然后决定取消更改,则会出现错误的头部修订。
        【解决方案4】:

        你不能只删除文件夹内容而不是删除文件夹(但不要删除“.svn”文件夹!),然后把新文件放在那里吗?

        【讨论】:

        • 如果一个子文件夹的名称等于一个已删除的子文件夹,那么子文件夹也会出现同样的问题
        猜你喜欢
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 2013-11-23
        • 2011-03-21
        • 1970-01-01
        相关资源
        最近更新 更多