你能确定从repo复制的文件的git版本吗?

时间:2013-05-09 17:23:23

标签: git github

我继承了一个使用CocoaAsyncSocket项目代码的XCode项目(可在GitHub上获得)。文件(AsyncSocket.m / h)被复制到XCode项目中,因此我没有git历史记录。

我需要找到我的文件版本。有没有办法可以比较我的文件(假设它们没有被编辑)和repo的历史记录,看看我有哪些提交?

2 个答案:

答案 0 :(得分:4)

首先使用git hash-object计算文件的哈希值 然后,您可以使用git ls-tree列出每个提交的哈希值。

我会用这样的东西:

file=AsyncSocket.m
hash=$(git hash-object $file)
for i in $(git rev-list  HEAD -- $file); do
   git ls-tree $i|grep -q $hash && echo $i
done|xargs -l git log -1 --oneline --decorate

答案 1 :(得分:2)

这不是我所知道的简单方法,特别是如果该文件的特定版本出现在整个项目的多个版本中(即该文件在版本之间没有变化)。

但是,您可以git hash-object -t blob AsyncSocket.h获取该文件的哈希值,然后对不同的版本标记重复使用git ls-tree -r <some_version_tag>^{tree} | grep <hash>以确定该文件包含的版本。当然,如果它被修改了,因为它是'#34;导入&#34;,除非你可以得到原始副本,否则它不会起作用......