คำเตือน Git Checkout: ไม่สามารถยกเลิกการเชื่อมโยงไฟล์ได้รับอนุญาตถูกปฏิเสธ


109

ฉันทราบว่ามีปัญหาคล้ายกันเกี่ยวกับคอมไพล์ที่เกี่ยวข้องกับคำเตือน 'ไม่สามารถยกเลิกการลิงก์' แต่ฉันไม่สามารถใช้งานได้

ความแตกต่างที่สำคัญคือสิ่งนี้เกิดขึ้นเมื่อฉันไม่ได้จัดการกับโมดูลย่อย แต่อย่างใด (ฉันไม่เคยจัดการกับมันมาก่อน) ฉันสร้างสาขาที่เรียกว่า 'อัพเกรด' ลบไฟล์เฟรมเวิร์กเก่าของฉันและคัดลอกในไฟล์ใหม่ ฉันใช้ git add -A จากนั้นก็ทำทุกอย่าง เมื่อฉันพยายามชำระเงินสาขาลำต้นมันตอบสนองด้วยข้อผิดพลาดต่อไปนี้:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

... ฯลฯ มีหลายร้อยคน

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

แก้ไข: ตามที่แนะนำในคำตอบด้านล่างฉันพยายามทำสิ่งเดียวกัน แต่ปิดทุกอย่าง ฉันไม่มีโชคมากไปกว่าเมื่อก่อน

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



9
ฉันแก้ไขได้ง่ายๆsudo chown -R username directory
Stephen Corwin

คำตอบ:


84

ฉันมักจะเห็นข้อผิดพลาดประเภทนั้นเมื่อมีกระบวนการไม่ปล่อยที่จับของไฟล์เหล่านั้น

ตรวจสอบให้แน่ใจว่าไม่มีอะไรทำงานอยู่จากนั้นลองชำระเงินอีกครั้ง

หมายเหตุ: อาจเกี่ยวข้องกับวิธีการติดตั้ง Git (บน Windows, UAC สามารถสร้างปัญหาได้หากติดตั้ง msysgit ไว้ในC:\ProgramหรือC:\Program Filesโปรดดู " msysgit - sh.exe - fork: Permission ถูกปฏิเสธ - Vista 64 bit " และความคิดเห็นที่ 2 ของ ฉบับ 437 )

หมายเหตุ: ตามภาพประกอบด้านล่างสาเหตุอื่น ๆ ของปัญหาคือปัญหาสิทธิ์ในไดเร็กทอรี (เจ้าของไม่ถูกต้อง) ซึ่งไม่จำเป็นต้องอยู่ในไฟล์ที่ไม่สามารถยกเลิกการเชื่อมโยงได้


1
ฉันใช้ Ubuntu เพื่อล้างข้อมูลนั้น และน่าเสียดายที่ฉันอยู่ในเว็บเบราว์เซอร์นี้และคอนโซลของฉันเท่านั้นซึ่งมีแท็บหนึ่งเปิดไปยังไดเร็กทอรีที่เกี่ยวข้อง (และสองแท็บเปิดอยู่ที่อื่น)
พารากอน

3
@Paragon: แม้ใน unix คุณสามารถจัดการปัญหาได้ มิฉะนั้นนี่ควรเป็นปัญหาการอนุญาตบางประเภท คุณควรบังคับให้ชำระเงินได้ git checkout -f master
VonC

2
+1 ในกรณีของฉันคือการแชร์โฟลเดอร์กับ VM ที่ใช้งานอยู่ซึ่งห้ามทิ้งไฟล์ใน git บนระบบโฮสต์ ขับรถฉันถั่วขอบคุณสำหรับคำใบ้!
Jook

1
ปัญหาเดียวกัน. การรัน Process Explorer> Ctrl + F> <filename> - จะแสดงกระบวนการซึ่งเปิดไฟล์นี้ไว้
setevoy

1
GitExtensions แสดงข้อผิดพลาดนี้เมื่อพยายามดึงข้อมูลทั้งหมด ... ฉันเปิด GitKraken ด้วย เมื่อฉันปิด GitKraken การดึงข้อมูลทั้งหมดจะทำงานโดยไม่มีข้อผิดพลาด
mkaj

99

ในการพบข้อผิดพลาดนี้ครั้งแรกผู้ใช้ของฉันมีสิทธิ์ "เขียน" ในไฟล์ แต่ไม่ใช่ไดเร็กทอรีที่มี ตรวจสอบสิทธิ์ของไดเร็กทอรีที่มีไฟล์


95
โอ้ฉันตลกเกินไปฉันเพิ่งเจอคำตอบนี้ในวันนี้และแล้วฉันก็รู้ว่ามันเป็นของฉันเอง! กระนั้นมันก็ใช้ได้อีกครั้ง!
Elijah Lynn

โอเคมันเกิดขึ้นกับฉันใน windows 10 ฉันไปที่โฟลเดอร์โครงการหลัก และเพิ่มสำหรับผู้ใช้ที่เป็นไปได้ทั้งหมดสิทธิ์ทั้งหมด ดังนั้นสำหรับระบบผู้ดูแลระบบผู้ใช้ความเป็นไปได้ทั้งหมด ใช้ chnages และดูเหมือนว่าจะใช้งานได้อย่างใดอย่างหนึ่งอาจมีการอัปเดต windows 10 แม้ว่าเราจะไม่ได้สร้างผู้ใช้ใหม่ แต่เราก็ตื่นเต้นเหมือนคนใหม่โดยไม่มีสิทธิ์ ตัวอย่างเช่นฉันมีชื่อแปลก ๆ S-1-15-32 ..... ไม่ใช่ชื่อล็อกอินที่ฉันมีเมื่อเราปลดล็อกแล็ปท็อปของเรา
PsychedelicSubstance

30

"ยกเลิกการลิงก์" โดยพื้นฐานแล้วหมายถึง "ลบไฟล์" ในกรณีนี้

ข้อผิดพลาดนี้ไม่ได้เกิดจาก git เอง คุณควรมีข้อผิดพลาดที่คล้ายกันในการลบไฟล์เหล่านั้นด้วยตนเองในบรรทัดคำสั่งหรือ file explorer


18
ในครั้งแรกที่ฉันพบกับข้อผิดพลาดนี้ผู้ใช้ของฉันมีสิทธิ์ "เขียน" ไปที่ไฟล์ แต่ไดเร็กทอรีที่มีไม่มี
Elijah Lynn

3
@Elijah: ขอบคุณ! นั่นคือสิ่งที่สำหรับฉัน
Jesse Lee

4
ในกรณีของฉันฉันพบว่าไฟล์ที่เป็นปัญหาถูกล็อกโดยแอปพลิเคชันอื่น การปิดแอปพลิเคชันทำให้ไฟล์เป็นอิสระและอนุญาตให้การชำระเงินดำเนินการต่อไป
Simon Tewsi

25

คุณไม่มีสิทธิ์เข้าถึงอาจเป็นเพราะคุณไม่ใช่เจ้าของ

แก้ไขโดยเปลี่ยนเจ้าของเป็นตัวคุณเอง:

sudo chown -R your_login_name /path/to/folder

2
ในเครื่องพัฒนาท้องถิ่นของฉันไฟล์ที่เป็นปัญหาถูกสร้างขึ้นโดยเซิร์ฟเวอร์ apache ในพื้นที่ของฉันดังนั้นผู้ใช้ www-data ก็เป็นเจ้าของ เมื่อฉันนำพวกเขาเข้าบัญชีของตัวเองทุกอย่างก็ทำงานได้ตามปกติอีกครั้ง "การอนุญาตถูกปฏิเสธ" เป็นปัญหาที่แท้จริง "ไม่สามารถยกเลิกการไลค์" เป็นเพียงปลาเฮอริ่งสีแดง
Dale Anderson

23

ฉันมีปัญหากับไฟล์ default-settings.php ใน drupal 7 ในกรณีนี้ฉันไม่สามารถลบหรือเปลี่ยนกลับได้เหมือนที่ @rtconner กล่าว ฉันไม่มีแอปพลิเคชันหรือสิ่งใดที่ใช้ไฟล์นี้และพบว่าเป็นข้อผิดพลาดในการอนุญาต

ฉันเพิ่มลงchmod 777 *ในโฟลเดอร์แล้วฉันก็สามารถเปลี่ยนกลับได้อย่างไม่มีปัญหา


3
แม้ว่าคุณอาจไม่ต้องการ777อยู่ในโฟลเดอร์ใด ๆ วิธีนี้ช่วยแก้ปัญหาของฉันได้ แต่ฉันเปลี่ยนกลับเป็นค่าเริ่มต้นอย่างรวดเร็วหลังจากแก้ไขแล้ว ขอบคุณ!
Bram


6

ฉันพบปัญหานี้ทุกครั้งที่เรียกใช้ "git repack" หรือ "git gc" บนเครื่อง OS X ของฉันแม้ว่าจะเรียกใช้ git ด้วยสิทธิ์ของผู้ดูแลระบบก็ตามและในที่สุดฉันก็แก้ไขได้หลังจากเจอหน้านี้: http://hints.macworld.com /comment.php?mode=view&cid=1734

การแก้ไขคือเปิดเทอร์มินัลไปที่ git repo ของคุณ cd ในโฟลเดอร์. git จากนั้นทำ:

chflags -R nouchg *

หากนั่นเป็นปัญหาหลังจากนั้นคำสั่ง git ของคุณจะทำงานได้ตามปกติ


1
ลิงก์ macworld ใช้ไม่ได้อีกต่อไป นี่คือข้อมูลอ้างอิงที่อัปเดต: superuser.com/a/40754
webb

5

สิ่งนี้สามารถเกิดขึ้นได้เมื่อ:

  1. คุณรันกระบวนการภายในคอนเทนเนอร์ Dockerและ:

  2. ไฟล์บางไฟล์ถูกสร้างขึ้นโดยกระบวนการนั้นและ:

  3. ปลายทางของไฟล์ถูกเมาท์เป็นโวลุ่มบนโฮสต์ Docker และ:

  4. คุณกำลังรันgitบนโฮสต์ Docker


หากเป็นกรณีนี้ให้จัดลำดับไฟล์ที่คุณต้องการคอมมิตและรัน:

git diff --name-only --cached | xargs ls -l 

ไฟล์ที่ตรงตามเกณฑ์ข้างต้นจะขึ้นต้นด้วย:

-rw-r--r-- 1 root root ...

พวกเขาเป็นเจ้าของrootและไม่สามารถเขียนได้ซึ่งไม่ดี ในการแก้ไขปัญหานั้น:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

วิธีการแก้ปัญหาการทำความสะอาดอาจจะใช้--userตัวเลือกดูนี้เทียบท่าและนี้เขียนเทียบท่า


4

สำหรับผู้ที่ใช้Intellijเนื่องจาก @rtconner กล่าวว่าปัญหานี้ไม่ได้เกิดจาก git เนื่องจาก IDE ของคุณถูกล็อกไฟล์ git จึงไม่สามารถยกเลิกการเชื่อมโยงได้ ดังนั้นคุณต้องปิด IDE ของคุณแล้วลองผสาน (หรืออะไรก็ได้ที่คุณต้องการ) ผ่านทางบรรทัดคำสั่ง


นั่นแหล่ะ เกิดขึ้นกับการพัฒนา Android เนื่องจาก AndroidStudio เป็น Intellij
Reinherd

2

ในกรณีของฉันมันเป็นอักขระ ":" ในชื่อโฟลเดอร์ที่กำหนดไว้ล่วงหน้า git repo เพื่อชำระเงินบน windows


2

บนเทอร์มินัลบน mac ฉันแค่ทำสิ่งนี้

sudo git ชำระเงิน (เพื่อทำความสะอาดทุกอย่าง)

แล้ว

ต้นกำเนิดการดึง sudo git


2

ฉันมีข้อผิดพลาดนี้ภายในเครื่องเสมือน (ใช้ Ubuntu) เมื่อฉันพยายามทำ git reset --hardเมื่อฉันพยายามที่จะทำ

การแก้ไขเป็นเพียงการเรียกใช้git reset --hardจากเครื่องโฮสต์ OS X แทน


1

คำแนะนำอื่น ๆ ไม่ได้ผลสำหรับฉัน แต่สิ่งนี้ทำได้:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

ในกรณีของฉันไดเรกทอรี Windows ของฉันอยู่ภายใต้โฟลเดอร์ Dropbox ไม่ใช่ปัญหาเฉพาะ Git เมื่อไฟล์ (ในกรณีนี้คือไฟล์ล็อก) ถูกสร้างขึ้น Dropbox จะใช้เวลาอีกวินาทีในการซิงโครไนซ์ ในช่วงเวลานั้นไฟล์ถูกใช้งานโดย Dropbox และโปรแกรมของบุคคลที่สาม (ในกรณีนี้คือ Git) จะไม่สามารถลบไฟล์ได้

วิธีแก้ปัญหาของฉันคือออกจาก Dropbox และหลีกเลี่ยงความมหัศจรรย์เบื้องหลังของการซิงค์ไฟล์ของ Dropbox


0

ฉันพบข้อผิดพลาดนี้และเกิดจาก"เจ้าของ / กลุ่ม"ของไฟล์ / โฟลเดอร์ที่ไม่ถูกต้อง คุณต้องขอความช่วยเหลือไปยังผู้ดูแลระบบเซิร์ฟเวอร์ของคุณเพื่อเปลี่ยน "เจ้าของ / กลุ่ม" ของไฟล์ / โฟลเดอร์นี้และลองใหม่โดยใช้ "git pull" อีกครั้ง หรือถ้าคุณเป็น sudoer เพียงแค่ sudo เลือก "ชื่อเจ้าของ / ชื่อกลุ่มของคุณ" แล้วลองดึงที่เก็บของคุณอีกครั้ง ลองใช้งานได้ผล 100% สำหรับฉัน!


0

ตรวจสอบให้แน่ใจว่ากระบวนการหรือเธรดที่เกี่ยวข้องไม่ได้ทำงานอยู่และดำเนินการสิ้นสุดภารกิจหรือบังคับให้ออกตามความจำเป็น

ตรวจสอบว่าคุณได้เปลี่ยนสิทธิ์การเป็นเจ้าของ


0

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


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

0

ฉันต้องเปลี่ยนผู้ใช้จาก ubuntu เป็นชื่อผู้ใช้จริงของฉันที่ฉันต้องทำก่อน ที่แก้ไขมัน


แล้วผู้ใช้ windows ล่ะ?
Herr Nentu '27

OP อยู่บน Ubuntu ฉันจะไม่ได้แสดงความคิดเห็นในเธรด Windows
Marc

0

แก้ไขให้ฉันโดยการตั้งค่าไคลเอนต์ git (GitExtensions) ให้ทำงานในโหมดผู้ดูแลระบบเสมอ


0

ฉันประสบปัญหานั้นขณะใช้IntelliJ(14.1.3 Ultimate) ฉันต้องการเปลี่ยนกลับการเปลี่ยนแปลงในบางไฟล์

แก้ไขได้โดยการปิดGit Bashเปิดในหน้าต่างอื่นอีก - ทดลองใช้ย้อนกลับในการIntelliJทำงาน


0

ฉันพบข้อผิดพลาดนี้และฉันคิดว่าปัญหาคือฉัน 'รันในฐานะผู้ดูแลระบบ' เมื่อฉันเริ่ม Eclipse และสร้างไฟล์ดังนั้นไฟล์เหล่านี้จึงเป็นของ Admin (สังเกตได้จากการเรียกใช้ 'ls -la' ในโฟลเดอร์) เมื่อฉันพยายามซ่อนไฟล์ในภายหลังมันไม่ยอมให้ฉัน ('ไม่สามารถยกเลิกการเชื่อมโยงไฟล์' และทั้งหมดนั้น) การทำ chmod บนไฟล์เป็นการแก้ไขสำหรับฉัน



0

สิ่งที่คุณต้องทำคือให้สิทธิ์เรียกใช้คำสั่งด้านล่างจากรากของโครงการของคุณ:

    chmod ug+w <directory path>

0

ฉันมีปัญหาเดียวกันฉันลองใช้ทางเลือกอื่น ๆ ตามที่คนอื่นแนะนำ

แต่สุดท้ายให้สิทธิ์ที่ถูกต้องในโฟลเดอร์. git เพื่อแก้ปัญหา

sudo chown -R "${USER:-$(id -un)}" .git

0

ในกรณีของฉันปัญหาการอนุญาตแก้ไขได้โดยการตั้งค่าwww-dataเป็นเจ้าของ:

chown -R www-data project_folder_name

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