【问题标题】:Committing a set of svn file/directory actions in a single check-in在一次签入中提交一组 svn 文件/目录操作
【发布时间】:2011-09-25 07:42:55
【问题描述】:

我最近决定重新构建我的 svn 存储库。这项工作包括我的存储库中的许多文件/目录操作(重命名、复制、移动和删除)。默认情况下,每个操作都需要在签入的上下文中提交。是否有任何方法可以在一次签入中提交大量这些操作?我使用 TortoiseSVN 和 Collabnet Subversion 1.6.x。

【问题讨论】:

  • 本地移动、复制或删除不应该在单独的提交中完成。

标签: svn version-control tortoisesvn


【解决方案1】:

TortoiseSVN 有 2 种不同的工具可供使用:

  • SVN Windows 资源管理器,以及集成的 TortoiseSVN 菜单。
  • TortoiseSVN 存储库浏览器。

存储库浏览器是直接在存储库上工作的 UI 工具,它不知道您何时“开始和结束事务”。因此,如果需要提交,每个命令本身就是一个提交。例如,我不知道有什么可能。

  • 我现在宣布开始提交会话。
  • 然后我会做一些更改、移动文件、重命名目录,...
  • 然后我完成我的提交会话。

当您使用集成到 Windows 资源管理器中的 TortoiseSVN 窗口菜单时,您首先必须检查整个存储库。然后您可以在本地工作一段时间,使用 SVN 变体进行重命名、移动和复制,一段时间后,一次提交所有更改。

命令行版本允许你做这两件事,但它的行为是一样的。来自documentation for move

此命令移动工作副本或存储库中的文件或目录。 ... 在存储库中移动文件(这是立即提交,因此需要提交消息):

$ svn move -m "Move a file" http://svn.red-bean.com/repos/foo.c \
                            http://svn.red-bean.com/repos/bar.c

因此,即使您编写了一个批处理文件来执行所有操作并调用它,如果您使用有效的变体,每个svn move(和svn copy ...)本身也必须有一个提交消息直接在存储库上。

因此,没有选项可以通过一次提交来重构您的存储库(仅使用存储库浏览器)。您必须检查整个存储库(至少是您要重组的部分),在本地执行 svn something 命令,然后在最后提交。这样做的缺点是您有很多网络流量,您需要在本地找到一些地方,并且花费更多时间。但这是进行单次提交的唯一方法。

也许svnadmin 有一个选项,但它本身有很多缺点。

【讨论】:

  • 检查整个存储库是一种方式。在工作副本中移动内容是通过鼠标右键拖放来完成的。
  • @mliebelt:看来Zerkms 和dialecticus 是对的。通过右键单击拖放文件时,TortoiseSVN 允许您执行一组操作(移动、复制、重命名),然后在一次签入内提交所有更改。请修改您的答案或添加另一个答案以涵盖此信息。那我接受你的回答。
  • 我添加了更多文档来区分在存储库浏览器中工作还是在本地副本上工作。我希望现在很清楚区别是什么。
  • 因此,您应该从您的回答中删除此类虚假信息:“所以不,没有选项可以通过一次提交(仅)重构您的存储库”
  • 已更正。在我看来,这是颠覆中的一个错误,因为要重组存储库,应该有一个工具可以在存储库(仅)上完成它,因此无需检查所有内容。示例:您有 50 个标签(包含您的发行版内容,每个 10 GB 大),并希望在一次提交中重命名它们。在本地做好也不是那么容易...
猜你喜欢
  • 2011-05-19
  • 2011-05-03
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多