【发布时间】: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
-
獾,如果你真的阅读了我的帖子,你会注意到我做了几个小时的搜索,并且我从你的搜索查询中阅读了大部分帖子。