我将 Subversion 与一些由另一个应用程序管理的文件一起使用。我想重命名文件,但重命名必须在应用程序内完成,以便它正确更新自己的元数据。这意味着我不能简单地使用 SVN 的rename
命令——应用程序的元数据会变得不一致。
那么我怎样才能告诉 SVN 工作副本中的文件已被此应用程序重命名,以便它以与rename
命令相同的方式保留历史记录?
你不需要指定你的环境,但是如果你在 Windows TortoiseSVN 上,它会为此提供一个鲜为人知且相当优雅的解决方案。假设您有一个文件 SuiteSetup.cs,您在应用程序中将其重命名为 SuiteSetup-Rev2.cs。
在 TortoiseSVN 上下文菜单上的提交或检查修改对话框中,选择旧名称(显示missing
状态)和新名称(显示non-versioned
状态),然后打开上下文菜单并选择修复移动(参考:修复文件重命名)。如图所示,TortoiseSVN 进行所有的簿记更正以将它们转换为链接的删除-添加对,重命名或移动应该出现的方式。
[改编自我的TortoiseSVN 和 Subversion Cookbook,第 2 部分,发表于 Simple-Talk.com。在撰写本文时,第 8 部分即将出版。]
您可以在事后模拟“仅记录”重命名,例如
rename newname oldname
svn rename oldname newname
这将保留您的应用程序可能在文件中所做的任何更改,但允许 svn 在“旧名称”和“新名称”的历史记录之间建立联系。
我不认为你可以用当前的 SVN 做到这一点。使用 svn rename 命令的原因其实是因为你必须告诉 svn 重命名是什么,这样它才能准备相应的元数据。
除非 svn 改变它的设计来“猜测”你的重命名(比如 git),或者它提供一个只在元数据中执行更新的只记录重命名命令(你仍然需要弄清楚你的应用程序实际做了什么重命名并发出相应的命令) . 但是,此功能均不可用,并且至少在不久的将来也不太可能发生
据我所知,SVN cli 没有此功能,但 SmartSVN 有(您选择 2 个文件并按移动)。