تعتمد الواجهة الخلفية لـ 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
.
هل يمكنك تقديم حالة اختبار توضح مكان فشل النقطة بالضبط؟
اقامة:
$ 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 hooks.
يمكنني تأكيد هذه المشكلة ، نفس المشكلة هنا.
أحد الأمثلة الواقعية على تشغيل هذا السلوك غير المرغوب فيه هو تشغيل النقطة من داخل خطاف ما بعد التحديث في مستودع git.
سيتم تعيين GIT_DIR داخل الخطاف على "." ، مما يؤدي إلى عمل النقطة في هذا المستودع ذاته بدلاً من المستودع المستنسخ بواسطة النقطة.
إلى جانب إعداد شجرة العمل بشكل صريح ، سيكون هناك حل آخر يتمثل في إلغاء ضبط GIT_DIR (و GIT_WORK_TREE).
لقد أرسلت PR # 4666 لمعالجة هذا الأمر. (لاحظ أن الاختبارات جيدة على الرغم من أن رمز Travis CI يظهر فشلًا. يبدو أن هناك تقشرًا في اختبار Travis CI الذي يتم تشغيله مؤخرًا.)
التعليق الأكثر فائدة
يمكنني تأكيد هذه المشكلة ، نفس المشكلة هنا.
أحد الأمثلة الواقعية على تشغيل هذا السلوك غير المرغوب فيه هو تشغيل النقطة من داخل خطاف ما بعد التحديث في مستودع git.
سيتم تعيين GIT_DIR داخل الخطاف على "." ، مما يؤدي إلى عمل النقطة في هذا المستودع ذاته بدلاً من المستودع المستنسخ بواسطة النقطة.
إلى جانب إعداد شجرة العمل بشكل صريح ، سيكون هناك حل آخر يتمثل في إلغاء ضبط GIT_DIR (و GIT_WORK_TREE).