Ruby on rails 是否显示web应用程序中的最新提交值?

Ruby on rails 是否显示web应用程序中的最新提交值?,ruby-on-rails,git,version-control,github,amazon-elastic-beanstalk,beanstalk-svn,Ruby On Rails,Git,Version Control,Github,Amazon Elastic Beanstalk,Beanstalk Svn,我有一些Rails应用程序,我使用Git作为版本控制系统。我使用GitHub或Beanstalk作为存储库主机 我想说的理论上很简单。以某种方式在web应用程序的页脚中显示最新的提交ID号(哈希?)。因此,当我查看web应用程序时,我可以检查它是否正确提交和部署 我可以想象有两种方法来解决这个问题。第一个可能是Git的一个功能,它允许输出提交ID。第二个可能是提交后web钩子(Beanstalk和GitHub都允许这样做) 有人找到过这样做的方法吗,或者类似的方法吗 谢谢 Danny我相信您最终

我有一些Rails应用程序,我使用Git作为版本控制系统。我使用GitHub或Beanstalk作为存储库主机

我想说的理论上很简单。以某种方式在web应用程序的页脚中显示最新的提交ID号(哈希?)。因此,当我查看web应用程序时,我可以检查它是否正确提交和部署

我可以想象有两种方法来解决这个问题。第一个可能是Git的一个功能,它允许输出提交ID。第二个可能是提交后web钩子(Beanstalk和GitHub都允许这样做)

有人找到过这样做的方法吗,或者类似的方法吗

谢谢


Danny

我相信您最终想要做的是,作为“构建”过程(部署,您的案例?)的一部分,将
git rev parse HEAD
git descripe HEAD
的输出存储在一个文件中(更好,假设您标记了release)。然后,您的应用程序可以显示文件的内容。提交哈希实际上不能是任何跟踪内容的一部分(提交哈希取决于跟踪内容)。当然,如果你的应用程序没有回购协议,你可以简单地从应用程序中运行命令,但是只运行一次就更优雅了

顺便说一句,这是git本身采取的方法。它有一个基本上将
git descripe
输出转储到
git-VERSION-FILE
,然后编译该文件以提供版本信息


希望我没有误解您的情况——您说“Git的一个可能特性允许输出提交ID”,我有点困惑。这是git的一个非常基本的功能。

首先,回答您的问题,在ruby脚本中运行以下命令:

`git log -n1 | head -1`.split.last

第二:您使用beanstalk作为存储库主机是什么意思?beanstalk不是排队服务器吗?

首先,需要澄清:
提交后
钩子不能在提交中向文件添加提交id,因为提交id取决于顶层树(表示顶层目录)的提交,顶层树的id取决于其成员的id,而文件的id取决于其内容。。。此内容将包括提交id。不可能

但是让我们看看不同的解决方案:

实时,服务器端脚本 如果您的web应用程序是从非裸机git存储库实时部署的(我希望您知道您在做什么,将其推入非裸机存储库,即带有签出/工作树的存储库),那么您的web应用程序可以使用
git rev parse HEAD
(提供SHA-1提交),或者更好的是
git descripe--dirty
--dirty
选项将使返回的字符串包含信息,无论您在工作区域中是否有未注释的更改),或者
git descripe--always HEAD

git rev parse HEAD
给出的内容类似于
7611062b4ba6d1ebc4cf3e63c11204a4f5057660
,而
git description--dirty
给出的内容类似于
v1.7.3.2-95-g7611062
(这意味着使用
7611062
的缩写SHA-1进行提交,95在提交后进行提交,标记为“v1.7.3.2”),但这取决于您使用带注释的标记来标记发布

这种方法的一种变体是让web应用程序从位于同一文件系统的其他地方的存储库中检查头部,例如使用
git--git dir=/path/to/.git descripe HEAD

旁注:如果您使用Ruby,可能需要使用库。
git rev parse HEAD
version的等价物可能是(未经测试!):


git checkout提供的实时静态文件 编辑:新增章节2010-10-23 13:33+0000
如果您从非裸git存储库的签出(工作树)提供文件(不是您的情况),您可以使用
filter
'smudge'和'clean'命令在签出/签入时执行类似CVS的关键字扩展

.gittributes
文件中,您将定义
过滤器
属性应作用的文件:

*.rb filter=commitid
smudge
过滤器将在签出时将“$Revision:$”替换为例如“$Revision:v1.7.3.2-95-g7611062”(这意味着签出的文件将包含类似CVS的关键字)。当在git对象数据库(git存储库)中存储文件内容时,
clean
过滤器将删除扩展;否则,您将在比较文件等方面遇到问题


使用
git归档部署
如果您改为部署web应用程序,使其不驻留在live repository中(live repository有其怪癖,而且可能存在安全缺陷),并且您在某处使用
git archive
(例如,将其上传到托管站点的zip应用程序),您可以使用关键字替换

首先,您需要告诉Git,您希望将文件中的关键字替换为。您可以通过为给定文件设置
export subst
,例如通过添加到
.gittattributes
文件来实现这一点

*.rb export-subst *.rb导出subst 然后添加到包含/生成页脚的文件中,例如

$Format:%H$ $格式:%H$ 它将被提交散列所取代(参见手册页中的格式说明)


部署,使用一些部署脚本 如果您使用某种脚本/脚本机制来部署web应用程序,则应该遵循让部署脚本嵌入版本信息的步骤


您必须询问其他人如何设置(假设您将其用于部署)以post:deployment替换“app.rb”文件中的“@@VERSION@”占位符,结果为
git descripe--always HEAD
。。。Git project Makefile.

“希望我没有误解您的情况-您说的“Git的一个可能的特性允许输出提交ID”,我有点困惑。这是g的一个非常基本的功能 *.rb export-subst $Format:%H$