Backend Git ( pip.vcs.git
) bergantung pada fakta bahwa Git menggunakan $CWD
sebagai direktori repositori. Masalahnya adalah variabel lingkungan $GIT_DIR
/ $GIT_WORK_TREE
dapat digunakan untuk menimpanya, dan kemudian repositori yang sama akan selalu ditanyakan alih-alih yang diidentifikasi dalam location
.
Jadi alih-alih $CWD
, pip.vcs.git
harus selalu menentukan --work-tree
.
http://git-scm.com/blog/2010/04/11/environment.html
Atau, itu bisa saja menghapus variabel-variabel itu sebelum menjalankan git
.
Bisakah Anda memberikan kasus uji yang menunjukkan di mana pip gagal tepatnya?
Mempersiapkan:
$ mkvirtualenv pip-test
$ pip install -e [email protected]:jkbr/httpie.git#egg=httpie
Gagal:
$ 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
akan ditetapkan misalnya dalam skrip yang dipanggil sebagai kait Git.
Saya dapat mengkonfirmasi masalah ini, masalah yang sama di sini.
Contoh dunia nyata yang memicu perilaku yang tidak diinginkan ini adalah menjalankan pip dari dalam kait pasca-pembaruan repositori git.
Di dalam kait, GIT_DIR akan disetel ke '.', yang menyebabkan pip beroperasi pada repositori tersebut alih-alih pada repositori yang dikloning oleh pip.
Selain mengatur --work-tree secara eksplisit, solusi lain adalah menghapus pengaturan GIT_DIR (dan GIT_WORK_TREE).
Saya memposting PR #4666 untuk mengatasi ini. (Perhatikan bahwa pengujiannya baik-baik saja meskipun ikon Travis CI menunjukkan kegagalan. Tampaknya ada kelemahan dalam pengujian Travis CI yang dijalankan belakangan ini.)
Komentar yang paling membantu
Saya dapat mengkonfirmasi masalah ini, masalah yang sama di sini.
Contoh dunia nyata yang memicu perilaku yang tidak diinginkan ini adalah menjalankan pip dari dalam kait pasca-pembaruan repositori git.
Di dalam kait, GIT_DIR akan disetel ke '.', yang menyebabkan pip beroperasi pada repositori tersebut alih-alih pada repositori yang dikloning oleh pip.
Selain mengatur --work-tree secara eksplisit, solusi lain adalah menghapus pengaturan GIT_DIR (dan GIT_WORK_TREE).