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

Oph*_*tan 6 python git pip

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

unu*_*tbu 4

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

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

mkdir ~/tmp/html5lib
cd ~/tmp/html5lib/
git init
Run Code Online (Sandbox Code Playgroud)

现在获取 git 树:

git remote add foreign https://github.com/html5lib/html5lib-python
git fetch foreign
Run Code Online (Sandbox Code Playgroud)

将安装的包复制到 git 存储库中:

rsync -a ~/.virtualenvs/muffy/lib/python3.4/site-packages/html5lib ~/tmp/html5lib/
Run Code Online (Sandbox Code Playgroud)

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

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