รับ“ ร้ายแรง: ไม่ใช่ที่เก็บ git” เมื่อพยายามรีโมตเพิ่ม Git repo


439

ฉันแนะนำตัวให้รู้จักกับ Git โดยทำตามบทช่วยสอนนี้:

ทุกอย่างทำงานได้ดีจนกระทั่งส่วนที่ repo ถูกเพิ่มเข้าไปในเครื่องของฉัน:

git remote add nfsn ssh://USERNAME@NFSNSERVER/home/private/git/REPONAME.git

(หลังจากแทนที่ USERNAME, NFSNSERVER และ REPOAME ด้วยชื่อที่ถูกต้อง) ฉันได้รับข้อผิดพลาด:

fatal: Not a git repository (or any of the parent directories): .git

คุณช่วยฉันผ่านขั้นตอนนี้ไปได้ไหม


2
git initแต่ต้องแน่ใจว่าไม่มีไดเรกทอรีย่อยของคุณที่มี.gitโฟลเดอร์เป็นของตัวเอง
James Oravec

คำตอบ:


908

คุณเริ่มต้นพื้นที่เก็บข้อมูล Git ท้องถิ่นซึ่งควรจะเพิ่มรีโมตนี้หรือไม่

ไดเรกทอรีในพื้นที่ของคุณมี.gitโฟลเดอร์หรือไม่?

ลองgit initดู


2
ฉันทำขั้นตอนนี้ไปแล้ว แต่ต้องทำอีกครั้งหลังจากตั้งค่าบัญชีลานเครื่องยนต์ของฉันติดตั้งลานเครื่องยนต์
AVProgrammer

3
.gitโฟลเดอร์ของฉันหายไป เป็นเช่นเดียวกับลบโฟลเดอร์ที่เก็บแล้วgit init git clone ...สิ่งที่ฉันต้องทำคือpull
Francisco Corrales Morales

3
@FranciscoCorralesMorales หาก.gitโฟลเดอร์ของคุณหายไปคุณสามารถเรียกใช้git initอีกครั้งเพื่อสร้างใหม่ คุณจะต้องเพิ่มรีโมตอีกครั้งก่อนจึงจะสามารถดึงออกมาได้

3
ฉันได้รับข้อผิดพลาดเดียวกันเมื่อส่งการเปลี่ยนแปลงจากระบบท้องถิ่น พยายามคอมไพล์ initและมันทำงานได้ ขอบคุณ!
rbashish

6
ของฉันมี. git และฉันได้ทำ git init แล้ว แต่ฉันได้รับข้อผิดพลาดjalal@klein:~/computer_vision/py-faster-rcnn$ git add -A fatal: Not a git repository: caffe-fast-rcnn/../.git/modules/caffe-fast-rcnn
Mona Jalal

85

คุณจะได้รับข้อผิดพลาดนี้หากคุณพยายามใช้คำสั่ง Git เมื่อไดเรกทอรีการทำงานปัจจุบันของคุณไม่อยู่ในที่เก็บ Git นั่นเป็นเพราะโดยค่าเริ่มต้น Git จะค้นหา.gitไดเรกทอรีพื้นที่เก็บข้อมูล (ภายในรูทโครงการหรือไม่) ดังที่คำตอบของฉันที่ระบุไว้คือ "Git จะไม่แสดงบันทึกนอกจากว่าฉันอยู่ในไดเรกทอรีโครงการ" :

อ้างอิงถึงเอกสาร Linux Kernel Git อย่างเป็นทางการ , GIT_DIRเป็น [ตัวแปรสภาพแวดล้อม] ชุดที่จะมองหา.gitไดเรกทอรี (ในไดเรกทอรีการทำงานปัจจุบัน?) โดยค่าเริ่มต้น:

หากGIT_DIRตั้งค่าตัวแปรสภาพแวดล้อมแล้วจะระบุพา ธ ที่จะใช้แทนค่าดีฟอลต์.gitสำหรับฐานของที่เก็บ

คุณจะต้องcdลงในที่เก็บ / สำเนาการทำงานหรือคุณไม่ได้เริ่มต้นหรือโคลนที่เก็บในตอนแรกซึ่งในกรณีนี้คุณต้องเริ่มต้น repo ในไดเรกทอรีที่คุณต้องการวาง repo:

git init

หรือโคลนที่เก็บ

git clone <remote-url>
cd <repository>

13
+1 สำหรับการพูดถึง GIT_DIR ภายใน hooks ใน repo เปลือย GIT_DIR ถูกตั้งค่าเป็น '.' แทน '.git'
commonpike

+1 git initสำหรับ หลังจากอ่านคำตอบของคุณฉันใช้หลายครั้งในที่เก็บที่ฉันทำโคลนนิ่ง แต่ไม่รู้จัก ดังนั้นดูเหมือนว่าจะปลอดภัยเมื่อเรียกใช้จากต้นไม้ไดเรกทอรีที่ควรจะเป็นgit repositoryมีไฟล์ทั้งหมดในไดเรกทอรี git แต่อ้างว่าไม่เป็นfatal: Not a git repository (or any parent up to mount point
ElderDelp

34

ปัญหาของฉันคือว่าสำหรับ hiccups กับ OS ของฉันคำสั่งใด ๆ บนที่เก็บโลคัลของฉันสิ้นสุดลงด้วย "fatal: ไม่ใช่ที่เก็บ git (หรือไดเรกทอรีหลัก): .git" พร้อมคำสั่ง fsck

ปัญหาก็คือไฟล์ HEAD ที่ว่างเปล่า

ฉันสามารถค้นหาชื่อสาขาที่แท้จริงที่ฉันทำงานด้วย. git / refs / heads และจากนั้นฉันก็ทำสิ่งนี้:

echo 'ref: refs/heads/ML_#94_FILTER_TYPES_AND_SPECIAL_CHARS' > .git/HEAD

มันได้ผล


2
ไฟล์ HEAD ของฉันไม่ว่าด้วยเหตุผลใดดังนั้นฉันจึงทอร์เรียกคืนและแก้ไขปัญหา
Steven

1
คุณเป็นเพื่อนที่ดี บันทึกเวลาของฉันหลายครั้ง
Vaibhav Sah

นี่คือปัญหาของฉันด้วย ขอบคุณ
Carlos Rafael Ramirez

3
ฉันเปิด Visual Studio ในระหว่างการรีคอมไพล์และ Visual Studio สังเกตเห็นการเปลี่ยนแปลงไฟล์และหลังจากนั้นไม่นานฉันก็มีหน้าจอสีน้ำเงินแห่งความตาย หลังจากรีบูต .git / HEAD ก็เต็มไปด้วย NULLS และเมื่อฉันแทนที่ด้วยกัญชาเต็ม (5621afeffbabed40e3f386676068c45643644b7d) อ่านจากที่อื่นเช่น .git \ refs \ รีโมท \ กำเนิด \ ต้นแบบคอมไพล์เริ่มทำงานอีกครั้งฉันยังจำเป็นstackoverflow.com/questions / 1115854 / …ตามที่บอกให้ฉันลบ. git / index และฉันต้องการลบ. git / index.lock ก่อนทำการรีเซ็ต git ไม่
Ivan

1
ฉันเกือบสูญเสียความหวังที่จะได้งานคืน เพียงฉันคัดลอกและวางโซลูชันของคุณและมันก็มหัศจรรย์ ขอบคุณ
Mukesh Kumar

17

หมายเหตุ: สิ่งนี้ไม่ได้ตอบปัญหาที่พบบ่อยซึ่งเป็นปัญหาของ OP แต่ไปที่ปัญหาอื่นที่อาจเกิดข้อผิดพลาดขึ้น ฉันไม่รู้สึกอยากทำคำถามใหม่แค่เขียนคำตอบลงมาบอกฉันว่าฉันควรทำอย่างนั้นแทนหรือไม่: P

ฉันถึงสถานการณ์น่าจะเกิดจากความผิดพลาดบางอย่างของความผิดพลาดบางอย่างที่ฉันได้รับข้อผิดพลาดนี้แม้ว่า.gitจะมีอยู่จริงก็ตาม

smar@aaeru ~/P/Nominatim> git status
fatal: Not a git repository (or any of the parent directories): .git
smar@aaeru ~/P/Nominatim [128]> ls .git
COMMIT_EDITMSG  config*  FETCH_HEAD  HEAD  index  logs/  modules/  objects/  ORIG_HEAD packed-refs

เนื่องจากฉันไม่มีสิ่งใดที่ต้องการการสงวนรักษาจริงๆฉันเลยใช้วิธีหลอกตาและทำ ...

smar@aaeru ~/P/Nominatim [128]> git init
Reinitialized existing Git repository in /home/smar/Projektit/Nominatim/.git/

ยังไม่ทำงาน แต่เป็นตัวอย่างเช่นผลตอบแทนgit log fatal: bad default revision 'HEAD'รีโมตอยู่ที่นั่นดังนั้นฉันจึงทำgit fetch --allและจากนั้นเพียงgit reset --hard origin/masterเพื่อให้ตัวเองเข้าสู่สถานะที่ repo เคยเป็นมาก่อน

โปรดทราบว่าหากมีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดคุณสามารถเห็นการเปลี่ยนแปลงเหล่าgit statusนี้git diffและอื่น ๆ จากนั้นgit diff yourfile > patchก่อนที่จะทำการรีเซ็ต

อย่างน้อยสำหรับฉัน reflog ( git reflog) หายไปอย่างสมบูรณ์ ดังนั้นหากคุณทำการรีเซ็ตและมีการเปลี่ยนแปลงบางอย่างที่คุณต้องการป้องกันฉันไม่แน่ใจว่าคุณสามารถรับกลับคืนมาได้หลังจากรีเซ็ตอีกครั้ง ดังนั้นตรวจสอบให้แน่ใจว่าคุณมีการเปลี่ยนแปลงทั้งหมดที่คุณไม่สามารถสำรองข้อมูลได้ในท้ายที่สุดเพียงแค่คัดลอกโคลนก่อนลอง


ฉันได้รับปัญหา และลองวิธีที่ @Smar พูดถึง แต่ผลลัพธ์เดียวกันคือ "ถึงแก่ความตาย .... " แล้วจะทำอย่างไรต่อไป ข้อเสนอแนะใด ๆ
ความโกลาหล

1
ปัญหานี้เกิดขึ้นขณะใช้ Visual Studio git initและgit fetch --allแก้ไขปัญหา
มอร์ส

7
$ git status
fatal: Not a git repository:

เพียงพิมพ์ต่อไปนี้ใน cmd หรือ git shell หรือเทอร์มินัลอื่น ๆ :

$ git init

6

ปัญหานี้เกิดขึ้นกับฉันหลังจากที่ฉันย้ายที่ตั้งของโครงการคอมไพล์ในระบบไฟล์ เมื่อฉันรันคำสั่ง git ข้อผิดพลาดเกิดขึ้นเช่น:

$ git status
fatal: Not a git repository: /home/rospasta/path_old/gitprojecta/.git/modules/.travis

ฉันพบ/home/rospasta/path_old/gitprojecta/.travis/.gitเส้นทางที่แน่นอนของที่ตั้งเก่าของโครงการที่เขียน การอัปเดตเส้นทางนี้ของตำแหน่งใหม่ด้วยตนเองสามารถแก้ไขปัญหาให้ฉันได้

ดังนั้นปัญหาของฉันอาจหรือไม่อาจเป็นปัญหาคอมไพล์ แต่ HTH


5

ในกรณีที่ช่วยคนอื่นฉันได้รับข้อความแสดงข้อผิดพลาดนี้หลังจากลบ. git / objects /

ร้ายแรง: ไม่ใช่ที่เก็บ git (หรือไดเรกทอรีหลัก): .git

การกู้คืนจะช่วยแก้ไขปัญหา


4

ในบรรทัดคำสั่ง / CLI คุณจะได้รับข้อผิดพลาดนี้หากไดเรกทอรีปัจจุบันของคุณไม่ใช่ที่เก็บ ดังนั้นคุณต้องซีดีแผ่นแรกเข้าไปใน repo


4

อาจจะสายเกินไป แต่อาจเป็นอีกแนวทางหนึ่งที่จะช่วยผู้มาเยือนในอนาคต ก่อนลบ.gitไดเรกทอรีเก่า-

rm .git

จากนั้นเริ่มต้น repo คอมไพล์อีกครั้ง

git init

6
ควรสังเกตว่าสิ่งนี้ทำลายเมตาดาต้าคอมไพล์ทั้งหมดเช่นคอมมิท คุณจะเก็บข้อมูลของคุณ แต่ Git จะ "เริ่มต้นใหม่" - นี่อาจไม่ใช่สิ่งที่ดี
โจเซฟเอ

1
@JosephA .: คุณพูดถูก คุณมีคำแนะนำที่ดีกว่านี้หรือไม่? ฉันได้รับfatalข้อผิดพลาดถึงแม้จะ.gitมีโฟลเดอร์อยู่
Hassan Baig

แต่เฮ้ความมุ่งมั่นไม่ได้อยู่แล้วใน repo ระยะไกล? หรือสิ่งที่คุณต้องการจริงๆมุ่งมั่นใน HD / ในประเทศของคุณสำหรับ ... ? @JosephA
kevthanewversi

เพราะฉันคิดว่าคุณยังสามารถทำสิ่งต่าง ๆ เช่นคืนค่า Git, ตั้งค่า Git โดยไม่ต้องมีข้อมูลการกระทำในเครื่อง ... ใช่ไหม? @JosephA
kevthanewversi

1
นี่กำลังเช็ดทุกอย่าง! อาจเป็นวิธีที่แย่ที่สุดในการแก้ไขปัญหานี้
Richard Lalancette

4

ดูเหมือนว่าคุณจะไม่ไปที่โฟลเดอร์เฉพาะของคุณ ตัวอย่างเช่นถ้าฉันกำลังทำงานในโครงการชื่อ bugsBunny และมันถูกบันทึกไว้ในโฟลเดอร์ d: / work: code ดังนั้นก่อนอื่นคุณต้องไปที่โฟลเดอร์นั้นโดยใช้ cd d: / work / code / bugsBunny จากนั้นหลังจากนั้น สามารถใช้คำสั่ง git ของคุณต่อไป


4

แม้ว่าฉันจะมีปัญหาเดียวกัน ฉันเขียนเชลล์สคริปต์ซึ่งจะสำรองรหัสทั้งหมดของฉันไปยัง repo คอมไพล์ของฉันในวันทำงานของสัปดาห์ที่ 17:55 โดยใช้ crontab โดยดูบันทึกของ cron ฉันพบปัญหาดังกล่าวข้างต้น

ปัญหาข้างต้นเกิดขึ้นเมื่อคุณพยายามเรียกใช้คำสั่ง git จาก non-gir dir (เช่นจาก dir อื่น ๆ ซึ่งไม่ใช่สำเนาที่ใช้งานได้) ในการแก้ไขปัญหานี้เพิ่ม-C <git dir>ในคำสั่งคอมไพล์ที่คุณกำลังดำเนินการดังกล่าวว่า git statusจะเป็นgit -C /dir/to/git statusและจะเป็นgit add -Agit -C /dir/to/git -A


3

ในกรณีของฉันฉันใช้ Tortoise SVN และทำผิดพลาดด้วยการใช้ฟังก์ชั่น Visual Studio GIT ในเวลาเดียวกัน นั่นทำให้ Visual Studio ล็อคไฟล์ HEAD ภายในโฟลเดอร์. git ดังนั้น VS หรือ Tortoise จึงไม่สามารถเข้าถึง repo ได้และฉันได้รับข้อผิดพลาด "ร้ายแรง: ไม่ใช่ git repo ... " จากทั้งสองแอปพลิเคชัน

สารละลาย:

  1. เข้าไปในโฟลเดอร์. git และเปลี่ยนชื่อเป็น "HEAD.lock" เป็นเพียง "HEAD"
  2. ตัดสินใจเลือกแอปพลิเคชันผู้ดูแลระบบ GIT หนึ่งรายการและไม่ต้องแตะแอปพลิเคชันอื่น

3

เพื่อที่คุณจะต้องป้อนหนึ่งคำสั่งที่หายไปจากคำสั่ง bitbucket

โปรดลอง git init


2

ในกรณีของฉันฉันมีปัญหาเดียวกันในขณะที่ฉันลองใช้คำสั่ง git - (เช่นสถานะ git) โดยใช้ windows cmd ดังนั้นสิ่งที่ฉันทำคือหลังจากติดตั้ง git สำหรับหน้าต่างhttps://windows.github.com/ในตัวแปรสภาพแวดล้อมเพิ่มเส้นทางคลาสของ git บน "PATH" varaiable โดยปกติ git จะถูกติดตั้งใน C: / user / "ชื่อผู้ใช้" / appdata / local / git / bin เพิ่มสิ่งนี้บน PATH ในตัวแปรสภาพแวดล้อม

และอีกสิ่งหนึ่งใน cmd ไปที่ที่เก็บ git หรือ cd ของคุณที่ซึ่งโคลนของคุณอยู่บนหน้าต่างของคุณโดยปกติพวกเขาจะถูกเก็บไว้ในเอกสารภายใต้ github cd Document / Github / yourproject หลังจากนั้นคุณสามารถมีคำสั่ง git ได้

ขอบคุณ


2

ไปที่โฟลเดอร์ซอร์สของคุณที่จัดเก็บ repo ในพื้นที่ตัวอย่างของฉันพบได้ใน c: / GitSource คลิกขวาในขณะที่อยู่ในโฟลเดอร์คลิก git bash ที่นี่จากนั้นสถานะ git ....



2

ในกรณีของฉันไฟล์. git / HEAD เสียหาย (มีเฉพาะจุด) ดังนั้นฉันจึงแก้ไขและแทนที่เนื้อหาด้วย:

ref: refs/heads/master

และมันก็เริ่มทำงานอีกครั้ง


1

สำหรับฉันแล้วสิ่งนี้เกี่ยวข้องกับความเป็นเจ้าของที่ผิดรูปแบบใน.git/เส้นทาง ของฉัน rootเป็นเจ้าของ.git/HEADและ.git/indexป้องกันไม่ให้jenkinsผู้ใช้เรียกใช้งาน


1
สิ่งนี้ดูเหมือนจะไม่สามารถทำซ้ำได้ในบรรทัดคำสั่ง หลังจากตั้งค่าความเป็นเจ้าของ.git/HEADและ.git/indexเป็นroot:rootฉันยังคงสามารถเพิ่มรีโมทโดยไม่มีข้อผิดพลาด เมื่อฉันเปลี่ยนความเป็นเจ้าของของทั้ง.gitไดเรกทอรีที่ฉันได้รับข้อผิดพลาดที่แตกต่างกันroot error: could not lock config file .git/config: Permission denied
Kyle Strand

1

ข้อผิดพลาดด้านล่างดูเหมือนว่า Gits ไม่พบไฟล์. git ในไดเรกทอรีปัจจุบันดังนั้นจึงแสดงข้อความข้อผิดพลาด

ดังนั้นเปลี่ยนเป็นไดเรกทอรีเป็นที่เก็บไดเรกทอรีที่คุณเช็คเอาต์รหัสจากคอมไพล์แล้วรันคำสั่งนี้

  • $ git checkout

1

ในกรณีของฉันฉันพบว่าคอมไพล์ใน windows กลายเป็นเรื่องเล็กสำหรับตัวอักษรไดรฟ์จากบางจุด

หลังจากอัพเกรด git binary ในคำสั่ง windows cli ที่ใช้ในการหยุดทำงาน ตัวอย่างเช่นพา ธ ในสคริปต์คือD : \ bla \ file.txt ในขณะที่คำสั่ง git ยอมรับเฉพาะd : \ bla \ file.txt


1

git ทำงานได้ดีและในทันใดมันก็เริ่มแสดงfatal: Not a git repository (or any of the parent directories): .gitข้อความนี้

สำหรับฉันไม่แน่ใจว่ามีอะไรเสียหายในโฟลเดอร์. git ฉันทำgit clone ** newfolderและคัดลอกโฟลเดอร์. git ทั้งหมดไปยังโฟลเดอร์เสียหาย / เก่าที่ฉันทำการเปลี่ยนแปลงก่อนที่ git จะเริ่มแสดงข้อความแสดงข้อผิดพลาด ..

ทุกอย่างกลับมาเป็นปกติและคอมไพล์ยังจำไฟล์ที่ถูกเปลี่ยน / ไม่จัดฉากของฉันได้


0

กู้.git/ORIG_HEADคืนไฟล์ repo root และ. git อื่น ๆ

ฉันได้รับข้อผิดพลาดนี้หลังจากกู้คืนจากการสำรองข้อมูลดูเหมือนว่าไฟล์ที่อยู่ในไดเรกทอรีราก. git ไม่ได้ทำให้มันเป็นเป้าหมาย แต่โฟลเดอร์ย่อยทั้งหมดทำในตอนแรกฉันคิดว่า repo ไม่เสียหาย

ฉันแก้ไขโดยการกู้คืนไฟล์รูท


0

ฉันมีปัญหานี้กับปลั๊กอิน Jenkins Git หลังจากปัญหาการตรวจสอบสิทธิ์กับ GitLab Jenkins กำลังรายงาน 'hudson.plugins.git.GitException: [... ] stderr: GitLab: ไม่พบโครงการที่คุณกำลังค้นหา ร้ายแรง: ไม่สามารถอ่านจากที่เก็บระยะไกล '

อย่างไรก็ตามถ้าฉันทำ 'git clone' หรือ 'git fetch' โดยตรงจากกล่อง Jenkins (บรรทัดคำสั่ง) มันทำงานได้โดยไม่มีปัญหา

ปัญหานี้ได้รับการแก้ไขโดยการลบไดเรกทอรี / พื้นที่ทำงานทั้งหมดในโฟลเดอร์งาน Jenkins สำหรับงานเฉพาะนั้นเช่น

rm -Rf $JENKINS_HOME/jobs/myJenkinsJob/workspace/

สันนิษฐานว่าโฟลเดอร์. git ในเครื่องมีปัญหาเก่า / เสียหาย


0

นี่อาจเป็นเพราะสิทธิ์ ตรวจสอบสิทธิ์ของเจ้าของ / กลุ่มและตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์เพียงพอในการเข้าถึงข้อมูลนั้น ในกรณีของฉันฉันพบข้อผิดพลาดนี้เมื่อเรียกใช้ "สถานะ git" ใน repo ที่เจ้าของตั้งค่าไว้ที่ root: root การใช้ "สถานะ git" ในขณะที่รูทช่วยแก้ปัญหา อีกทางหนึ่งหากคุณไม่ต้องการให้ผู้ใช้ / กลุ่มเป็น root: รูทให้ repo เป็นสิ่งที่คุณสามารถเข้าถึงได้



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.