假设作为网站构建过程的一部分,我将git项目复制到Web可访问目录并删除.git目录。现在,几天之后我在公共网站目录之前提交了一些提交,有什么简单的方法来确定当前正在提供哪个版本的/index.html?
# /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任务我梦想着。
答案 0 :(得分:3)
使用git-describe是个好主意。此外,您可以考虑使用git-archive生成tarball,而不是克隆git存储库,然后删除.git目录。保留存档并使用git-get-commit-tar-id查找提交。要回答您的实际问题,请使用git-hash-object获取相关文件的blob,然后查看此Which commit has this blob?的答案
答案 1 :(得分:1)
作为构建过程的一部分,运行git describe > version_file
并将该文件与其余文件一起放入。这样,您始终可以参考文件的提交内容。
另一个选项是,如果你想在git工作时可以使用的信息是在构建过程中设置对提交的引用,可以是分支或轻量级标记,并在每次构建时覆盖它。
最接近您所问的内容的最终选项是使用.gitattributes中的ident过滤器将每个文件中的$ Id $替换为文件哈希。但问题是它只允许你弄清楚哪些提交(多个)包含这个文件的确切版本,而不是文件来自哪个提交(单个)。
答案 2 :(得分:0)
如果您知道文件匹配的时间点,您可以使用bisect查找文件何时更改,因此您无需查看每个版本
如果您不知道任何与该文件匹配的修订版,则需要检查所有修订版