Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Git ไม่สามารถเปิด .git/FETCH_HEAD:ปฏิเสธการอนุญาต Solution

Git ต้องการสิทธิ์ในการเขียนไฟล์ในไดเร็กทอรีชื่อ .git/ ภายในโฟลเดอร์โครงการของคุณ หากบรรทัดคำสั่ง Git ไม่มีสิทธิ์เข้าถึงโฟลเดอร์นี้ คุณจะพบข้อผิดพลาดเช่น "Cannot open .git/FETCH_HEAD:Permission denied" เมื่อคุณพยายามดึงไฟล์

ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุของข้อผิดพลาด เราจะอธิบายตัวอย่างเพื่อให้คุณได้เรียนรู้วิธีแก้ไขในโปรแกรม

ไม่สามารถเปิด .git/FETCH_HEAD:ปฏิเสธการอนุญาต

ที่เก็บ Git มีโฟลเดอร์พิเศษที่เรียกว่า .git/ คุณอาจไม่เห็นโฟลเดอร์นี้เพราะถูกซ่อนไว้ สถานะที่ซ่อนอยู่ของโฟลเดอร์นี้จะแสดงด้วยเครื่องหมายจุด ("") ที่มาที่จุดเริ่มต้นของชื่อโฟลเดอร์

โฟลเดอร์นี้ประกอบด้วยข้อมูลเมตาต่างๆ เกี่ยวกับที่เก็บ โดยจะติดตามตัวเลือกการกำหนดค่าเฉพาะโปรเจ็กต์ของคุณ ข้อมูลอ้างอิงในโครงการของคุณ HEAD ปัจจุบันของคุณ และข้อมูลสำคัญอื่นๆ เกี่ยวกับที่เก็บของคุณ

Git ต้องการสิทธิ์อ่านและเขียนในโฟลเดอร์นี้ เนื่องจากเนื้อหาจะเปลี่ยนไปเมื่อคุณเรียกใช้คำสั่ง เช่น git config และ git pull

ตัวอย่างสถานการณ์

เราจะทำการโคลนที่เก็บที่เรียกว่า ck-git จาก GitHub ที่เก็บนี้มีไฟล์ชื่อ README.md ในการโคลนที่เก็บนี้ เราสามารถใช้คำสั่ง git clone:

sudo git clone https://github.com/Career-Karma-Tutorials/ck-git

เนื้อหาของไฟล์ README.md ของเราในปัจจุบันคือ:

# ck-git

เราต้องการเปลี่ยนไฟล์นี้ให้มี README.md ที่สื่อความหมายมากขึ้น เราจะเปิดไฟล์นี้ในโปรแกรมแก้ไขข้อความและเปลี่ยนเนื้อหาดังต่อไปนี้:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

# Career Karma Git Demo

พื้นที่เก็บข้อมูลพร้อมไฟล์สาธิตสำหรับบทช่วยสอน Git ของ Career Karma

นั่นดีกว่า. ไฟล์ของเราอธิบายวัตถุประสงค์ของที่เก็บ Git ได้แม่นยำยิ่งขึ้น ตอนนี้ มาเพิ่มการเปลี่ยนแปลงนี้ในพื้นที่จัดเตรียมเพื่อให้เราสร้างคอมมิตได้:

sudo git add README.md

Git รู้ดีว่าเราต้องการเพิ่ม README.md ในการคอมมิตครั้งต่อไป ในการทำให้การเปลี่ยนแปลงแสดงในที่เก็บระยะไกลของเรา เราต้องเพิ่มการเปลี่ยนแปลงเหล่านี้ในการคอมมิต:

sudo git commit -m "docs: Make README.md more descriptive"

ความมุ่งมั่นของเราพร้อมที่จะถูกส่งไปยังที่เก็บระยะไกลของเราแล้ว ก่อนที่เราจะกดโค้ด เราจะดึงที่เก็บเวอร์ชันระยะไกลของเรา สิ่งนี้จะช่วยให้เราแน่ใจว่าเราอัปเดตการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่เราโคลนที่เก็บ:

git pull

คำสั่งนี้ส่งคืน:

error: cannot open .git/FETCH_HEAD: Permission denied

ข้อผิดพลาดนี้บอกเราว่า Git ไม่สามารถเข้าถึงไฟล์การกำหนดค่า FETCH_HEAD ได้

การแก้ปัญหา

เราโคลนที่เก็บ ck-git โดยใช้คำสั่ง "sudo" ซึ่งหมายความว่าที่เก็บของเราถูกโคลนในฐานะผู้ใช้รูท เนื่องจากผู้ใช้รูทโคลนที่เก็บ ไฟล์ในที่เก็บจึงเป็นเจ้าของโดยผู้ใช้รูท

เราสามารถเห็นสิ่งนี้ได้โดยการรันคำสั่ง ls -la:

total 8
drwxr-xr-x   4 root   staff   128 Sep 17 07:15 .
drwxr-xr-x+ 90 James  staff  2880 Sep 17 07:15 ..
drwxr-xr-x  12 root   staff   384 Sep 17 07:15 .git
-rw-r--r--   1 root   staff 	1 Sep 17 07:15 README.md

ไฟล์ทั้งหมดในโฟลเดอร์ของเราเป็นของ "root" ซึ่งเป็นส่วนหนึ่งของบัญชี "staff" เมื่อเราพยายามดึงที่เก็บระยะไกลของเราโดยไม่ใช้ “sudo” ข้อผิดพลาดจะถูกส่งกลับ เนื่องจากบัญชีผู้ใช้มาตรฐานของเราไม่มีสิทธิ์แก้ไขไฟล์ในโฟลเดอร์

เพื่อแก้ไขปัญหานี้ เราจะเปลี่ยนความเป็นเจ้าของไฟล์ในโฟลเดอร์ของเรา เราสามารถทำได้โดยใช้คำสั่ง chown:

sudo chown -R james:staff .

คำสั่งนี้จะเปลี่ยนรายละเอียดการเป็นเจ้าของไฟล์และโฟลเดอร์ทั้งหมดในที่เก็บของเรา รวมถึงโฟลเดอร์ .git/ ตอนนี้เราเป็นเจ้าของไดเร็กทอรีและสามารถเข้าถึงโฟลเดอร์โปรเจ็กต์ได้อย่างเต็มที่ ตอนนี้เราควรจะสามารถดึงรหัสของเราได้:

git pull

คำสั่งนี้ดำเนินการได้สำเร็จและส่งคืน:

Already up to date.

ตอนนี้เราทราบแล้วว่าไม่มีการเปลี่ยนแปลงใดๆ กับที่เก็บระยะไกลของเราตั้งแต่เราดึงโค้ดครั้งล่าสุด เราดึงโค้ดครั้งล่าสุดเมื่อเราสร้างที่เก็บ

บทสรุป

ข้อผิดพลาด "Cannot open .git/FETCH_HEAD:Permission denied" ของ Git เกิดขึ้นเมื่อคุณพยายามดึงโค้ดจากที่เก็บระยะไกลเมื่อผู้ใช้ปัจจุบันไม่สามารถเข้าถึงไดเร็กทอรี .git/ ในโฟลเดอร์โครงการของคุณ

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