【问题标题】:Git: determine revision based on file contentsGit:根据文件内容确定修订版
【发布时间】:2011-09-12 12:22:25
【问题描述】:

我有一个来自使用 GIT 作为存储库的项目的文件。对于那个文件,我需要找出这个文件属于哪个版本。该文件在存储库之外是独立的(未跟踪),因此标准 git 命令不起作用。

有没有办法仅根据文件名和内容来确定该文件所属的修订版?

【问题讨论】:

  • 我不明白你的问题。您的文件是否被跟踪?
  • 在存储库之外意味着“未跟踪”。
  • @Robert“在存储库之外”,对我来说,意味着它从未被跟踪过,这意味着它没有版本,因此你的问题无效。我认为您正在寻找的措辞是该文件已在某个时间点被跟踪。

标签: git revision


【解决方案1】:

我不认为有一个一次性命令可以做到这一点 - git 的对象模型使得从 blob 返回到可能引用它的提交非常费力。不过,这是一种方法。首先,找到 git 将使用的文件的哈希值:

git hash-object foo.c

假设返回f414f31。然后你可以使用如下脚本:

for c in $(git rev-list --all)
do
   ( git ls-tree -r $c | grep f414f31 ) && echo Found the blob in commit: $c
done

... 显示包含该 blob 的所有提交。如果你想知道这些提交在哪些分支上,你可以这样做:

git branch -a --contains 1a2b3c4d

【讨论】:

  • 对正确散列的存在更可靠的检查是git ls-tree -r $c | cut -f 1 | cut -d' ' -f 3 | grep f414f31:原则上,其中一个文件名可以包含一个散列号(尽管这不是典型的),而这两个cut 命令精确选择 git 哈希(并省略文件名)。
猜你喜欢
  • 2014-06-19
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多