3

如果我这样做:

pip install -e git://github.com/nimbis/django.git#egg=Django-dev

然后 pip 将从该存储库 ( 1.4.1-patched) 中获取默认分支并安装它,正如您在安装它的 src 目录中看到的那样:

cd ~/.virtualenvs/nimbis/src/django
[(1.4.1-patched) ~/.virtualenvs/nimbis/src/django]
$ git log | head -n4
commit a5d7c7b3a2d6a729bf5ede2254b5c75be9da94d7
Author: Lorin Hochstein <...>
Date:   Mon Jul 30 21:44:20 2012 -0400

如果我再次这样做,HEAD 将与远程 master 分支相同,尽管它仍然使用 1.4.1-patched (默认分支)作为分支名称。

$ pip install -e git://github.com/nimbis/django.git#egg=Django-dev
[(1.4.1-patched) lorin@nibbler ~/.virtualenvs/nimbis/src/django]
$ git log | head -n4
commit e567f439bdfc60e16c465220fdaa8ea8a0fae936
Merge: c0748a6 226a3e7
Author: Alex Gaynor <...>
Date:   Sun Jul 29 17:07:55 2012 -0700

我可以通过明确指定我想要的分支来解决问题,但是为什么 pip 会这样做呢?

4

2 回答 2

2

如果目标路径已存在,PIP 版本控制对象 (pip.vcs.VersionControl) 将检查 check_destination。如果是这样,它调用更新方法而不是获取。更新硬重置默认分支。

您可以在上面引用的 VersionControl 类和 pip.vcs.git 中看到确切的行为。

编辑:误读了代码。每次都会调用获取,但如果存储库已经存在于目标位置,则更新如果调用而不是克隆。由于 rev_options 默认为“origin/master”,更新重置到这个分支。

这很可能是一个错误!

于 2012-08-06T21:38:24.760 回答
-1
pip install git+git://github.com/nimbis/django.git@branchorreviwant#egg=Django-dev
于 2012-08-06T21:25:10.123 回答