如果我这样做:
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将变得与远程主分支相同,尽管它仍然使用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会这样做呢?
答案 0 :(得分:2)
如果目标路径已存在,则PIP VersionControl对象(pip.vcs.VersionControl)将检入check_destination。如果是这样,它调用update方法而不是获取。更新硬盘会默认重置分支。
您可以在上面和pip.vcs.git中引用的VersionControl类中看到确切的行为。
编辑:误读了一下代码。每次调用获取,但如果存储库已存在于目标,则更新(如果调用而不是克隆)。由于rev_options默认为“origin / master”,因此update会重置为此分支。
这很可能是一个错误!
答案 1 :(得分:-1)
pip install git+git://github.com/nimbis/django.git@branchorreviwant#egg=Django-dev