题
我已经在当前公司从 TFS 迁移到 SVN (TortoiseSVN)。我真的很怀念TFS的“搁置”功能。我读过各种关于如何使用 SVN“搁置”的文章,但我没有读过任何可以为“搁置”工作提供非常简单的体验的文章。
理想情况下,我希望将额外的项目添加到 TortoiseSVN 上下文菜单中 - “Shelve”和“Unshelve”。“Shelve”将删除当前的搁置集,并将工作目录上传到用户选项定义的合适路径下。“取消搁置”会将集合与工作副本合并。
这样的事情存在吗?任何人都可以建议任何方法来“破解”GUI 中的此功能吗?
笔记:以下链接并没有真正实现我正在寻找的用户体验:
TFS Shelve 最伟大的事情之一就是它的使用非常简单......
解决方案
SVN 中的搁置从 1.10 版本开始推出,请参阅 发行说明
其他提示
如果您了解 SVN 分支的工作原理,那么在 SVN 中模拟 Shelve 是理所当然的:
- 在存储库中创建分支(在服务器上)
- 将您的本地副本切换到它
- 将您的更改提交到新分支
- 将本地副本切换回主干
当您准备好返回搁置的更改(“取消搁置”)时,只需将搁置分支合并回本地副本即可。
如果您对命令行 SVN 和 Tortoise SVN 不太了解,无法执行上述操作,这里有一个关于如何在 Tortoise SVN 中执行此操作的超级详细的分步说明:
- 执行“SVN Update”将您的工作副本更新到主干的最新版本。这样,本地副本和主干之间的唯一区别就是您的更改。
- 从上下文菜单中选择“分支/标签”
- 默认情况下选择“存储库中的 HEAD 版本”选项。保留那个。
- 更改“To Url”以指定分支名称,例如
http://server/repository/project1/branches/shelf1
- 选中“将工作副本切换到新分支/标签”框
- 单击“确定”创建分支并切换到该分支
- 执行“SVN Commit...”并将更改提交到新创建的分支
- 从上下文菜单中选择“切换...”
- 将“To URL”更改为中继 URL,例如
http://server/repository/project1/trunk
- 单击“确定”切换回主干
有关更多详细信息以及与上述内容等效的命令行,请参阅此链接:
颠覆中的货架
另一种选择是使用 TortoiseSvn 中的“创建补丁”工具来创建补丁文件并恢复更改。稍后可以重新应用补丁文件以恢复原来的状态。
如果您必须更新工作副本修订版,您可能仍然会遇到一些粘性合并。
TortoiseSVN 1.10
现在支持 shelving
: https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-shelving.html
SVN已经升级了货架https://subversion.apache.org/docs/release-notes/1.11.html#shelving
您可以搁置的更改是对文件和属性进行的可进行的更改,但以下尚未支持的类型:
- 复制和移动
- 创建和删除目录
您可以使用 DVCS,但在某种程度上这是一种拼凑。DVCS 中的“搁置”仅在本地存储您的更改。仅当您想要对工作进行检查点以便在进一步的工作中断时进行回滚时,它才有用,但最好您希望将工作保存在服务器上。
在 SVN 中执行此操作而无需显式搁置命令的一种方法是将工作副本切换到不同的 svn 位置并在那里提交,而不是在主存储库上提交。这实际上就像创建一个临时分支并在您的工作期间对其进行处理。我认为你甚至不需要合并,因为当你切换时 SVN 会为你做这件事,因为你的本地修改将被保留。
不幸的是,您无法切换到不存在的位置,因此第一次执行此操作时,您必须创建要搁置的“分支”。我想整个事情都可以自动化。