El backend de Git ( pip.vcs.git
) se basa en el hecho de que Git usa $CWD
como directorio del repositorio. El problema es que las variables de entorno $GIT_DIR
/ $GIT_WORK_TREE
pueden usarse para sobrescribir eso, y luego siempre se consultará el mismo repositorio en lugar del identificado en location
.
Entonces, en lugar de $CWD
, pip.vcs.git
siempre debe especificar --work-tree
.
http://git-scm.com/blog/2010/04/11/environment.html
Alternativamente, podría simplemente desarmar esas variables antes de invocar git
.
¿Podría proporcionar un caso de prueba que demuestre dónde falla exactamente pip?
Configuración:
$ mkvirtualenv pip-test
$ pip install -e [email protected]:jkbr/httpie.git#egg=httpie
Fallar:
$ 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
se establecerá, por ejemplo, en scripts invocados como ganchos de Git.
Puedo confirmar este problema, el mismo problema aquí.
Un ejemplo del mundo real que desencadena este comportamiento no deseado es ejecutar pip desde el interior del enlace posterior a la actualización de un repositorio de git.
Dentro del gancho, GIT_DIR se establecerá en '.', Lo que hace que pip opere en ese mismo repositorio en lugar de en el repositorio clonado por pip.
Además de configurar --work-tree explícitamente, otra solución sería desarmar GIT_DIR (y GIT_WORK_TREE).
Publiqué PR # 4666 para abordar esto. (Tenga en cuenta que las pruebas están bien a pesar de que el icono de Travis CI muestra una falla. Parece que últimamente hay escamas en las pruebas de Travis CI).
Comentario más útil
Puedo confirmar este problema, el mismo problema aquí.
Un ejemplo del mundo real que desencadena este comportamiento no deseado es ejecutar pip desde el interior del enlace posterior a la actualización de un repositorio de git.
Dentro del gancho, GIT_DIR se establecerá en '.', Lo que hace que pip opere en ese mismo repositorio en lugar de en el repositorio clonado por pip.
Además de configurar --work-tree explícitamente, otra solución sería desarmar GIT_DIR (y GIT_WORK_TREE).