如何从git安装pip包时知道使用了哪个提交?

发布于 2021-01-29 14:55:16

如果我使用https://pip.pypa.io/en/stable/reference/pip_install/#git从git安装软件包,
那么签出的特定提交是否记录在某处?

关注者
0
被浏览
129
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用knittl的想法来查找最接近的提交-
    以下唯一的修改是解决将git树与已安装的软件包而不是git存储库进行比较的事实:

    由于安装的软件包可能缺少git存储库的某些目录结构,因此请为git repo创建一个新目录。我将html5lib举一个例子:

    mkdir ~/tmp/html5lib
    cd ~/tmp/html5lib/
    git init
    

    现在获取git树:

    git remote add foreign https://github.com/html5lib/html5lib-python
    git fetch foreign
    

    将已安装的软件包复制到git repo中:

    rsync -a ~/.virtualenvs/muffy/lib/python3.4/site-packages/html5lib ~/tmp/html5lib/
    

    运行git diff以将仓库的当前状态(以及已安装的软件包的代码)与git树中的每个修订进行比较:

    for REV in $(git rev-list --all); do
        echo $(git diff --shortstat foreign/master $REV) $REV ;
    done | sort -n
    

    按文件更改的数量,插入的数量,删除的数量排序。输出将如下所示:

    1 file changed, 3 insertions(+), 1 deletion(-) 17499b9763a090f7715af49555d21fe4b558958b
    2 files changed, 10 insertions(+), 8 deletions(-) ec674a97243e76da43f06abfd0a891308f1ff801
    3 files changed, 17 insertions(+), 12 deletions(-) 1a28d721091a2c433c6e8471d14cbb75afd70d1c
    4 files changed, 18 insertions(+), 13 deletions(-) ff6111cd82191a2eb963d6d662c6da8fa2e7ddde
    6 files changed, 19 insertions(+), 19 deletions(-) ea0fafdbff732b1272140b696d6948054ed1d6d2
    

    每行的最后一项是关联的git commit。

    如果git历史记录很长,您将需要修改git rev-list --all为一系列提交。例如,用于git rev-list tag1..tag2在两个标签之间搜索。如果您大概知道该软件包的安装时间,则可能会对要使用的标签有一个很好的猜测。使用git tag以显示可能的变量的名称。有关更多选项,请参阅文档



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看