完成提交后如何获得"last-changed-revision"



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

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"(上的修订实际上也是正确的,但顶部目录上的修订不是。对我来说,这似乎是"不正确的",因为顶部目录包含编辑过的文件,所以它将是最近包含的更改,而且因为它确实在更新后显示了目录中的新修订。

EDIT 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

因此,即使是日志似乎也不会返回与工作副本的实际状态相匹配的内容。这一定是subversion中的一个bug,对吧?我想不出有什么好的理由让日志不包括实际在工作副本中的更改?

TLDR:您可以使用以下命令获取本地可用的最后一个更改版本:

svnversion -c

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

事实上,我可以想一个日志不包括最后一次提交的原因:SVN将允许您向存储库提交更改,即使该存储库中有您在本地没有的更改,只要这些更改中受影响的文件与受您影响的文件不重叠。这意味着您可以提交修订版10,而不需要修订版8和9。因此,当询问整个目录的日志时,它不能显示10,因为它缺少8和9。然而,它可以说,当要求特定文件的最新修订版时,它得到了10,因为如果8和9也影响了文件,它就不允许你提交10,因此它们不会只包含在该文件的日志中。

我想这种工作方式源于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中表示的状态。

最新更新