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的“红皮书”)是否会创建
的副本,同时保留其历史记录以与
共享李> - 如果我正在更改
,那么
会发生什么变化李>
这是一种文件级的分支吗?
如果在同一分支中使用它,会发生什么情况,即创建文件的副本,然后开始更改新文件。都在同一个分支中?
我知道它也用于标记,但我感兴趣的是在文件级执行
时所期望的内容
你什么时候会使用这种技术,为什么
创建标记,以及创建分支,尽管通常在目录而不是单个文件上使用它。标记是一个或多个文件的副本,为方便起见保留这些文件,但不会再次更改。分支是一个或多个文件的副本,然后与原始文件分开演化
此命令是否会创建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
在我无意中删除了一个文件后派上了用场。请看我问过的一个问题。请描述一下为什么你觉得这不准确,这样我就可以纠正它,而不只是投反对票。很好,我以前没有看到过。显然Git可以做到这一点-请看Dustin的。@mskfisher Git通过猜测哪些文件看起来相似来做到这一点(如果你启用了-C
选项/config),不是通过存储关于文件来源的显式元数据。如果修改了太多的行,git将无法解决这个问题(为了解决这个问题,我做了两次提交:一次提交未更改的文件副本,另一次提交我想做的更改,但这不是很优雅)。不确定为什么会被否决——我自己做过。这意味着,如果您更改样板文件(版权声明和诸如此类的废话),那么将更改合并到所需的任何派生文件中的操作与普通主干->分支合并完全相同。我相信复制也将足够智能,能够高效地存储历史。。。如果文件有很长的历史记录,这将节省大量空间。日志的更新也将在我相信的文件之间共享。是的,我确信这是正确的。SVN大声声明该文件是“逻辑”副本,但不会复制数据库中文件的内容。如果这一说法不适用于整个历史,那么它将是胡说八道,而且在数据库空间中标记将是极其昂贵的。但事实并非如此。