0

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

相反,我可以:

  1. 删除目录,然后导入。我没有对此进行测试,但除了听起来很愚蠢之外,它可能还会删除各个文件的修订历史记录,因为新文件完全不同。
  2. 查看目录是否存在,检查出来,远程删除规范源中不再存在的文件,然后替换剩余部分并提交。这可能会奏效,但听起来容易出错且不必要地困难。

我的假设是否正确,即删除文件会将新文件标记为与不同文件相同的方式?有没有比第二种方法更简单的方法?

4

3 回答 3

2

对于 1),它不会删除修订历史,但新文件将被视为与旧文件完全无关。不过,您仍然可以取回旧文件。

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

但似乎您应该考虑使用 svn-load-dirs.pl 脚本。您可以在 Subversion 书籍的“供应商分支”一章中了解这一点。

于 2009-01-24T16:34:53.540 回答
0

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

目录略有不同。Subversion 将存储库信息存储在文件夹级别。因此,如果您创建一个新文件夹,它不会自动连接到 Subversion。(使用 TortoiseSvn 之类的东西,它会为你处理很多事情。)

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

于 2009-01-24T16:32:59.813 回答
0

由于您无法覆盖目录,否则您将破坏.svn目录并丢失所有存储库信息,因此您必须复制文件但只能创建新目录。这就是我要从要更新的颠覆工作副本中执行此操作的方式:

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

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

于 2009-01-24T16:42:38.220 回答