【问题标题】:Identify the version (SHA) of the last time a specific file was committed确定上次提交特定文件的版本 (SHA)
【发布时间】:2020-02-03 14:58:56
【问题描述】:

我有一个包含多个脚本和文件的大型项目,所有这些都由 GIT 维护。在所有这些文件中,有一个文档我想在其上打印与该文件关联的提交版本 (SHA)。我的谷歌搜索给了我:

git rev-parse --short HEAD

这给了我项目的负责人。但是,如果我的文档未包含在我上次提交的更改中,则此版本不是我想要的版本。 This other stackoverflow answer 提议:

git log \-- c.rmd

但在控制台中此命令没有任何输出。

那么,有没有办法输出与特定文件/脚本关联的最新提交 SHA?为了使它更直观,我想要一个命令,当调用文件c.rmd 时,它会从特定树中输出a3

|
L__commit 4 - files a.r, b.r - SHA a4
|
L__commit 3 - files c.rmd - SHA a3
|
L__commit 2 - files a.r - SHA a2 
|
L__commit 1 - files a.r, b.r, c.rmd - SHA a1

最后,我希望在 R 的 RMarkdown 文档中自动打印该版本号。因此解决方案可以是纯 git 或来自特定的 R 包。

【问题讨论】:

  • 请注意,如果文件是通过克隆存储库创建的,则该文件实际上是 in 您在那里选择的提交。 Romain Valeri 正确地确定了您想要的不是这个提交,而是一些较旧的提交。也就是说,您希望 Git 做它通常的事情:从 last 提交开始并向后工作,一次提交一个。在每一点,它都应该比较给定的文件和previous提交中的副本。如果两者不匹配,您需要提交的哈希 ID,其中父副本不同。

标签: git git-log git-rev-parse


【解决方案1】:

要查找文件 path/to/myfile.txt 已修改的最后一次提交的 SHA,请转到

git rev-list --all -1 -- path/to/myfile.txt

对于短 SHA:

git log --all -1 --pretty=format:"%h" -- path/to/myfile.txt

【讨论】:

  • 对于包,您可以使用gitr 或者如果您的 git 启用了 ssh,那么 system(git_command) 也可以使用
  • 它有效,谢谢!你知道git rev-list 是不是类似于git rev-parse--short 的选项吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2014-10-27
相关资源
最近更新 更多