Svn 将方法从一个文件移动到另一个文件,同时保留其历史记录

Svn 将方法从一个文件移动到另一个文件,同时保留其历史记录,svn,version-control,Svn,Version Control,我最近将一个方法从一个类/文件移动到另一个类/文件,以便可以重用它。现在,如果我通过subversion进行谴责,我将负责所有代码行,这是有道理的,因为我创建了一个新文件 有没有办法让subversion识别该方法的来源,以便历史记录保持完整?否-历史记录是每个文件的。Subversion只知道它是一个充满文本的文件;它不会解析文本来理解它是什么。如果您真的想保持历史完整,可以使用svn cp创建一个副本,然后单独编辑 但是,我从来没有这样做过,我想我永远也不会。我这样做的唯一原因是为了一个完全

我最近将一个方法从一个类/文件移动到另一个类/文件,以便可以重用它。现在,如果我通过subversion进行谴责,我将负责所有代码行,这是有道理的,因为我创建了一个新文件


有没有办法让subversion识别该方法的来源,以便历史记录保持完整?

否-历史记录是每个文件的。Subversion只知道它是一个充满文本的文件;它不会解析文本来理解它是什么。

如果您真的想保持历史完整,可以使用
svn cp
创建一个副本,然后单独编辑

但是,我从来没有这样做过,我想我永远也不会。我这样做的唯一原因是为了一个完全被分割成碎片的文件,而不是为了一个从一个文件移动到另一个文件的方法

相反,我会使用一个有意义的检查注释:类似于“通过从baz中提取bar创建的foo”

的历史——你的意思是“每行”历史,比如“svn责怪”

添加评论:

/** Moved from {@link OldClass}. */

并确保两个类(新类和旧类)都在同一版本中签入。如果有人真的在意,他们可以阅读注释和“svn责怪”旧类。

如果将函数从一个现有文件移动到另一个现有文件,我认为简短的回答是,“它无法完成”。如果将函数从现有文件移动到新文件,即创建新文件只是为了保存此函数(可能添加其他内容,但从此函数开始),则可以复制该文件,从原始文件中删除函数,并从副本中删除除函数外的所有内容。那么原件和复印件都会保留历史。

谢谢Jay,看起来我可以为这一种方法保留完整的历史,但是如果更多的东西移到那里,那么同样的问题就存在了。我想知道在Mercurial或Git中是否可能出现类似的情况,它考虑的是更改,而不是每个文件的更改。现在,我的解决办法是让历史过去。我总是能追踪方法被撕毁的地方的变化,并从那里谴责。准确地说。我认为,除了最简单的情况外,所有实际的解决方案都是:(a)在评论中指出它来自何处,因此,如果它重要,你可以看那里;或者(b)我在现实生活中实际做的事情:别担心。