59

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

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

这样的事情存在吗?任何人都可以建议任何方法在 GUI 中“破解”此功能吗?

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

搁置颠覆

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

4

7 回答 7

32

我不相信 SVN 在服务器产品中内置了这个功能。我也不相信在我使用过的任何客户端(包括 TortoiseSVN)中会出现类似的情况。

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

于 2008-08-12T05:30:34.047 回答
18

SVN 中的搁置从 1.10 版开始推出,请参阅发行说明

于 2018-04-03T11:52:21.257 回答
16

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

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

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

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

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

有关更多详细信息以及与上述等效的命令行,请参见此链接:
Subversion 中的货架

于 2011-06-01T14:39:17.137 回答
11

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

于 2018-04-24T07:29:47.727 回答
8

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

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

于 2012-02-14T13:26:54.683 回答
3

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

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

  • 复制和移动
  • 创建和删除目录
于 2018-11-09T10:35:09.507 回答
1

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

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

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

于 2011-05-26T12:02:12.303 回答