2011-02-02 58 views
2

比方说,作为一个网站的构建过程的一部分,我一个Git项目复制到访问的Web目录,并删除.git目录。现在,几天后后我未来的公共网页目录的几次提交,什么是一个简单的方法来找出哪些/index.html的版本目前正在提供服务?如何将文件与git commit进行匹配?

# /var/www (public web dir): 
/index.html 

# Git repository: 
HEAD:/index.html 
HEAD~1:/index.html 
HEAD~2:/index.html 
. 
. <-- /var/www/index.html matches in here somewhere. 
. 
HEAD~N:/index.html 

我能想到做的唯一的事情就是编写一个脚本,在结帐的git文件的每一个版本,并检查各一个,但在我与GIT有限的经验,我发现,有通常是一些规范完成我梦寐以求的任何git任务的方式。

回答

3

使用Git描述是一个好主意。此外,您可以考虑使用Git存档生成一个压缩包,而不是克隆Git仓库,然后删除.git目录。保存档案并使用git-get-commit-tar-id查找提交。为了回答你的实际问题,使用git-hash-object来获得有问题的文件的blob,然后看到这个答案Which commit has this blob?

0

如果你有时间点,你知道该文件相匹配,您可以使用对开找到当文件发生变化,所以你并不需要看每个版本

如果你不知道任何与您需要检查所有修订版本的文件相匹配的修订版本

1

作为构建过程的一部分,请运行git describe > version_file并将该文件与其余文件一起放入。这样你总是可以参考文件的提交内容。

另一种选择,如果你希望在工作时在git中可以使用的信息是在构建过程中将提交的引用设置为构建过程的一部分,可以是分支或轻量级标记,并在每个构建中覆盖它。

更接近你的要求比我假设你彪最后一个选择,是使用.gitattributes的IDENT过滤器与文件的散列每个文件替换的$ id $。这个虽然问题是,只会让你找出哪些提交(多)包含文件的这个确切的版本,而不是其呈交(单)文件的来源。

+0

轻量级标签看起来像最直接的恕我直言 – MatrixFrog 2011-02-02 01:01:04

+0

伟大的提示git描述。目前我们手动标记每个版本,使其生产,但你的方法明显更好。尽管如此,这个答案对我描述的问题没有帮助。 – Triptych 2011-02-02 10:43:55

相关问题