我想确切知道何时应该在svn中使用commit,update和merge命令。
在我签出项目并更改代码后,我应该使用更新,提交或合并来保持同步吗?
如果我错了,请纠正我:
update =将回购中的所有更改复制到您的本地项目。
commit =本地项目中的所有更改都将复制到仓库中。
merge =与上面相同,但你确定方向?
我什么时候使用上面的每个命令?
答案 0 :(得分:3)
我引用了SVN Book:
典型的工作周期如下:
更新您的工作副本。这涉及使用 svn update 命令。
进行更改。您将进行的最常见更改是编辑 到现有文件的内容。但有时你需要添加, 删除,复制和移动文件和目录 - svn add , svn delete , svn copy 和 svn move 命令处理这些结构 工作副本中的变化。
查看您的更改。 svn status 和 svn diff 命令至关重要 检查您在工作副本中所做的更改。
修复您的错误。没有人是完美的,所以当你检查你的变化时, 你可能会发现一些不太正确的东西。有时最简单 修复错误的方法是从头开始重新开始。 svn revert 命令将文件或目录恢复到未修改状态。
解决所有冲突(合并他人的更改)。在它需要的时间 您可以制作和审核您的更改,其他人可能已经制作并且 也发布了变化。您需要将他们的更改集成到 您的工作副本,以避免潜在的过时情况 当你试图发布自己的。同样, svn update 命令是 这样做的方法。如果这导致本地冲突,您需要 使用 svn resolve 命令解决这些问题。
发布(提交)您的更改。 svn commit 命令传输您的 对存储库的更改,如果它们被接受,则会创建 您修改的所有内容的最新版本。现在其他人可以看到 你的工作也是如此!
答案 1 :(得分:3)
让我们来看看"更新"和"合并"是不同的:
假设存储库X的修订历史如下所示:
...->2707->2708->2709->2710->2711
2711是X的最新修订号。 在版本2708和2711之间可能存在一个错误。您知道错误在修订版2707中不存在。它可能是在2708,2709,2710或2711引入的。基本上,您有兴趣知道引入了哪个提交错误。
一种做法是在每个修订号中返回(回滚)本地存储库中的更改,并检查错误是否仍然存在。假设错误是在修订版2709中引入的。您可以使用以下命令回滚您的提交:
$ svn update -r 2710
该错误仍然存在......
$ svn update -r 2709
该错误仍然存在......
$ svn update -r 2708
这个bug并不存在。这意味着修订版2709导致了这个错误。
然而,你可以同样做,
$ svn merge -r 2711:2708
两者之间的唯一区别是,如果有本地更改,svn update会引发标记并让你知道。您可以接受这些更改或还原,以便在运行svn diff
时没有任何更改。另一方面,svn merge将解决本地副本和存储库之间的差异。实用方面他们仍然会做同样的事情,但他们只是在这里展示行为差异。