Git เป็นระบบควบคุมเวอร์ชันแบบกระจาย (distributed version control system) ที่ใช้หลักในการติดตามการเปลี่ยนแปลงในซอร์สโค้ดขณะพัฒนาซอฟต์แวร์ GitHub เป็นบริการโฮสติ้งออนไลน์สำหรับการควบคุมเวอร์ชันแบบ Git ทั้งสองบริการนี้ใช้กันอย่างแพร่หลายในการพัฒนาซอฟต์แวร์ อย่างไรก็ตาม 近期 มีรายงานมากมายจากผู้ใช้ที่ไม่สามารถรันคำสั่ง "git" ได้
คุณไม่ได้อยู่คนเดียว คุณคิดว่าคุณเก่ง Git workflow แล้ว จนกระทั่งเจอข้อผิดพลาดที่ไม่เคยเห็น มันเกือบจะหลีกเลี่ยงไม่ได้ที่จะเจอข้อความข้อผิดพลาดที่สับสนและบางครั้งน่ากลัวขณะทำงานกับ Git ดังนั้น สิ่งแรกที่ต้องจดจำคือ ผู้ใช้ Git คนอื่นๆ เข้าใจความรู้สึกของคุณ
ผู้ใช้ Git ไม่แปลกหน้ากับข้อผิดพลาดน่าหงุดหงิดนี้ Git Fatal: 'Origin' does not appear to be a git repository และการหาสาเหตุรากอาจยาก หากคุณไม่รู้ว่าจะมองที่ไหน แต่ก่อนที่คุณจะทิ้ง Git คุณสามารถเรียนรู้ได้เร็วว่า อะไรทำให้ข้อผิดพลาดนี้ วิธีวินิจฉัย และวิธีป้องกันไม่ให้เกิดขึ้นในอนาคต
เคล็ดลับ: สแกน Mac ของคุณเพื่อตรวจสอบปัญหาประสิทธิภาพ ไฟล์ขยะ แอปที่เป็นอันตราย และภัยคุกคามด้านความปลอดภัย
ที่อาจทำให้ระบบมีปัญหาหรือทำงานช้าลง
ปัญหา Fatal: 'Origin' does not appear to be a git repository คืออะไร?
คำสั่ง git init เริ่มต้นการสร้าง Git repository ใหม่ คำสั่งนี้เพียงตั้งค่าโฟลเดอร์ให้เป็น Git repository ไม่ได้เชื่อม repository หนึ่งกับอีกตัว
คำสั่ง git clone ในทางตรงข้าม เชื่อม local repository กับ remote repository เพราะ Git รู้ว่าโค้ดของโปรเจ็กต์มาจากไหน และใช้ตำแหน่งที่คุณ clone เพื่อคาดการณ์ว่าคุณจะ push commits ไปที่ไหน
เมื่อคุณสร้าง repository ใหม่ และพยายาม commit โค้ด โดยไม่ได้บอก Git ก่อนว่าโค้ดควร push ไปที่ไหน คุณจะได้ข้อผิดพลาด "fatal: 'origin' does not appear to be a git repository"
Git Repository คืออะไร?
Git repositories มีชุดไฟล์จากเวอร์ชันต่างๆ ของโปรเจ็กต์ ไฟล์เหล่านี้ถูกนำเข้า từ repository ไปยังเซิร์ฟเวอร์ท้องถิ่นของผู้ใช้ เพื่ออัปเดตและแก้ไขเนื้อหาไฟล์ต่อไป VCS (Version Control System) ใช้สร้างเวอร์ชันเหล่านี้และจัดเก็บในตำแหน่งที่เรียกว่า repository การ Clone (โคลน) คือกระบวนการคัดลอกเนื้อหาจาก Git repository ที่มีอยู่ โดยใช้เครื่องมือ Git ต่างๆ
เมื่อกระบวนการ clone เสร็จสิ้น ผู้ใช้จะได้ repository ทั้งหมดบนเครื่อง local ของเขา/เธอ เมื่อ clone เสร็จ Git จะสมมติว่างานในอนาคตทั้งหมดบน repository จะทำโดยผู้ใช้ ผู้ใช้ยังสามารถสร้าง repository ใหม่ หรือลบ repository ที่มีอยู่ วิธีลบ repository ที่ง่ายที่สุดคือลบโฟลเดอร์ของ repository นั้นทิ้ง
เมื่อทำงานกับ Git repositories คุณโดยปฏิบัติทำงานกับไดเรกทอรีที่ถูกตั้งค่าเป็น Git projects Git สามารถใช้สร้างเกือบไดเรกทอรีใดก็ได้บนคอมพิวเตอร์ท้องถิ่นหรือเซิร์ฟเวอร์ระยะไกล
เพื่อวินิจฉัยอย่างถูกต้องว่า Git project ของคุณไม่ยอมรับคำสั่ง หรือ remote repositories ไม่ได้รับการยอมรับ คุณต้องเข้าใจก่อนว่า Git มองหาอะไรเมื่อพยายามโต้ตอบกับ repository
ไดเรกทอรีใดก็ได้ ทั้ง local และ remote ต้องผ่านการ initialize Git หมายความว่าคุณต้องรันคำสั่งต่อไปนี้: git init
หากคุณรันคำสั่งนี้ในไดเรกทอรีท้องถิ่น ไดเรกทอรีนั้นจะถูกแปลงเป็น Git repository ข้อความสำเร็จจะปรากฏ แสดงว่าคำสั่งสำเร็จ คุณจะสังเกตเห็นว่า Git repository ทุกตัวมี .git directory ที่จัดเก็บไฟล์สำคัญและจุดอ้างอิง
ในทางตรงข้าม มีการใช้ตัวเลือก –bare เป็นปกติเมื่อ initialize remote repository: git init –bare
สิ่งนี้สร้าง "bare" repository ซึ่งเป็นไดเรกทอรีว่างที่ initialize ด้วย Git และสามารถรับและรันคำสั่ง Git ที่ส่งไปได้ Bare repositories เป็น "hub" ที่ดี ซึ่งผู้ใช้ Git หนึ่งคนหรือมากกว่าสามารถ clone, push, และ pull โปรเจ็กต์ได้
Git repository ไม่ได้เชื่อมโยงกับ remote repository อัตโนมัติ คุณจะได้ข้อผิดพลาด "fatal: 'origin' does not appear to be a git repository" หากคุณพยายาม push การเปลี่ยนแปลงไปยัง remote repository โดยไม่ได้ระบุตำแหน่งของมันก่อน
สาเหตุของข้อผิดพลาด Fatal 'Origin' does not appear to be a git repository
เมื่อคุณพยายาม clone หรือรันคำสั่งอื่นๆ ในไดเรกทอรีที่ไม่ได้รับการยอมรับว่าเป็น Git repository ข้อผิดพลาด "fatal: 'origin' does not appear to be a git repository" จะเกิดขึ้น อาจเป็นเพราะไดเรกทอรีหรือ remote file path ไม่ได้ initialize Git หรือ file path ที่คุณพยายามเข้าถึงในฐานะ active repository ไม่ถูกต้อง นี่คือปัจจัยที่กระตุ้นข้อผิดพลาดนี้:
- Missing Origin (ขาด Origin): ข้อผิดพลาดนี้เกิดขึ้นเมื่อฟิลด์ "Origin" หายไป บางคำสั่งทำงานไม่ถูกต้อง หากข้อมูลอ้างอิง "Github-Fork" หายไป
- Incorrect URL (URL ไม่ถูกต้อง): ในบางกรณี การตั้งค่า URL ที่แอปพลิเคชันตั้งไว้ อาจไม่ถูกต้องและต้องเปลี่ยน ผลคือ บางคำสั่งอาจทำงานไม่ถูกต้อง
Git โดยปฏิบัติบ่งชี้ว่า repository ที่คุณพยายามทำงานอยู่ ไม่สามารถจดจำได้ในฐานะ Git project นี่คือเหตุผลที่ข้อผิดพลาดทำให้หงุดหงิด หากคุณเชื่อว่าคุณตั้งค่าทุกอย่างถูกต้องแล้ว แต่ไม่ต้องกังวล ข้อผิดพลาดอาจมาจาก typo (พิมพ์ผิด) เพียงอย่างเดียว
เราจะไปที่วิธีแก้ไขตอนนี้ เพื่อให้คุณมีความเข้าใจพื้นฐานเกี่ยวกับลักษณะของปัญหา อ่านต่อเพื่อดูว่าคุณสามารถทำอะไรเพื่อวินิจฉัยและรักษาข้อผิดพลาดนี้ได้
วิธี Troubleshoot ข้อผิดพลาด Fatal: 'Origin/Master' does not appear to be a git repository'
การได้รับข้อผิดพลาดนี้รบกวน เพราะมันรบกวนและใช้เวลา วิธีหนึ่งในการหลีกเลี่ยงข้อผิดพลาดอย่าง "fatal origin does not appear to be a git repository" คือการสแกนอุปกรณ์ของคุณเป็นประจำด้วย Outbyte MacAries เครื่องมือนี้ป้องกันไม่ให้ปัญหาเล็กๆ สะสมและกลายเป็นความวุ่นวาย
แต่หากคุณเจอข้อผิดพลาดนี้ ขั้นตอนเหล่านี้ควรแก้ไขได้ง่าย:
วิธีแก้ที่ 1: เพิ่ม Origin
เมื่อคุณพยายาม commit ไปยัง git repository ที่สร้างใหม่ด้วยคำสั่ง git init คุณจะได้ข้อผิดพลาด "fatal: 'origin' does not appear to be a git repository" เนื่องจาก git init ไม่เชื่อม local repository กับ remote repository คุณสามารถทดสอบได้โดยพิมพ์: git remote -v
หากไม่มี remote repository ชื่อ origin คุณควรเพิ่มมันด้วยตนเองโดยทำตามวิธีแก้ด้านล่าง
- กดปุ่ม "Command" และ "Space" พร้อมกัน ควรเปิด Spotlight
- พิมพ์ "Terminal" และกด "Return"
- ป้อนคำสั่งต่อไปนี้และกด "Return": git remote -v
- ตรวจสอบว่ามี remote repository ชื่อ "Origin" รายการหรือไม่
- หากไม่มี หมายความว่า "Origin" ของคุณหายไป
- ใช้คำสั่งต่อไปนี้เพื่อเพิ่ม Origin: git remote add origin url/to/your/fork
ตรวจสอบว่าปัญหายังคงอยู่หรือไม่
วิธีแก้ที่ 2: ตรวจสอบ file path ของ remote repository ของคุณ
เมื่อพยายาม clone, push, หรือ pull เนื้อหาจาก remote repository ผู้ใช้ Git จะเจอข้อผิดพลาด "origin does not appear to be a git repository fatal" บ่อยครั้ง ตรวจสอบให้แน่ใจว่า file path ของ remote repository ถูกต้อง มีหลายวิธีทำ
หากคุณกำลัง clone ให้ตรวจสอบว่าคุณมีสิทธิ์เข้าถึง repository ที่จำเป็น เว้นแต่คุณ clone public repository บน GitHub คุณอาจเชื่อมต่อผ่าน SSH คุณควรตรวจสอบ syntax ของคำสั่ง clone ด้วย นี่คือตัวอย่างคำสั่ง clone พื้นฐานที่เชื่อมต่อกับ repository ผ่าน HTTP: git clone https://github.com/WordPress/WordPress.git
เมื่อคุณรันคำสั่งนี้ใน terminal emulator ที่คุณชอบ มันจะสร้างไดเรกทอรีชื่อ "WordPress" ที่มีไฟล์หลัก WordPress ทั้งหมด มันจะรวมถึงไดเรกทอรี .git และประวัติโปรเจ็กต์ทั้งหมด ดังนั้น ไดเรกทอรีนี้จะเป็น local git repository ที่ทำงานได้เต็มรูปแบบ มันยังมีข้อมูล remote repository (ที่ GitHub) ตั้งค่าไว้อย่างถูกต้อง
อย่างไรก็cosse หากคุณติดต่อกับ private server ที่ไม่มีการเข้าถึง HTTP คุณต้องปรับ syntax นี้เพื่อรวม server user ที่มีสิทธิ์เหมาะสม นี่คือเหตุผลที่เมื่อตั้งค่า private Git server การสร้าง "Git" user พิเศษที่มีสิทธิ์เข้าถึง repository เป็นความคิดที่ดี: git clone admin@wsxdn.com:/home/user/production.git
ไม่เหมือนแบบ HTTP จาก GitHub clone URL นี้รวม admin@wsxdn.com ในกรณีนี้ "user" คือ server user ที่มีสิทธิ์เข้าถึงและสิทธิพิเศษต่อ Git repository ของเซิร์ฟเวอร์ ชื่อโฮสต์ โดเมนเนม หรือ IP address ของเซิร์ฟเวอร์ที่คุณพยายามติดต่อคือปลายทาง การประกาศ user และ server ถูกแยกจาก file path โดย colon (:)
File path สำคัญในกรณีนี้ ตำแหน่งและชื่อที่แน่นอนของ repository ของคุณ ถูกบ่งชี้โดย file path Repository ในตัวอย่างก่อนหน้านี้เป็นไดเรกทอรีชื่อ production.git
ใช้ .git extension สำหรับไดเรกทอรี repository ของคุณเสมอ ไดเรกทอรี production.git อยู่ใน home directory ของ user ซึ่งคือ /home/user
คุณต้องทำซ้ำ syntax นี้อย่างแม่นยำ มิฉะนั้นคุณจะได้ข้อผิดพลาด "fatal: 'origin' does not appear to be a git repository"
วิธีแก้ที่ 3: เปลี่ยน Origin เป็น Master
หากคุณพยายาม pull จาก Master คุณต้องเปลี่ยน origin เป็น Master ก่อนที่จะพยายามเพิ่มหรือลบ remote repository ดังนั้น ในขั้นตอนนี้ เราจะเปลี่ยน Origin เป็น Master เพื่อทำเช่นนี้:
- กดปุ่ม "Command" และ "Space" พร้อมกัน ควรเปิด Spotlight
- พิมพ์ "Terminal" และกด "Return"
- ป้อนคำสั่งที่นี่เพื่อเปลี่ยน Origin เป็น master: git pull origin master
ตรวจสอบว่าปัญหา "fatal: 'origin' does not appear to be a git repository" หายไปแล้วหรือไม่
วิธีแก้ที่ 4: แก้ไขไฟล์ HEAD ที่เสียหาย
หากขั้นตอน troubleshooting ข้างต้นไม่แก้ปัญหาของคุณ คุณอาจมีปัญหากับไฟล์ HEAD ไฟล์นี้มีหนึ่งบรรทัดที่ทำหน้าที่เป็น pointer ไปยัง branch ปัจจุบันของคุณ
หากคุณใหม่กับ Git คำว่า "branch" อาจแปลกใหม่ด้วย Branch คือเวอร์ชันของ repository ของคุณ ที่คุณสามารถใช้ทดสอบการเปลี่ยนแปลงโปรเจ็กต์ ทุก repository มี main branch ที่ทำหน้าที่เป็นแหล่งข้อมูลจริง และควรเป็นเวอร์ชันที่ deploy ใน production หากคุณต้องการเปลี่ยนแปลง main branch คุณสามารถสร้างเวอร์ชันแยกของโปรเจ็กต์ หรือ branch เพื่อทดสอบการเปลี่ยนแปลง Git จะอัปเดตไฟล์ HEAD ให้สะท้อน branch ปัจจุบันที่คุณทำงาน เมื่อคุณสร้าง branch ใหม่
อย่างไรก็ตาม ในบางกรณี ไฟล์ HEAD อาจเสียหาย ทำให้เกิดข้อผิดพลาด Fatal: 'Origin' does not appear to be a Git Repository เพื่อตรวจสอบไฟล์ HEAD คุณสามารถใช้คำสั่ง cat .git/HEAD เพื่อพิมพ์เนื้อหา
เมื่อคุณรันคำสั่งนี้ คุณควรเห็นชื่อ branch ปัจจุบันของคุณ หากมันไม่รวม branch ปัจจุบันที่คุณทำงานอยู่ คุณต้องอัปเดตไฟล์ คุณสามารถทำได้โดยพิมพ์คำสั่งต่อไปนี้: echo 'ref: refs/heads/<branch_name>' > .git/HEAD
สรุป
คุณไม่ต้องเครียดเมื่อเจอข้อผิดพลาด Fatal: 'Origin' does not appear to be a Git Repository หากคุณได้รับปัญหานี้ จำไว้ว่า Git พยายามแจ้งเตือนว่ current working directory ของคุณไม่ได้รับการติดตาม ดังนั้น ทำตามขั้นตอนพื้นฐานที่ระบุในบทความนี้ สรุปด้านล่าง:
- เพิ่ม Origin ด้วยตนเอง
- ตรวจสอบว่าคุณพิมพ์ชื่อไดเรกทอรีถูกต้อง
- ตรวจสอบว่าคุณสร้าง repository ถูกต้อง หากไดเรกทอรีขาด .git repository ให้ใช้ git init เพื่อ initialize repository ให้ถูกต้อง หรือ clone repository ที่มีอยู่
- ตรวจสอบว่าไฟล์ HEAD บน branch ปัจจุบันของคุณ มีข้อมูลถูกต้อง หากไม่ ให้เปลี่ยนเนื้อหาไฟล์เป็น ref: refs/heads/<branch_name>
การทำตามขั้นตอน troubleshooting ที่ระบุข้างต้น จะช่วยให้คุณแก้ไขข้อผิดพลาดได้ในเกือบทุกกรณี เพียงภายในไม่กี่นาที