完成提交后如何获得 "last-changed-revision"
How can I get "last-changed-revision" after having done a commit
我想要一种方法来获取当前工作副本中的最新更改版本。我试过这样做:
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
如您所见,它仍然是 return提交后的最后修订版。如果我更新我的工作副本,它将(大部分)工作:
$ 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") 的修订实际上是正确的,但顶层目录的修订不是。这对我来说似乎是 "incorrect",因为顶层目录包含编辑过的文件,所以它是最近包含的更改,而且因为它 确实 在更新后的目录。
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
所以即使是日志似乎也不return 与工作副本的实际状态相匹配的东西。这一定是 subversion 中的错误,对吧?我想不出任何好的理由让日志不包含实际在工作副本中的更改?
TLDR: 您可以使用此命令获取本地最后可用的更改版本:
svnversion -c
这里有一些关于 SVN 为何以这种方式工作的更多想法,以及我们的解决方案,即不只是直接使用此修订版:
实际上,我可以想到日志不包含最后一次提交的原因:SVN 将允许您向存储库提交更改,即使其中有更改他们本地没有的存储库,只要受这些更改影响的文件不与受您影响的文件重叠。这意味着您可以在没有修订版 8 和 9 的情况下提交修订版 10。因此,当请求整个目录的日志时,它不能显示 10,因为它会丢失 8 和 9。但是,它 can 说它在请求特定文件的最新修订时得到 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 中表示的状态。
我想要一种方法来获取当前工作副本中的最新更改版本。我试过这样做:
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
如您所见,它仍然是 return提交后的最后修订版。如果我更新我的工作副本,它将(大部分)工作:
$ 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") 的修订实际上是正确的,但顶层目录的修订不是。这对我来说似乎是 "incorrect",因为顶层目录包含编辑过的文件,所以它是最近包含的更改,而且因为它 确实 在更新后的目录。
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
所以即使是日志似乎也不return 与工作副本的实际状态相匹配的东西。这一定是 subversion 中的错误,对吧?我想不出任何好的理由让日志不包含实际在工作副本中的更改?
TLDR: 您可以使用此命令获取本地最后可用的更改版本:
svnversion -c
这里有一些关于 SVN 为何以这种方式工作的更多想法,以及我们的解决方案,即不只是直接使用此修订版:
实际上,我可以想到日志不包含最后一次提交的原因:SVN 将允许您向存储库提交更改,即使其中有更改他们本地没有的存储库,只要受这些更改影响的文件不与受您影响的文件重叠。这意味着您可以在没有修订版 8 和 9 的情况下提交修订版 10。因此,当请求整个目录的日志时,它不能显示 10,因为它会丢失 8 和 9。但是,它 can 说它在请求特定文件的最新修订时得到 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 中表示的状态。