svn copy有什么用途?

svn copy有什么用途?,svn,version-control,Svn,Version Control,例如: $ svn copy foo.txt bar.txt A bar.txt 你什么时候会使用这种技术,为什么 此命令(取自svn的“红皮书”)是否会创建的副本,同时保留其历史记录以与共享 如果我正在更改,那么会发生什么变化 在其他现代系统(Clearcase、Accurev、Perforce)中,与此等效的是什么 让我强调我正在寻找的一点: 这是一种文件级的分支吗? 如果在同一分支中使用它,会发生什么情况,即创建文件的副本,然后开始更改新文件。都在同一个分支中? 我知道它也

例如:

$ svn copy foo.txt bar.txt  
A    bar.txt
  • 你什么时候会使用这种技术,为什么
  • 此命令(取自svn的“红皮书”)是否会创建
    的副本,同时保留其历史记录以与
    共享
  • 如果我正在更改
    ,那么
    会发生什么变化
在其他现代系统(Clearcase、Accurev、Perforce)中,与此等效的是什么

让我强调我正在寻找的一点:
这是一种文件级的分支吗?
如果在同一分支中使用它,会发生什么情况,即创建文件的副本,然后开始更改新文件。都在同一个分支中?
我知道它也用于标记,但我感兴趣的是在文件级执行
时所期望的内容

你什么时候会使用这种技术,为什么

创建标记,以及创建分支,尽管通常在目录而不是单个文件上使用它。标记是一个或多个文件的副本,为方便起见保留这些文件,但不会再次更改。分支是一个或多个文件的副本,然后与原始文件分开演化

此命令是否会创建
foo.txt
的副本,同时保留其历史记录以与
bar.txt
共享

不完全正确,
foo.txt
的历史记录将有效地复制到
bar.txt
的历史记录中,然后在
bar.txt
的历史记录中出现一个额外的条目,表明它是从
foo.txt
复制的,此后它们是独立的。因此,到复制点为止的历史是相同的/共享的

如果我正在更改
bar.txt
,那么
foo.txt
会发生什么变化


没什么,它们是完全分开的。但是您可以稍后将更改从一个合并到另一个。

我在创建新文件时使用此技术,并且我想复制scaffolding(我目前使用Perforce,但过去使用Subversion)。更改副本不会影响其他文件

与此相对应的是什么 其他现代系统(Clearcase, Accurev(性能)


git会注意到文件在普通副本上是相同的,并将其显示为副本。

除了分支/标记之外,您还可以在将文件一分为二时使用它。在这种情况下,两个新文件都将有历史记录,您可以在拆分之前查看代码


顺便说一句:这是SVN拥有的为数不多的特性之一,但Git没有(Git会在事后尝试猜测代码的来源,特别是如果您向命令添加
-C

Branch不是Subversion中的一等公民,因为它是作为目录“实现”的

因此,
svn copy
允许在同一个分支(目录)内对文件进行某种类型的分支。您可以稍后将复制的文件合并回第一个文件。但是,这不适合仅用于一个文件,如中所述

ClearCase中的等效规则是一个select规则,如

element * .../myBranchForCopy/LATEST
element /myPath/myFile /main/myBranch/LATEST -mkbranch myBranchForCopy
但是,在这个用于分支文件的视图中,一次只能看到一个
foo.txt
(在
myBranch
中,或者如果它已签出,则在
myBranchForCopy
中)。没有真正的“拷贝”,它是相同的元素。任何合并都将发生在以下两种情况之间:

  • foo.txt@@@main/myBranch/myBranchForCopy/LATEST

  • foo.txt@@@main/myBranch/LATEST

这是一个有点不寻常的用法,但我发现有时我必须将源文件分为两个单独的文件-例如,如果它包含两组不相关的功能,我使用svn copy来执行此操作。然后,我修改这两个文件,并从每个文件中删除不适当的位。这样,两个新文件都保留了其相关位的修订历史。

svn copy
在我无意中删除了一个文件后派上了用场。请看我问过的一个问题。

请描述一下为什么你觉得这不准确,这样我就可以纠正它,而不只是投反对票。很好,我以前没有看到过。显然Git可以做到这一点-请看Dustin的。@mskfisher Git通过猜测哪些文件看起来相似来做到这一点(如果你启用了
-C
选项/config),不是通过存储关于文件来源的显式元数据。如果修改了太多的行,git将无法解决这个问题(为了解决这个问题,我做了两次提交:一次提交未更改的文件副本,另一次提交我想做的更改,但这不是很优雅)。不确定为什么会被否决——我自己做过。这意味着,如果您更改样板文件(版权声明和诸如此类的废话),那么将更改合并到所需的任何派生文件中的操作与普通主干->分支合并完全相同。我相信复制也将足够智能,能够高效地存储历史。。。如果文件有很长的历史记录,这将节省大量空间。日志的更新也将在我相信的文件之间共享。是的,我确信这是正确的。SVN大声声明该文件是“逻辑”副本,但不会复制数据库中文件的内容。如果这一说法不适用于整个历史,那么它将是胡说八道,而且在数据库空间中标记将是极其昂贵的。但事实并非如此。