如何替换SVN中文件夹中的所有文件,但视为正常修订?

时间:2015-03-27 21:53:39

标签: svn merge tortoisesvn

我的情况是我有两个tar文件,其中包含不同版本的项目的源代码。我想将旧版本的代码添加到Subversion服务器,然后用新版本替换源文件并重新提交。这样,每个源文件都将在SVN中跟踪两个版本,并且很容易看到两个版本的代码之间所做的所有更改。特别是,我希望的行为等同于以下行为:

  1. 签入代码的第一个版本(当然,这很简单。)
  2. 在工作副本中,svn delete新版本中不存在的所有文件和目录。
  3. 将新版本的代码(包括所有文件和目录)复制到工作副本中的旧版本上。
  4. svn add所有新文件和文件夹。
  5. 将工作副本提交为正常提交。
  6. 如果您碰巧有一个只执行上述操作的脚本(理想情况下是一个bash脚本),那就太棒了。另一方面,如果有一个已经执行此行为的svn命令,那也会很棒。

    可以从正常的Linux命令行svn客户端或Windows上的TortoiseSVN执行的操作都可以(或者甚至是必要时的组合),因为我已经可以使用。

    如果不明显,涉及的目录树很大,我不希望在每个单独的文件上手动执行上述顺序。


    我已经尝试过:

    我已经尝试将两个代码树签入为单独的分支,然后使用TortoiseSVN的“合并两个不同的树”选项将包含较新代码的分支合并到包含旧代码的分支的工作副本中。虽然这确实导致分支更新为更新的代码,但Subversion将其视为仅替换文件,不留下每个文件的修订历史记录。也就是说,它将所有旧文件刚刚删除,并将新文件作为单独的文件添加而不是对现有文件进行更新(这意味着“显示日志”没有明确显示哪些文件被修改而且“Diff”以前的版本“在任何给定的文件上没有按照TortoiseSVN的要求工作。”

1 个答案:

答案 0 :(得分:3)

这听起来像是TortoiseSVN "vendor branch here"功能的作品。

首先添加并提交第一个tar文件的内容。将第二个tar文件的内容解压缩到其他目录。右键单击将该文件夹拖到工作副本中,然后在此处选择" vendor branch"。这主要是为您在自己的存储库中跟踪的第三方代码而设计的,但它也适用于您的用途。