提交后如何获得“最后更改的修订”

时间:2018-11-13 11:54:40

标签: svn

我想要一种获取当前工作副本中最新更改的修订版的方法。我尝试这样做:

svn info --show-item last-changed-revision

这在大多数情况下都有效,但是如果我进行提交,则无效。例如:

$ svn info --show-item last-changed-revision
169680

$ svn add test.txt
A         test.txt

$ svn commit -m "test change"
Adding         test.txt
Transmitting file data .done
Committing transaction...
Committed revision 170547.

$ svn info --show-item last-changed-revision
169680

如您所见,它仍在提交后返回上一个修订。如果我更新我的工作副本,它将(主要)起作用:

$ svn update
Updating '.':
At revision 170547.

$ svn info --show-item last-changed-revision
170547

但是,这将获得自从我进行提交以来其他任何人所做的任何更改,这是我宁愿不必承担的风险。

是否有另一种方法可以使我的本地工作区知道我已提交的修订,而又没有真正的最新信息?

用例是一个构建工具,我们希望能够在对它进行修订后为其命名,但是我们也在构建过程中向分支机构提交了版本更新,这就是为什么我们通常不这样做的原因。从svn info调用中获得正确的修订版本。

编辑:在理查德·史密斯(Richard Smith)的建议下,我尝试在行尾添加*(也尝试了.)。

$ svn commit -m "test change 2"
Sending        test.txt
Transmitting file data .done
Committing transaction...
Committed revision 170555.

$ svn info --show-item last-changed-revision *
169680     android
169680     AssetBundles
170555     test.txt
169680     unity
...

$ svn info --show-item last-changed-revision .
170547

$ svn update
Updating '.':
At revision 170555.

$ svn info --show-item last-changed-revision .
170555

如您所见,即使在update之前,修订版实际上对已更新的文件(“ test.txt”)也是正确的,但顶层目录上的修订版不是正确的。在我看来,这是“错误的”,这既是因为顶层目录包含了已编辑的文件,所以这将是最近包含的更改,并且因为更新后确实会在目录中显示新修订。

编辑2:我考虑改用svn log,以为这显然包含了我刚刚所做的提交,但事实并非如此:

$ svn commit -m "Test 5"
Sending        test.txt
Transmitting file data .done
Committing transaction...
Committed revision 170617.

$ svn info --show-item last-changed-revision
170566

$ svn log -l 1
------------------------------------------------------------------------
r170566 | svend.hansen | 2018-11-13 15:06:08 +0100 (Tue, 13 Nov 2018) | 1 line

$ svn log -l 1 test.txt
------------------------------------------------------------------------
r170617 | svend.hansen | 2018-11-14 10:10:12 +0100 (Wed, 14 Nov 2018) | 1 line

$ svn info --show-item last-changed-revision test.txt
170617

因此,即使日志似乎也未返回与工作副本的实际状态相匹配的内容。这一定是颠覆中的错误,对不对?我想不出有什么充分的理由认为日志中将不会包含工作副本中实际存在的更改?

1 个答案:

答案 0 :(得分:0)

TLDR:您可以使用以下命令获取本地上可用的最新修订版本:

svnversion -c

还有更多关于SVN为什么如此工作的想法,以及我们的解决方案,而不仅仅是直接使用此修订版:

实际上,我可以考虑一下日志中不包含最后一次提交的原因:SVN允许您将更改提交到存储库,即使您没有更改该存储库也是如此。只要在这些更改中受影响的文件与您的受影响文件不重叠,它们就不会在本地存在。这意味着您可以提交修订版本10,而无需修订版本8和9。因此,当请求整个目录的日志时,它不会显示10,因为这样会丢失8和9。但是,它可以< / em>表示要求特定文件的最新修订版时为10,因为如果它们也影响了文件,则不允许您提交10而没有得到8和9,因此不会将它们包含在文件中。该文件的日志。

我猜这种工作方式源于SVN在存储库中没有项目,而只是很多文件夹,您可以签出任何子文件夹并对其进行更改,而无需考虑包含它的文件夹

这是我们决定工作的方式:

$ echo test6 > test.txt

$ svn commit -m "Test 6"
Sending        test.txt
Transmitting file data .done
Committing transaction...
Committed revision 170633.

$ svnversion -c
20414:170633

$ svn update -r 170633
Updating '.':
At revision 170633.

这样,我们都可以获取最新更改的修订版,并且确保在构建之前,工作副本的状态是SVN中表示的状态。