■ space · مسبار المطاردة · fig 1
Git يصعد عبر الشجرة مطاردًا .git، وينتهي عند الأول — خمسة أشياء تكسر هذه المطاردة، وأمر واحد يفرزها.
شغّل git rev-parse --show-toplevel || ls -a — أمر واحد يفرز الأسباب قبل أن تلمس أي شيء.
الجذر طُبع → أنت واقف خارج المستودع؛ cd موجود. لا .git في ls -a → لم يكن مستودعًا قط: أعد النسخ، لا git init.
خطأ في كل مستودع بالآلة → مُصدَّر GIT_DIR ; unset GIT_DIR.
01المطاردة
git يطارد إدخالًا واحدًا، صاعدًا، وينتهي عند الأول — الآلة تعيد تشغيل المطاردة
$ git rev-parse --show-toplevel
/home/you/projects/myapp
وُجد — المطاردة توقفت عند .GITالإصلاح — لا شيء يُصلَح: المطاردة سليمة
انطلاقsrc/api/ · طوابق ملموسة2 · الحكموُجد
أنت هنا → كتبت git pull هنا → المطاردة تقف هنا، عند أول .git تلقاه
02جدول الأسباب
خمسة أشياء تكسر المطاردة — طابق عرضك مع صف
| العرض | السبب المرجّح | الإصلاح |
|---|---|---|
خطأ في مشروع واحد،ls -a لا يُظهر.git | تنزيل ZIP / ملفات منسوخة | git clone من جديد |
| خطأ من مجلد فرعي، الجذر يعمل | واقف خارج الشجرة | cd "$(git rev-parse --show-toplevel)" |
| خطأ في كل دليل، حتى التي كانت تعمل | GIT_DIR مُصدَّر | unset GIT_DIR، أزله من ملف shell الشخصي |
| خطأ داخل مجلد submodule | submodule لم يُهيّأ قط | git submodule update --init --recursive |
.git ملف، والخطأ يثبت | مؤشر worktree/submodule معلّق | git worktree repair، غير ذلك أعد النسخ |
تحقّق:git rev-parse --show-toplevel → مسار جذر المستودع، بلا خطأ
03الأولان يكذبان
الجدول يصلح العروض؛ السببان الأولان هما حيث يكذب الذاكرة العضلية
cd إلىdocs/ أوsrc/api/ وعادة الصدفة تقول إن الجذر هنا — git يصعد، لا يجد شيئًا، ينصرفgit clone يرسم دائمًا مجلدًا فرعيًا باسم المستودع — الcheckout يجلس مستوى واحد تحت حيث تقف.git، بلا تاريخ، بلا remote.git بوصفها «خبثًا خفيًا» تنتهي هي الأخرى كذلكgit rev-parse --show-toplevel # prints the root when one exists
cd "$(git rev-parse --show-toplevel)" # jump there in one step
ls -a # no .git here
git clone <url> # the fix — again, not git init
git initلا يصلح مستودعًا — يرسم واحدًا فارغًا حيث تقف.
04الثلاثة الأخيرة تتبعك
التبقّية الثلاثة بيئية — الخطأ يُصدَّر، أو يعلّق، أو لم يولد
env | grep GIT_DIR # GIT_DIR=/some/old/path
unset GIT_DIR
~/.bashrc،~/.zshrc، أو غلاف CI يصدّره: أزله عندها.git ملفًا من سطر واحد يسمي دليلًا في موضع آخر من القرص؛ الهدف انتقل أو حُذف → يعلق المؤشر ويثبت الخطأ وإن كان.git هناك عين العين —git worktree repair يعيد الوصل ما يقدر عليه، وغير ذلك: أعد النسخ.git فيه بعد؛git submodule update --init --recursive من الأب يملؤهالغرباء غير المرصودين يركبون مع الأشجار المنسوخة — جولة clean تُوطنهم ما إن يقوم الاستنساخ
نهاية الأسباب الخمسة · لم يُجلب شيء · كل شيء محلي