Бэкэнд Git ( pip.vcs.git
) полагается на тот факт, что Git использует $CWD
в качестве каталога репозитория. Проблема в том, что переменные среды $GIT_DIR
/ $GIT_WORK_TREE
могут быть использованы для перезаписи этого, и тогда всегда будет запрашиваться один и тот же репозиторий вместо того, который указан в location
.
Поэтому вместо $CWD
, pip.vcs.git
всегда следует указывать --work-tree
.
http://git-scm.com/blog/2010/04/11/environment.html
В качестве альтернативы, он может просто сбросить эти переменные перед вызовом git
.
Не могли бы вы предоставить тестовый пример, демонстрирующий, где именно pip терпит неудачу?
Настраивать:
$ mkvirtualenv pip-test
$ pip install -e [email protected]:jkbr/httpie.git#egg=httpie
Неудача:
$ GIT_DIR=/foo pip freeze
Error when trying to get requirement for VCS system Command /usr/local/bin/git config remote.origin.url failed with error code 1 in /Users/jakub/.virtualenvs/pip-test/src/httpie, falling back to uneditable format
Could not determine repository location of ~/.virtualenvs/pip-test/src/httpie
Pygments==1.6
## !! Could not determine repository location
httpie==0.6.0
requests==1.2.3
wsgiref==0.1.2
GIT_DIR
будет установлен, например, в скриптах, вызываемых как хуки Git.
Я могу подтвердить эту проблему, здесь та же проблема.
Реальный пример, запускающий это нежелательное поведение, - это запуск pip изнутри обработчика post-update репозитория git.
Внутри хука GIT_DIR будет установлен в '.', Что заставит pip работать с этим самым репозиторием, а не с репозиторием, клонированным pip.
Помимо явной установки --work-tree, другим решением может быть отключение GIT_DIR (и GIT_WORK_TREE).
Я разместил PR № 4666, чтобы решить эту проблему. (Обратите внимание, что с тестами все в порядке, даже если значок Travis CI показывает сбой. В последнее время, похоже, наблюдается нестабильность в тестах Travis CI.)
Самый полезный комментарий
Я могу подтвердить эту проблему, здесь та же проблема.
Реальный пример, запускающий это нежелательное поведение, - это запуск pip изнутри обработчика post-update репозитория git.
Внутри хука GIT_DIR будет установлен в '.', Что заставит pip работать с этим самым репозиторием, а не с репозиторием, клонированным pip.
Помимо явной установки --work-tree, другим решением может быть отключение GIT_DIR (и GIT_WORK_TREE).