如何查看为此修补程序创建的git修订版?

时间:2018-01-25 08:38:21

标签: git

我正在尝试将修补程序应用于ffmpeg来修复open avfoundation audio capture bug。从该问题链接的patch被认为可以解决问题,但它已经有两年了,并且不能完全适用于当前的git代码。 (错误消息是:

$ git apply -v  ~/Downloads/avf.patch 
Checking patch libavdevice/avfoundation.m...
error: while searching for:
        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, YES);
    }

    lock_frames(ctx);

    ctx->video_stream_index = stream->index;

    avpriv_set_pts_info(stream, 64, 1, avf_time_base);

    image_buffer      = CMSampleBufferGetImageBuffer(ctx->current_frame);
    image_buffer_size = CVImageBufferGetEncodedSize(image_buffer);

    stream->codec->codec_id   = AV_CODEC_ID_RAWVIDEO;

error: patch failed: libavdevice/avfoundation.m:551
error: libavdevice/avfoundation.m: patch does not apply

)虽然这与这个问题没有关系,这与git有关。

补丁以以下行开头:

 libavdevice/avfoundation.m | 154 ++++++++++++++++++++++++++-------------------
 1 file changed, 91 insertions(+), 63 deletions(-)

diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
index 763e675..1ed9cef 100644
--- a/libavdevice/avfoundation.m
+++ b/libavdevice/avfoundation.m

以行

结束
     return 0;
-- 
2.5.0

所以我猜这个补丁适用于2.5.0版本,提交ID从763e675开始

如何检查正确的提交以便我可以应用补丁? git log | grep 763e675不会产生任何匹配。 $ git checkout 763e675给出了错误 fatal: reference is not a tree: 763e675

2 个答案:

答案 0 :(得分:3)

“index”行实际上给出了文件的哈希,而不是提交。 (2.5.0只是git的版本号。)你可以尝试做类似

的事情
for t in $(git rev-list HEAD libavdevice/avfoundation.m); do
  echo -n "$t: "
  git rev-parse $t:libavdevice/avfoundation.m
done | grep 763e675

查找当前分支上的提交(或代替HEAD的任何内容),其中该文件处于补丁的“之前”状态。

当然,如果您尝试将更改带回分支提示(通过合并或其他方式),您将不得不解决合并冲突,在这种情况下使用{{1}几乎相同首先。

答案 1 :(得分:0)

763e675..1ed9cef是用于生成补丁的 blobs 的哈希值。

键入git show 763e675以检查本地存储库中是否存在此特定版本的文件。

如果您拥有该文件的特定版本,请使用Davis Herring's answer查找包含此版本文件的提交。