多次导入到同一个Subversion存储库目录?

时间:2009-01-24 16:16:08

标签: c# svn sharpsvn

由于多种原因,我拥有的某些文件的规范来源不能成为存储库的工作副本(Subversion服务器位于无法访问的防火墙后面,并且数据本身不存在于文件系统中我的首选结构)。因此,我编写了一个工具来下载数据,从中生成目录结构,然后使用SharpSvn将结果导入存储库。这工作......第一次。当然,第二次,该名称的目录已存在于存储库中,我无法再次导入。

相反,我可以:

  1. 删除目录然后导入。我没有对此进行测试,但除了听起来很愚蠢之外,它可能还会删除相应文件的修订历史记录,将新文件视为完全不同。
  2. 查看目录是否存在,检查出来,远程删除规范源中不再存在的文件,然后替换余数并提交。这可能会起作用,但听起来很容易出错并且不必要地困难。
  3. 我的假设是否正确,删除文件会标记与不同文件相同的新方式?有没有比第二种方法更简单的方法?

3 个答案:

答案 0 :(得分:2)

对于1),它不会删除修订历史记录,但新文件将被视为与旧文件完全无关。你仍然可以恢复旧文件。

对于2),这将是推荐的方式。但是在'svn删除现有文件并添加新文件之后,你还必须在提交之前'svn'添加'这些新文件。

但似乎你应该考虑使用svn-load-dirs.pl脚本。您可以在Subversion书籍“Vendor branches”一章中阅读此内容。

答案 1 :(得分:0)

Subversion与文件的连接松散。对于文件夹内的文件,您可以轻松地进行获取/更新,进行大量更改(包括删除,替换或添加文件),然后提交差异。该文件级行为是典型的Subversion用法。

目录略有不同。 Subversion将存储库信息存储在文件夹级别。因此,如果您创建一个新文件夹,它将不会自动与Subversion建立连接。 (使用像TortoiseSvn这样的东西,它会照顾你的大部分内容。)

如果您要在生成过程中添加和删除目录,则与文件本身的问题略有不同。但是,您仍然可以通过命令行,SharpSvn,TortoiseSvn或其他类似工具来实现目标。

答案 2 :(得分:0)

由于您无法覆盖目录或者您将销毁.svn目录并丢失所有存储库信息,因此您必须复制文件,但只创建新目录。这就是我想要更新的颠覆工作副本中的方法:

(cd <newdirectory> ; tar -cf - * ) | tar -xf -

当然,你需要一个Unix-y系统。它应该与Cygwin一起使用,除非Windows在系统级别覆盖文件夹时做了特别奇怪的事情。