Das Git-Backend ( pip.vcs.git
) beruht darauf, dass Git $CWD
als Repository-Verzeichnis verwendet. Das Problem ist, dass die Umgebungsvariablen $GIT_DIR
/ $GIT_WORK_TREE
verwendet werden können, um das zu überschreiben, und dann wird immer das gleiche Repository abgefragt, anstatt das in location
.
Statt $CWD
sollte pip.vcs.git
immer --work-tree
angeben.
http://git-scm.com/blog/2010/04/11/environment.html
Alternativ könnte es diese Variablen einfach aufheben, bevor git
.
Könnten Sie einen Testfall bereitstellen, der zeigt, wo genau pip fehlschlägt?
Aufstellen:
$ mkvirtualenv pip-test
$ pip install -e [email protected]:jkbr/httpie.git#egg=httpie
Scheitern:
$ 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
wird beispielsweise in Skripten gesetzt, die als Git-Hooks aufgerufen werden.
Ich kann dieses Problem bestätigen, gleiches Problem hier.
Ein reales Beispiel, das dieses unerwünschte Verhalten auslöst, ist das Ausführen von pip aus dem Post-Update-Hook eines Git-Repositorys.
Innerhalb des Hooks wird GIT_DIR auf '.' gesetzt, was bewirkt, dass pip auf genau diesem Repository arbeitet, anstatt auf dem von pip geklonten Repository.
Neben dem expliziten Setzen von --work-tree wäre eine andere Lösung das Aufheben von GIT_DIR (und GIT_WORK_TREE).
Ich habe PR #4666 gepostet, um dies zu beheben. (Beachten Sie, dass die Tests in Ordnung sind, auch wenn das Travis CI-Symbol einen Fehler anzeigt. In letzter Zeit scheint es bei den Travis CI-Testläufen zu Ausbrüchen zu geben.)
Hilfreichster Kommentar
Ich kann dieses Problem bestätigen, gleiches Problem hier.
Ein reales Beispiel, das dieses unerwünschte Verhalten auslöst, ist das Ausführen von pip aus dem Post-Update-Hook eines Git-Repositorys.
Innerhalb des Hooks wird GIT_DIR auf '.' gesetzt, was bewirkt, dass pip auf genau diesem Repository arbeitet, anstatt auf dem von pip geklonten Repository.
Neben dem expliziten Setzen von --work-tree wäre eine andere Lösung das Aufheben von GIT_DIR (und GIT_WORK_TREE).