搁置在 TortoiseSVN 中?

Posted

技术标签:

【中文标题】搁置在 TortoiseSVN 中?【英文标题】:Shelve in TortoiseSVN? 【发布时间】:2010-09-05 17:28:57 【问题描述】:

我已经在我现在的公司从 TFS 迁移到 SVN (TortoiseSVN)。我真的很怀念 TFS 的“搁置”功能。我已经阅读了有关如何使用 SVN“搁置”的各种文章,但我没有阅读任何内容可以提供非常简单的“搁置”工作体验。

理想情况下,我希望在 TortoiseSVN 上下文菜单中添加额外的项目 - “搁置”和“取消搁置”。 “搁置”将删除当前搁置集,并将工作目录上传到用户选项定义的合适路径下。 “Unshelve”会将集合与工作副本合并。

这样的东西存在吗?谁能建议任何方法在 GUI 中“破解”此功能?

注意:以下链接并没有真正实现我想要的用户体验:

Shelving Subversion

TFS Shelve 最大的优点之一就是它的易用性...

【问题讨论】:

【参考方案1】:

我不相信 SVN 在服务器产品中内置了这个功能。我也不相信在我使用过的任何客户端(包括 TortoiseSVN)中模仿过这样的事情。

为了解决这个问题,我使用了 DVCS,例如 Git 或 Mercurial,以便在将内容推送回 SVN 之前在本地分支/合并/搁置。这可以说是有点杂乱无章,但效果非常好。

【讨论】:

我不认为这是一个混搭 L-) 多年来,在与我们严格控制签入的团队合作时(尤其是像 SourceSafe 这样基于锁定的 VCS),我一直使用单独的个人 VCS . 你说得对,这不是杂牌。老实说,我不知道我为什么这么说,可能有点免责声明以避免被抨击:) 在推动标准 CVCS 之前,我很高兴使用 DVCS 进行本地搁置。 见:如何同时使用 mercurial 和 svn ***.com/questions/4605668/… SVN Patch 功能几乎具有以下一些答案中所指出的所需行为。 但是您如何以这种方式与其他开发人员共享代码?搁置集的优点之一是我的同事开发人员可以在提交代码之前将代码放在我可以访问的地方进行代码审查。【参考方案2】:

您可以使用 DVCS,但从某种意义上说,这是一个杂项。 DVCS 中的“搁置”仅在本地存储您的更改。仅当您想要检查点以回滚您的工作时才有用,如果您通过进一步的工作破坏它,但最好是您希望将您的工作保存在服务器上。

在没有显式搁置命令的情况下在 SVN 中执行此操作的一种方法是将工作副本切换到不同的 svn 位置并在那里提交,而不是在主仓库中提交。这实际上就像创建一个临时分支并在您的工作期间处理该分支。我认为您甚至不必合并,因为 SVN 会在您切换时为您完成,因为您的本地修改将被保留。

很遗憾,您无法切换到不存在的位置,因此第一次执行此操作时,您必须创建要搁置的“分支”。我想整个事情都可以自动化。

【讨论】:

【参考方案3】:

如果您了解 SVN 分支的工作原理,那么在 SVN 中模拟 Shelve 就很容易了:

    在存储库中创建一个分支(在服务器上) 将本地副本切换到它 将更改提交到新分支 将本地副本切换回主干

当您准备好返回搁置的更改(“取消搁置”)时,只需将搁置分支合并回您的本地副本。

如果您对命令行 SVN 和 Tortoise SVN 不太了解,无法完成上述操作,这里有一个非常详细的分步说明,介绍如何在 Tortoise SVN 中进行操作:

    执行“SVN 更新”以将您的工作副本更新到最新版本的主干。这样,您的本地副本和主干之间的唯一区别就是您的更改。 从上下文菜单中选择“分支/标签” 默认选择“存储库中的 HEAD 版本”选项。保留它。 更改“To Url”以指定分支名称,例如http://server/repository/project1/branches/shelf1 选中“将工作副本切换到新分支/标签”框 点击确定创建分支并切换到它 执行“SVN Commit...”并将您的更改提交到新创建的分支 从上下文菜单中选择“切换...” 将“To URL”更改为中继 URL,例如http://server/repository/project1/trunk 点击确定切换回主干

有关更多详细信息以及与上述等效的命令行,请参阅此链接:Shelves in Subversion

【讨论】:

在大型存储库上,这是一个非常缓慢的过程(如果到处都有删除,则容易出错) @Samaursa,哪一步慢?此外,删除对我来说从来都不是问题,除非工作副本中有未版本控制的项目(您应该在切换之前清理这些项目,请阅读:(subversion.apache.org/faq.html#switch-problems) 切换到新的分支甚至主干。在我工作的存储库上非常非常慢(它非常大),甚至在我的一些复杂性增加的项目上(我为个人项目切换到 mercurial)。是的,未版本化的项目问题。一旦切换到 mercurial,我简直不敢相信一切突然变得如此简单。太糟糕了,他们不在工作中使用它。在 SVN 中搁置选项会很棒。 所有的切换看起来都像是一个杂物,恕我直言 svn 开始落后,而许多 scm 工具(例如 Perforce、TFS、Mercurial )具有此功能可以轻松保存临时代码在服务器上并轻松恢复等,等等【参考方案4】:

另一个选择是使用 TortoiseSvn 中的“创建补丁”工具来创建补丁文件并恢复更改。以后可以重新应用补丁文件以回到原来的位置。

如果您必须更新工作副本修订版,您最终可能仍会遇到一些粘性合并。

【讨论】:

【参考方案5】:

SVN 中的搁置从 1.10 版本开始推出,请参阅 Release Notes

【讨论】:

丢失本地更改以更新到最新版本是浪费时间。我不知道Git 是否也以同样的方式工作。 TFS 在这种情况下是最好的【参考方案6】:

TortoiseSVN 1.10 现在支持shelving:https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-shelving.html

【讨论】:

我想知道这是TortoiseSVN 功能还是Subversion 的功能?我在 svn 中找不到任何关于搁置的提及 这是一个新的 Subversion 功能,请参阅subversion.apache.org/docs/release-notes/1.10#shelving。 TortosieSvn 1.10 也添加了这个功能tortoisesvn.net/tsvn_1.10_releasenotes.html【参考方案7】:

SVN 升级了搁架 https://subversion.apache.org/docs/release-notes/1.11.html#shelving

您可以搁置的更改类型是对文件的可提交更改 和属性,但以下几种尚未 支持:

复制和移动 创建和删除目录

【讨论】:

当它不再是实验性的时候,这应该是答案,谢谢 tartarismo。这是一个方便的链接:cwiki.apache.org/confluence/display/SVN/…

以上是关于搁置在 TortoiseSVN 中?的主要内容,如果未能解决你的问题,请参考以下文章

TortoiseSVN提交提示423 Locked的解决办法

SVN服务器搭建--Subversio与TortoiseSVN的配置安装

TortoiseSVN 项目检出文件夹不完整问题

SVN文件加锁

将分支中的更改合并到主干中

SVN学习笔记二——客户端使用