Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 提交前预测修订号_Svn_Version_Revision - Fatal编程技术网

Svn 提交前预测修订号

Svn 提交前预测修订号,svn,version,revision,Svn,Version,Revision,提交前是否可以预测修订号 这将是有用的。我想在changelog中写入修订号,并将其与它提供的更改一起提交 我知道在我的提交到达回购之前,这个数字是可以更改的,但是如果知道的话还是很好的 我正在使用rst格式以纯文本形式编写变更日志 更多信息:每个提交消息都包含问题id,这也出现在变更日志的标题中 请坚持这个问题我问的是这是否可能以及如何实现,而不是这是否有意义或其他任何问题 为什么我需要这个?我需要这些信息,让部署应用程序的人员知道这些更改出现在哪个版本中,以便他可以相应地更新生产服务器。无

提交前是否可以预测修订号

这将是有用的。我想在changelog中写入修订号,并将其与它提供的更改一起提交

我知道在我的提交到达回购之前,这个数字是可以更改的,但是如果知道的话还是很好的

我正在使用rst格式以纯文本形式编写变更日志

更多信息:每个提交消息都包含问题id,这也出现在变更日志的标题中

请坚持这个问题
我问的是这是否可能以及如何实现,而不是这是否有意义或其他任何问题





为什么我需要这个?我需要这些信息,让部署应用程序的人员知道这些更改出现在哪个版本中,以便他可以相应地更新生产服务器。无论如何,他都会阅读变更日志,因为它包含有关数据库中的变更和其他重要内容的信息。如果他不使用
责怪
来查看此条目属于哪个修订版,那么会更容易一些。

如果您需要修订号来进行问题跟踪或某些功能跟踪,那么您可以使用提交后挂钩向您的问题/功能跟踪服务器发送一封包含整个提交日志消息的电子邮件。然后,问题追踪器可以解析此电子邮件,并将内容添加到相应的问题中。关键是您要针对其进行提交的问题编号。换句话说,您需要以特定格式在提交日志消息中指定问题编号,以便问题跟踪器可以在解析电子邮件时查找问题编号。

您可以制作一个预提交挂钩,在该挂钩中写入变更日志,并使用一个特殊标记来表示svn可以相应修改的变更日志区域


更多信息和

我建议在变更日志中写入您正在解决的问题编号,问题跟踪系统将自动扫描svn存储库,并在问题和修订号之间建立关联(许多问题跟踪都会这样做,JIRA、Redmine、Trac等)。
此外,使用修订号是不可靠的,因为在编写变更日志期间,其他人可以在之前(已经提到)进行提交。

按照要求坚持问题:不,这是不可能的-无论如何,不可靠。

这是一个先有鸡后有蛋的问题:只有在提交成功时才分配修订号,因此不能将其包含在提交中


你可以继续猜测“好吧,我们的版本是12345,所以下一个版本是12346”,但是当你猜的时候(即使需要几毫秒),我已经成功提交了一个版本,而你猜错了。请注意,这不是出于恶意——我没有任何机制知道您将要实施此操作。

有点黑客行为,但这应该可以在Linux上运行:如果您在提示下键入

svn up
答案的最后一行是

At revision 42.

其中42是整个svn服务器上最后一次提交的修订号。所以下一次提交将是这个+1。您可以使用以下命令获取它:

svn up | sed -ne 's/revision //p' | sed -e 's/[^0-9]*//g'
如果你足够快,你可以希望在你之前没有人会做出承诺。如果您有svn服务器的根目录的工作副本,您可以锁定它以防止任何提交,并在最后解锁它:

svn lock rootdir
svn unlock rootdir

这种方法避免了与工作副本的交互回购

使用存储库顶部
根目录下的info命令直接查询SVN服务器:

svn info https://myserver/svn/my-project-root-dir
这将显示如下内容:

Path: my-project-root-dir
URL: https://myserver/svn/my-project-root-dir
Relative URL: ^/
Repository Root: https://myserver/svn/my-project-root-dir
Repository UUID: 7f430767-c695-4424-a1c3-24180d67394b
Revision: 2255
Node Kind: directory
Last Changed Author: joe
Last Changed Rev: 2255
Last Changed Date: 2016-11-13 20:22:33 +0100
所以你的“下一个”svn版本是2256

比如说:

$ svn info https://myserver/svn/my-project-root-dir | grep "Last Changed Rev: " | awk -F ": " -- '{ print $2 }'
2255
或获取自动增量(bash):


如果其他人在您编写变更日志时提交该怎么办?这可能是可能的,但永远不会100%可靠(例如,其他人可以同时提交)。您需要提供更多关于您正在使用什么编写更改日志的信息,您是哪个平台的人等等@Pekka,我正在使用rst格式以纯文本形式编写更改日志在原始源代码的钩子脚本期间从不修改任何内容,因为这将破坏客户端/服务器的同步。可能在提交后强制更新以获取实际文件?这可以通过提交后钩子来完成吗?不,因为钩子脚本在服务器上运行,而工作副本在客户端上,所以别无选择。我认为变更日志是一条修订消息,这就是为什么我提出它的原因。我想这样就行了。发行号已经在变更日志中了。请回答我的问题,如果这是可能的,否则不要张贴无关的答案。最后,请严格回答。根据@Piskvor所说的,唯一的选择是在下次提交时将修订版本附加到changelog中。@seler:但这将为每次提交留下两个修订版本(最多):实际文件,以及具有以前修订版本号的无内容修订版本,对吗?更不用说一次提交触发另一次提交和触发另一次提交的危险了——这是一个教科书上的例子。是的,这会给我留下两次提交,一次提交代码,一次提交更新到changelog。这正是我想要避免的,也是我提出问题的原因。你的第一个答案是什么?欢迎非常好的是,你的答案格式正确,它显示出对细节的关注。
$ svn info https://myserver/svn/my-project-root-dir | grep "Last Changed Rev: " | awk -F ": " -- '{ print $2 }'
2255
$ R=$(svn info https://myserver/svn/my-project-root-dir  | grep "Last Changed Rev: " | awk -F ": " -- '{ print $2 }'); let R+=1; echo $R
2256