Eclipse 自动SVN版本号?

Eclipse 自动SVN版本号?,eclipse,svn,Eclipse,Svn,我使用Eclipse+ADT插件编写Android的东西。对于VCS,我使用SVN 我想完成的是:让我的程序在“关于”屏幕上显示它的SVN版本号。显然,这最好是自动的。我们不能假设程序在运行时可以访问网络,因此必须在编译时知道这些信息 今天我一直在研究这个话题,似乎这个看似普通的场景其实并不容易做到,或者我错过了一些东西。让我们看看: 1) 第一种方法:编写一个“pre-commit”SVN脚本,在每次提交时更新一个小文件,该文件名为“revision”,位于项目的根目录中。然后编写一个函数来打

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

我想完成的是:让我的程序在“关于”屏幕上显示它的SVN版本号。显然,这最好是自动的。我们不能假设程序在运行时可以访问网络,因此必须在编译时知道这些信息

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

1) 第一种方法:编写一个“pre-commit”SVN脚本,在每次提交时更新一个小文件,该文件名为“revision”,位于项目的根目录中。然后编写一个函数来打开这个文件,读取修订号并将其放在“About”屏幕上,这将是一件微不足道的事情

由于文件将在服务器端更新,因此这不太有效。所以想象一下这个场景:我检查rev。3708,修改、提交、预提交创建“修订版”,其中包含“3709”。我构建-我的本地“修订版”仍然包含“3708”。不太好

2) 我听说()SVN有一个聪明的特性,它能够替换文件中的各种魔术字符串,如果在SVN控制下的项目中的所有文件上设置适当的SVN元数据,那么其中一个就是“修订”

由于用户“Smashery”在上面的链接中提到的问题,这种方法不再有效——也就是说,SVN将只替换上次提交期间更改的文件中的“Revision”魔术字符串

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

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

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

有什么想法吗?

第三种方法(稍加修饰)是正确的方法,如果你想探索一些东西的话

  • 工作场所特定的设置必须共享并存储在存储库中:忽略
    。两个位置上的externalToolBuilders
    ,但根据您的需要和设置对Eclipse进行不同的配置
  • 除了所有操作系统都相同之外(不要忘记忽略
    /path/to/your/project/revision
    ,因为构建工件不能成为存储库的一部分),您可能希望在预构建事件中使用更强大的功能(在Win box上)和(在Linux box上)-svnrev还包含一些有用的阅读资料

使用搜索!!!至少在这里,在SOJFYI Badger上检查搜索查询,如果你真的阅读了我的帖子,你会注意到我做了几个小时的搜索,我从你的搜索查询中阅读了大部分帖子。好吧,你确实是对的-。externalToolBuilders不应该被签入。这看起来是到目前为止最好的选择,不过——老实说,我还是不喜欢。问题出在哪里?它不可伸缩——你必须在你使用的每台机器上重新进行,因此它是O(N),N=开发人员的数量(开发人员使用的机器数量更差)。如果能想出一个O(1)(即服务器端或完全隐藏在代码中)解决方案,那就更好了……嗯,我想得越多,我就越不喜欢它。我们没有那么多的开发人员,但是人们来来去去,更换机器——如果在我们的“关于”对话框中获得SVN修订版取决于他们在所有机器上都做正确的事情,我知道这不会真正起作用。“在“关于”对话框中以O(1)的方式自动显示SVN修订版,而不依赖于开发人员做正确的事情怎么样?”@Leszek-持续集成就是答案,或者将构建过程从开发人员转移到单个中心点。手工制作的post-commit钩子(总是开火或按需),作为乞丐的初始临时解决方案