กำลังพยายามดึงคอมไพล์ด้วยข้อผิดพลาด: ไม่สามารถเปิด. git / FETCH_HEAD: การอนุญาตถูกปฏิเสธ


209

ช่วยฉันด้วยฉันกำลังพยายามเรียกใช้สิ่งนี้ในเครื่องปลายทาง:

asgard@asgard-A7N8X2-0:~/CollegePortal$ git pull
error: cannot open .git/FETCH_HEAD: Permission denied

จากนั้นฉันลองอันนี้

asgard@asgard-A7N8X2-0:~/CollegePortal$ sudo git pull
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ช่วยฉันฉันไม่เข้าใจปัญหานี้


คุณได้เพิ่มกุญแจสาธารณะของคุณไปยังบัญชี GitHub?
madhead

3
คุณมีสิทธิ์เขียนสำหรับไดเรกทอรีท้องถิ่นและไฟล์ที่คุณพยายามดึง? นอกจากนี้อาจsudoไม่ช่วยอะไรได้เลยเนื่องจากต้องการการเข้าถึงคีย์ ssh ของคุณ (ไม่ใช่รูท)
Benjamin Bannier

ฉันมีปัญหานี้และแก้ไขได้โดยให้สิทธิ์ผู้ใช้ของฉันในการปรับเปลี่ยน & การเข้าถึงแบบเต็มไปยังโฟลเดอร์นั้น (Windows)
Frank

คำตอบ:


193

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

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


ฉันกำลังเผชิญกับปัญหาที่คล้ายกันและฉันไม่แน่ใจว่าฉันสามารถอนุญาตให้www-dataผู้ใช้ของฉันเพื่อปรับปรุง.gitไดเรกทอรี ฉันกำลังเรียกเชลล์สคริปต์โดยใช้ php บน http ในเบราว์เซอร์ รายละเอียดที่นี่
KillABug

13
สิ่งนี้มักจะเกิดขึ้นเมื่อคุณเผลอลืมว่าคุณวิ่งsudo suและทำหน้าที่เป็นรากใน repo ง่าย ๆsudo chown -R <username> .ในไดเรกทอรีนั้นใช้เวทย์มนตร์!
Ray

149

ตรวจสอบว่าคุณมีสิทธิ์เพียงพอใน .git/ไดเรกทอรี คุณควรมีสิทธิ์ในการเขียน คุณสามารถตั้งค่าได้ด้วยคำสั่งต่อไปนี้

ไปที่โฟลเดอร์โครงการของคุณ:

chown -R youruser:yourgroup .git/

1
สิ่งนี้ให้ฉันchown: youruser: Invalid argument
zakdances

43
มันควรจะเป็นchown -R youruser .git/
ผสมผสาน

1
ฉันต้องchown .git/และโฟลเดอร์หลักของมันเพื่อให้ทำงานได้
zadubz

ดูเหมือนว่าจะเป็นปัญหาที่พบบ่อยมาก .. ตกลงถ้าคุณทำงานกับผู้ใช้ที่แตกต่างกันและบางสิ่งจากผู้ใช้รายอื่นคุณเปลี่ยนสิทธิ์ของคุณแล้วมันค่อนข้างยุ่งยาก
RenéHöhle

หาก chownไม่ทำงานนอกจากนั้นให้เรียกใช้คำสั่งนี้ด้วยsudo chmod 0777 -R .git/
Kiran

48

หากคุณต้องการให้สิทธิ์แก่กลุ่ม

sudo chmod g+w .git -R

ทำงานได้ดีที่สุดสำหรับฉัน

สำหรับ MacOS

sudo chmod -R g+w .git 

29

นี่เป็นปัญหาสิทธิ์ UNIX ห้ามใช้sudoสำหรับการโคลนที่เก็บ คุณไม่มีคีย์ ssh เหมือนกับรูทและคุณไม่ควรทำงานเป็นรูท ลองls -laค้นหาการอนุญาตบนไฟล์และใช้chmod(หรือsudo chown) เพื่อแก้ไข หวังว่าจะช่วย


ตรงนี้! ฉันเจอปัญหานี้เพราะฉันต้องทำsudo cloneเพื่อยอมรับข้อตกลงใบอนุญาตใหม่ของ XCode คำตอบคือการยอมรับข้อตกลงแล้วโคลนด้วยไม่มี sudo
Barnaby

24

ในกรณีของฉันทำงานได้ดีหลังจากนั้น:

rm -f .git/FETCH_HEAD

git branch -u

1
มันได้ผลสำหรับฉันด้วยในกรณีนี้
P. Mergey

สำหรับฉันมันก็เป็นทางออกด้วย ขอบคุณสำหรับตัวเลือกการแก้ปัญหานี้
Francisco Maria Calisto

21

คำตอบสำหรับปัญหานี้ให้แน่ใจว่า. git / FETCH_HEAD มีสิทธิ์ในการเขียนและคุณจะได้รับการตั้งค่าทั้งหมด

ฉันมีปัญหานี้ใน Windows และแก้ไขได้โดยให้สิทธิ์การเขียน

ในยูนิกซ์หนึ่งสามารถเรียกใช้chmod a+rw .git/FETCH_HEADจากที่เก็บโครงการหลังจากที่มันควรจะทำงาน


งานกวนที่มีเพียงอย่างเดียวว่าปัญหาได้รับอนุญาตอยู่ใน.git/FETCH_HEAD .git
Cœur

17

ลองวิธีนี้

ขั้นตอนที่ 1:ตรวจสอบก่อนว่าคุณเป็นใคร มันจะส่งคืนชื่อผู้ใช้ปัจจุบันเช่นอูบุนตู

$ whoami 

ขั้นตอนที่ 2:จากนั้นตั้งค่าการอนุญาตให้กับผู้ใช้ปัจจุบันของคุณในกรณีนั้นUbuntuโดย

sudo chown -R ubuntu .git/

สิ่งนี้ใช้ได้กับฉันในขณะที่ใช้งานการติดตั้งวาทกรรมบน Amazon lightsail Ubuntu
Jide

11

ในกรณีของฉันฉันมีสิทธิ์เข้าถึงเพื่ออ่านไฟล์. git / FETCH_HEAD เท่านั้น ฉันต้องทำ "sudo chmod g + w .git / FETCH_HEAD" เพื่อให้สามารถดึงคำขอได้


งานกวนที่มีเพียงอย่างเดียวว่าปัญหาได้รับอนุญาตอยู่ใน.git/FETCH_HEAD .git
Cœur

ฉันต้องอนุญาตให้เขียนเข้าถึงโฟลเดอร์ git สำหรับกลุ่มsudo chmod g+w .git/FETCH_HEAD
William

sudo chmod g+w .git/FETCH_HEADทางออกที่สมบูรณ์แบบ
Rishi Kulshreshtha

9

ฉันมีปัญหาแรก (ปฏิเสธสิทธิ์ FETCH_HEAD) บน Windows

ฉันแก้ไขได้โดยรัน Git Bash ในฐานะผู้ดูแลระบบ (คลิกขวาเรียกใช้ในฐานะผู้ดูแลระบบ)


9

หากคุณยังไม่ได้เพิ่มตัวเองในกลุ่มที่เป็นเจ้าของ.git/คุณควร

sudo usermod -a -G $(stat -c '%G' .git) $USER
sudo chmod g+u .git -R
sudo chmod g+u .gitignore
su - $USER

สิ่งนี้ทำอะไร:

  1. ค้นหากลุ่มที่เป็นเจ้าของ .git/และเพิ่มผู้ใช้ของคุณในกลุ่มนั้น
  2. .git/ทำให้แน่ใจว่าสมาชิกในกลุ่มมีสิทธิ์เดียวกันเป็นเจ้าของ
  3. ทำซ้ำสิ่งนี้.gitignoreซึ่งคุณอาจต้องใช้
  4. นำคุณออกจากระบบและกลับเข้ามาใหม่เพื่อรีเฟรชการอนุญาตการเป็นสมาชิกกลุ่ม

หากคุณเพิ่งทำอะไรบางอย่างเช่นนี้ (เพิ่มตัวเองกับกลุ่มที่เป็นเจ้าของ.git/) แล้วคุณจะต้องออกจากระบบและกลับมาในก่อนที่คุณจะสามารถที่จะเขียนถึงในช่วงของคุณ.git/FETCH_HEADgit pull


7

ตั้งค่าการอนุญาตให้กับผู้ใช้ปัจจุบันของคุณโดยการรันคำสั่ง

$ sudo chown -R <username> .git/



4

ใช้ Windows 7 เมื่อฉันมีปัญหานี้มันเป็นเพราะฉันได้ซ่อนโฟลเดอร์. git สิทธิ์ถูกต้องมันถูกซ่อนอยู่ แสดงโฟลเดอร์ที่ได้รับการแก้ไข


ไดเรกทอรีที่ซ่อนอยู่ใครจะ thunk
Ian Newland


3

สิ่งนี้ใช้ได้กับฉัน:

  1. คลิกขวาที่โฟลเดอร์. git
  2. คลิกรับข้อมูล
  3. กำหนดสิทธิ์ให้กับผู้ใช้ของคุณ
  4. คลิกที่ไอคอนฟันเฟืองและคลิกนำไปใช้กับรายการที่ล้อมรอบ

ไม่มีสิทธิ์ปฏิเสธข้อผิดพลาดในคอมไพล์ 🎉


2

ดูที่เจ้าของและกลุ่มของ.gitไดเรกทอรีด้วย (ก่อนไปที่ไดเรกทอรีหลักของ. git) ll .gitดูที่กลุ่มและเจ้าของไดเรกทอรีเพิ่มผู้ใช้ของคุณไปยังกลุ่มของเจ้าของด้วยsudo usermod -a -G yourusername groupsofonwnerแล้วออกจากระบบ => เข้าสู่ระบบและทุกอย่างทำงาน .

ดังนั้นในหน้าร้อน

  1. ไปที่ไดเรกทอรีหลักของคอมไพล์

    $cd your path
    
  2. หาเจ้าของกลุ่ม.gitdirecotry

    $ll .git     
    
  3. เพิ่มผู้ใช้ของคุณในกลุ่มนั้น

    $usermod -a -G yourusername ownergroupofgit
    
  4. ออกจากระบบและเข้าสู่ระบบเพื่อการเปลี่ยนแปลงนี้จะมีผล

  5. สนุกกับมัน ;)


2

มีปัญหานี้เมื่อโฟลเดอร์. git ถูกซ่อนและไฟล์ทั้งหมดในนั้นจะถูกซ่อนด้วย สร้างเฉพาะโฟลเดอร์. git ที่ซ่อนอยู่โดยไม่ต้องอัปเดตไฟล์แบบเรียกซ้ำและมันจะทำงาน


2

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

ลองใช้ทั้งสองวิธีที่เหมาะกับคุณ

1- sudo chmod g+w .git -R

ถ้ามันไม่ได้ผลโปรดลองวิธีแก้ปัญหาต่อไปหวังว่ามันจะแก้ปัญหาของคุณ

2 - rm -f .git/FETCH_HEAD

1

ฉันมีข้อความนี้เมื่อใช้ส่วนขยาย git สำหรับ windows การแก้ไขของฉันคือการปิดส่วนขยาย git จากนั้นเปิดอีกครั้งในฐานะผู้ดูแลระบบ



1

ปัญหานี้เกิดขึ้นเมื่อคุณให้สิทธิ์ไม่เพียงพอกับโฟลเดอร์. git เพื่อแก้ปัญหานี้ -

  1. ก่อนอื่นนำทางไปยังไดเรกทอรีทำงานของคุณ
  2. ป้อนคำสั่งนี้ -

    sudo chmod a + rw .git -R

หวังว่ามันจะช่วย .. !!


1

ฉันมีข้อผิดพลาดเดียวกันแน่นอน แต่ในกรณีของฉันปัญหาคือผลลัพธ์ของการสร้าง Apache ใหม่หลังจากอัปเกรดเป็นเวอร์ชัน PHP เรื่องสั้นสั้นฉันลืมติดตั้งโมดูล Apache 'suexec'

มันไม่เกี่ยวอะไรกับกลุ่มหรือความเป็นเจ้าของ แค่ใช้เวลาสองวันในการคิดใครบางคนยิงฉัน ...


1

ในกรณีของฉันฉันมีระบบดูอัลบูต (Windows 10 และ Linux) พร้อมโฟลเดอร์โครงการในดิสก์ NTFS ปรากฎว่าในการปรับปรุงอื่น Windows 10 เปิดใช้งานด้วยตัวเอง "เริ่มต้นอย่างรวดเร็ว" ในการตั้งค่า หลังจากที่ฉันไม่ได้ตรวจสอบใน Windows - "ข้อผิดพลาด: ไม่สามารถเปิด. git / FETCH_HEAD: การอนุญาตถูกปฏิเสธ" ใน Linux ได้หายไป


0

ฉันได้รับสิ่งนี้เพราะฉันมีบัญชีผู้ใช้มากกว่า 1 บัญชีในกล่องของฉัน ฉันเข้าสู่ระบบในฐานะผู้ใช้ A และอยู่ในไดเรกทอรีสำหรับผู้ใช้ B. ผู้ใช้ A ไม่มีสิทธิ์ในการใช้ข้อมูลของผู้ใช้ B เมื่อฉันรู้ว่าฉันไม่ได้อยู่ที่ฉันคิดว่าฉันอยู่ในระบบไฟล์ข้อผิดพลาดนี้สมเหตุสมผล


0

หากคุณพบปัญหาเดียวกันในเซิร์ฟเวอร์ windows คุณจะต้องเรียกใช้บรรทัดคำสั่งที่มีสิทธิ์เพียงพอเช่นสิทธิ์ผู้ดูแลระบบ


0

สำหรับผู้ใช้ MacOS (ถ้า High Sierra หรือรุ่นที่สูงกว่า) ใช้สิ่งนี้:

sudo chown -R $(whoami) $(brew --prefix)/*

-1

TL; DR: ในระบบ Dual Boot ให้ปิด Fast Startup สำหรับ Windows

ฉันมีปัญหานี้ในระบบบูตคู่ Ubuntu / Windows ฉันไม่สามารถเขียนอะไรในพาร์ติชั่นใด ๆ ที่แชร์กับ Windows (พาร์ติชัน NTFS)

ฉันเพิ่งติดตั้งใหม่ทั้งสองและลืมเปลี่ยน"การเริ่มต้นอย่างรวดเร็ว"ใน Windows ทุกอย่างกลับไปเป็นปกติหลังจากที่ฉันรีบูตใน windows และปิดคุณลักษณะนั้นและรีสตาร์ทอีกครั้ง


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