我继承了一个 XCode 项目,该项目使用来自 CocoaAsyncSocket 项目(可在 GitHub 上获得)中的代码。文件(AsyncSocket.m/h)被复制到 XCode 项目中,所以我没有 git 历史记录。
我需要找到我拥有的文件版本。有没有办法可以将我的文件(假设它们没有被编辑)与 repo 的历史记录进行比较,以查看我有哪个提交?
首先使用 . 计算文件的哈希值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
我知道这不是一种简单的方法,特别是如果该文件的特定版本出现在整个项目的多个版本中(即该文件在版本之间没有更改)。
但是,您可以git hash-object -t blob AsyncSocket.h
获取该文件的哈希值,然后git ls-tree -r <some_version_tag>^{tree} | grep <hash>
重复使用不同的版本标签来确定包含该文件的版本。当然,如果它在“导入”后无论如何都被修改过,除非你能拿到原始副本,否则这是行不通的......