【问题标题】:Automatic SVN revision number?自动SVN修订号?
【发布时间】:2015-12-30 03:33:26
【问题描述】:

我使用 Eclipse+ADT 插件编写 Android 的东西。对于 VCS,我使用 SVN。

我要完成的工作:让我的程序在其“关于”屏幕中显示构建它的 SVN 修订号。显然,这最好是自动的。我们不能假设程序在运行时将具有网络访问权限,因此必须在编译时知道此信息。

今天我一直在研究这个话题,似乎这个看似常见的场景实际上并不容易做到,或者我错过了一些东西。让我们看看:

1) 第一种方法:编写一个“预提交”SVN 脚本,该脚本在每次提交时都会更新一个名为“revision”的小文件,并将位于我项目的根目录中。然后编写一个可以打开该文件的函数,读取修订号并将其放在“关于”屏幕中将是微不足道的。

这并不完全有效,因为文件将在服务器端更新。所以想象一下这种情况:我检查了 rev。 3708,修改,提交,预提交创建带有“3709”的“修订版”。我构建 - 我的本地“修订版”仍然包含“3708”。不好。

2) 我听说 (Getting SVN revision number into a program automatically) SVN 有一个聪明的功能,它能够替换文件中的各种魔术字符串,其中之一是“修订”,如果在一个文件中的所有文件上设置适当的 SVN 元数据SVN控制下的项目。

由于用户 'Smashery' 在上面的链接中提到的问题,这再次不起作用 - 即,SVN 只会替换在上次提交期间更改的文件中的 'Revision' 魔术字符串。

3) 编写一个“预构建”Eclipse 脚本,让它运行“svnversion /path/to/your/project”并将其输出保存在 /path/to/your/project/revision 中。

这又不太适用了——我的意思是,我已经尝试过编写这样的脚本实际上非常容易。如果我在单台计算机上工作,它会为我工作 - 但不幸的是我在两台计算机上工作,一台在家里的 Linux 机器和另一台在工作的 Windows 机器。我每天都在切换机器(白天是 Windows,晚上是家里的 Linux)。

这里的问题在于 Eclipse:一旦您添加了“预构建”脚本,它就会在您的项目文件夹 (.externalToolBuilders) 中创建一个新的隐藏目录,其中包含要运行的脚本(显然)。在我的两台机器(Linux 和 Windows)上,这条路径不能相同。为了使事情自动化,我需要将其签入到 SVN,一旦我这样做,除非我每天手动更正路径,否则事情只会在我的一台机器上运行!

有什么想法吗?

【问题讨论】:

  • 使用搜索!!!至少在这里检查this search-query,在 SO
  • 獾,如果你真的阅读了我的帖子,你会注意到我做了几个小时的搜索,并且我从你的搜索查询中阅读了大部分帖子。

标签: eclipse svn


【解决方案1】:

第三种方式(略微完善)可以并且将是正确的方式,如果你能理解一些事情

  • 工作场所特定设置不得共享并存储在存储库中:忽略两个位置上的 .externalToolBuilders,但根据您的需要和设置以不同方式配置 Eclipse
  • 除了所有操作系统都相同svnversion(别忘了也忽略/path/to/your/project/revision,因为构建工件不得成为存储库的一部分)你可能想以某种方式使用更强大的@ 987654321@(在 Win-box 上)和 svnrev(在 Linux-box 上)在 pre-build 事件中 - svnrev 也包含一些有用的阅读

【讨论】:

  • 好吧,确实你是对的 - .externalToolBuilders 不应该被签入。这看起来是迄今为止最好的选择,虽然 - 老实说,我仍然不喜欢它。问题?它不能扩展——你必须在你使用的每台机器上重新做,所以它是 O(N),N=开发人员数量(开发人员使用的机器数量更差)。如果能想出一个 O(1)(即服务器端或完全隐藏在代码中)的解决方案会更好......
  • 嗯,越想越不喜欢。我们没有那么多的开发人员,但是人们来来去去,更换机器——如果在我们的“关于”对话框中获得 SVN 修订版取决于他们所有人在他们所有的机器上做正确的事情,我知道这不会' t 真的有效。 '自动在'关于'对话框中显示 SVN 修订版怎么样,以 O(1) 的方式,不依赖于开发人员做正确的事情?'
  • @Leszek - 持续集成 是答案,和/或将构建过程从 DEV 转移到单个中心点。手工制作的提交后钩子(总是触发或按需)作为乞丐的初始临时解决方案
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多