Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何知道从git安装pip包时使用了哪个提交?_Python_Git_Pip - Fatal编程技术网

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

Python 如何知道从git安装pip包时使用了哪个提交?,python,git,pip,Python,Git,Pip,如果我使用 签出的特定提交是否记录在某个位置 事实并非如此。如果您只是想知道-请在已安装分支的头部查找提交。如果要安装特定的提交,请命名提交。例如: pip install git+https://github.com/sqlobject/sqlobject.git@623a5802#egg=sqlobject 您可以使用查找最近的提交—下面唯一的修改是解决这样一个问题,即您正在将git树与已安装的包(而不是git存储库)进行比较: 因为安装的包可能缺少一些git的目录结构 存储库中,为git

如果我使用
签出的特定提交是否记录在某个位置

事实并非如此。如果您只是想知道-请在已安装分支的头部查找提交。如果要安装特定的提交,请命名提交。例如:

pip install git+https://github.com/sqlobject/sqlobject.git@623a5802#egg=sqlobject
您可以使用查找最近的提交—下面唯一的修改是解决这样一个问题,即您正在将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
for REV in $(git rev-list --all); do
    echo $(git diff --shortstat foreign/master $REV) $REV ;
done | sort -n
将安装的软件包复制到git repo中:

rsync -a ~/.virtualenvs/muffy/lib/python3.4/site-packages/html5lib ~/tmp/html5lib/
运行
git diff
将repo的当前状态(与已安装包的代码)与git树中的每个版本进行比较:

git remote add foreign https://github.com/html5lib/html5lib-python
git fetch foreign
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提交

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

一种可能的替代方法是使用
pip安装--editable
。在这种情况下,
pip
会将repo克隆到
$PREFIX/src/$egg\u name
(其中
$PREFIX
是您的virtualenv目录或当前工作目录),然后只需创建指向该路径的
egg链接即可。这样,您就可以轻松地检查克隆回购协议的当前版本


另一方面,以这种方式安装的包可能与以常规方式安装的包具有不同的文件结构。因此,在某些情况下,这将不起作用。

我可以很容易地找到我的包的提交哈希

我已经使用这个工具生成了我的python包结构。当我从GitLab存储库安装包时,在Python
Lib
目录中会生成一个名为
-.dist info
的目录

有一个文件
direct\u url.json
记录存储库的提交id:


我真的不知道这是从git repo安装时的通用解决方案,还是由Cookie Cutter安装程序生成的工件。

pip freeze显示了什么?setup.py的版本,它不是特定的。我想知道已经安装的模块的提交,从那时起,更多的提交被添加到分支中,那么你就不走运了。