Git 'fatal: ไม่สามารถเขียนไฟล์ดัชนีใหม่'


128

ฉันเคยเห็นกระทู้อื่น ๆ เกี่ยวกับเรื่องนี้มากมายและไม่ได้ช่วยอะไร

ฉันมี repo ที่เรียบง่าย - ไฟล์ JavaScript สองไฟล์ ฉันมี Macbook 100+ GB เมื่อฉันพยายามย้ายไฟล์ไปไว้ในไดเร็กทอรีย่อยและจัดลำดับการเปลี่ยนแปลงที่ฉันได้รับ ...

ร้ายแรง: ไม่สามารถเขียนไฟล์ดัชนีใหม่ได้

สิ่งนี้เกิดขึ้นไม่ว่าฉันจะดำเนินการทั้งหมดในเทอร์มินัลหรือถ้าฉันใช้ GUI เช่น SourceTree นอกจากนี้ไฟล์ใดไฟล์หนึ่งจะถูกล็อกและฉันไม่สามารถลบไดเร็กทอรีการทำงานได้จนกว่าฉันจะออกจากระบบและกลับเข้ามาใหม่

เหตุใดจึงเกิดขึ้น การล็อกป้องกันไม่ให้มีการจัดเตรียมบางอย่างหรือไม่? ถ้าเป็นเช่นนั้นฉันจะปลดล็อกไฟล์ปัญหาบน OS X ได้อย่างไร? repo ระยะไกลคือ Google Code หากนั่นสร้างความแตกต่างแม้ว่าฉันจะยังไม่ได้กดไปที่รีโมตก็ตาม ทุกอย่างเป็นของท้องถิ่น


ไม่แน่ใจว่าควรไปที่SuperUserแทนหรือไม่
MMM

ส่วนใหญ่อาจเป็นปัญหาเกี่ยวกับสิทธิ์ในการเข้าถึง (ผู้ใช้ที่ใช้งาน git ไม่ได้รับอนุญาตให้เขียน repo ทั้งหมด)
Nevik Rehnel

มีหัวข้อเกี่ยวกับเรื่องนี้ใน SO และ SU ฉันคิดว่าคำถามทำงานได้ดีพอ ๆ กันในทั้งสองอย่าง Nevik สิทธิ์สำหรับ repo คือ 777 รวมถึง./gitโฟลเดอร์ด้วย
Jeff

คุณเห็นปัญหานี้เมื่อใด เมื่อคุณทำ "git mv" หรือ "git add"?
Mayur Nagekar

คำตอบ:


222

ในกรณีของฉันเนื้อที่ว่างบนดิสก์ฉันจึงต้องลบไฟล์ออกจากฮาร์ดไดรฟ์เพื่อเพิ่มพื้นที่


64

ฉันมีปัญหาเดียวกันนี้ในช่วงสองสามวันที่ผ่านมา โดยทั่วไปแล้วหากปราศจากความรู้ของฉัน repo ทั้งหมดถูกย้ายไปยังระบบไฟล์ใหม่เมื่อฉันพยายามเรียกใช้สถานะคอมไพล์จู่ๆก็มีรายงานว่าทุกไฟล์ใน repo ถูกคัดออก

การแก้ปัญหาที่เป็นไปได้

ดังนั้นหลังจากใช้ Google กำจัดสิ่งสกปรกมากมายฉันลองทำสิ่งต่อไปนี้:

  • การเปลี่ยนสิทธิ์. git (ปัญหาเดียวกัน)
  • การเปลี่ยนสิทธิ์. git / index (ปัญหาเดียวกัน)
  • git เพิ่มการเปลี่ยนแปลงทั้งหมดที่จะกระทำ (ปัญหาเดียวกัน)
  • git rm-ing ไฟล์ที่ถูกลบเนื่องจากพวกเขารายงานข้อผิดพลาดชื่อไฟล์ยาวเกินไป (ปัญหาเดียวกัน)
  • git reset (soft | Head | Hard) (ฉบับเดียวกัน)
  • git clean (ปัญหาเดียวกัน)
  • การปิด Windows Defender (ปัญหาเดียวกัน)
  • อัปเดตคอมไพล์ (ปัญหาเดียวกัน)
  • ไคลเอนต์ git ที่แตกต่างกัน (ฉันใช้ gitbash) (ปัญหาเดียวกัน)
  • ดื่มกาแฟ 2 แก้วแทนที่จะเป็น 1 (ปัญหาเดียวกัน)

tl: dr - สารละลายสกปรก

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

ฉันรู้ว่ามันไม่ใช่ 'โซลูชัน' แต่ตอนนี้มันใช้งานได้อย่างน่าอัศจรรย์> <โดยไฟล์ / สาขาทั้งหมดยังคงอยู่ หากใครทราบว่าเหตุใดจึงอาจมีผลงานโปรดบอก


82
พบอีกสาเหตุหนึ่ง: คุณอาจไม่มีพื้นที่ว่างในดิสก์
lennartcl

21
ในกรณีของฉัน Google ไดรฟ์กำลังอัปโหลด (สำรองข้อมูล) ไฟล์และไฟล์เหล่านี้ถูกล็อกระหว่างกระบวนการ หลังจากอัปโหลดเสร็จแล้วคอมมิตจะทำงาน
Kristjan O.

3
ขอบคุณสำหรับเคล็ดลับเกี่ยวกับ Google ไดรฟ์ ฉันมีปัญหาเดียวกัน แต่กับ Dropbox
hgolov

1
การรีสตาร์ทได้ผลสำหรับฉัน ทำงานบนไดรฟ์ที่แชร์ 22 TB ว่างเปล่าครึ่งหนึ่งพื้นที่ว่างจึงไม่ใช่ปัญหา
Wayne F.Kaskie

1
"วิธีแก้ปัญหาสกปรก" ของคุณใช้ได้ผลสำหรับฉัน (กลับไปที่ไฟล์ดัชนีก่อนหน้าเพิ่มใหม่และยืนยันการเปลี่ยนแปลงทั้งหมดอีกครั้งตั้งแต่นั้นมา)
trust_words

19

ในกรณีของฉันการหยุดซิงค์ดรอปบ็อกซ์ชั่วคราวช่วยแก้ปัญหาได้


17

ฉันมีปัญหาเดียวกันใน Mac ดูเหมือนว่าจะเกิดจาก ACL ของระบบไฟล์ ลองchmod -RN /path/to/repoล้าง ACL หลังจากทำสิ่งนี้ฉันก็สามารถทำการเปลี่ยนแปลงได้ ใช้เคล็ดลับในการคัดลอกไฟล์ดัชนีลบต้นฉบับและย้ายสำเนากลับได้ผลลัพธ์เดียวกัน


หากบัญชีผู้ใช้ของคุณมีปัญหาเกี่ยวกับสิทธิ์เมื่อเร็ว ๆ นี้อาจทำให้คุณประสบปัญหานี้ ในกรณีของฉันมันเป็นปัญหาการรวม Active Directory ที่ทำให้ฉันมี ACL ที่มีปัญหา
kris

17

หากคุณมีการตั้งค่า github ในบริการซิงค์ออนไลน์บางประเภทเช่น Google ไดรฟ์หรือดรอปบ็อกซ์ให้ลองปิดการใช้งานการซิงค์เนื่องจากบริการซิงค์พยายามอ่าน / เขียนไปยังไฟล์เนื่องจาก github พยายามทำเช่นเดียวกันทำให้ github ไม่ทำงาน ได้อย่างถูกต้อง


นี่คือวิธีแก้ปัญหาที่ได้ผลสำหรับฉัน ขอบคุณ!
Macondo

7

เกิดขึ้นกับฉันว่าไฟล์. git / index ถูกใช้โดยกระบวนการอื่น (เว็บเซิร์ฟเวอร์การพัฒนาในพื้นที่ของฉัน) ฉันปิดกระบวนการแล้วมันใช้งานได้


7

การปิด Visual Studio Code (ในกรณีของฉันมีงานพื้นหลังของโปรแกรมอัปโหลดอัตโนมัติที่ทำงานในการบันทึกไฟล์) ช่วยแก้ปัญหาให้ฉันได้

เครดิตสำหรับการแก้ปัญหา: Arnel เพื่อนและเพื่อนร่วมงานของฉัน


ฉันได้ปิดเซิร์ฟเวอร์ nodeJs ที่แอป angularJs ของฉันทำงานอยู่และดัชนีถูกปลดล็อก
Radu Linu


6

ในกรณีของฉันวิธีแก้ปัญหาคือการเพิ่มสิทธิ์ให้กับผู้ใช้ใหม่เท่านั้น

เมื่อฉันติดตั้งระบบปฏิบัติการใหม่ย้าย repos ของฉันไปรอบ ๆ และแสดงข้อผิดพลาดที่แน่นอนนี้ฉันเลือกโฟลเดอร์รูทจากนั้นเพิ่มการตรวจสอบสิทธิ์ผู้ใช้เพื่อตรวจสอบทั้งหมด ใส่คำอธิบายภาพที่นี่


3

ฉันมี ACL (อย่างใด) แนบกับไฟล์ทั้งหมดในโฟลเดอร์. git

ตรวจสอบด้วย ls -leในโฟลเดอร์. git

คุณสามารถลบ ACL ด้วยchmod -N(สำหรับโฟลเดอร์ / ไฟล์) หรือchmod -RN(เรียกซ้ำ)


3

ฉันคิดว่าโซลูชันการสำรองข้อมูลพื้นหลังบางอย่างเช่น Google Backup and Sync จะบล็อกการเข้าถึงไฟล์ดัชนี ฉันปิดแอปพลิเคชันและ Sourcetree ไม่มีปัญหาเลย ดูเหมือนว่า Dropbox จะทำเช่นเดียวกัน (@tonymayoral)


2

ในกรณีของฉันมันเป็น EGit ที่ทำงานพร้อมกัน หลังจากรีสตาร์ท eclipse จะทำงานได้ตามปกติ


คำถามคือ 'ทำไมข้อความแสดงข้อผิดพลาดจึงเกิดขึ้น' และคำตอบนี้อธิบายถึงสาเหตุที่เป็นไปได้อื่น ๆ
robm

2

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



2

ผมมีปัญหาเหมือนกัน. ฉันรีสตาร์ทคอมพิวเตอร์และปัญหาได้รับการแก้ไขแล้ว


1

คุณลอง "เพิ่มคอมไพล์" หรือไม่ . จะเปลี่ยนแปลงทั้งหมดหรือไม่? (คุณสามารถลบไฟล์ที่ไม่จำเป็นเพิ่มได้โดย git reset HEAD)


1

เกิดข้อผิดพลาดfatal: Unable to write new index fileหมายความว่าเราไม่สามารถเขียนเนื้อหาใหม่ไปยังแฟ้มดัชนีคอมไพล์.git\index(โปรดดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับดัชนีคอมไพล์) หลังจากตรวจสอบคำตอบทั้งหมดของคำถามนี้ฉันสรุปสาเหตุที่แท้จริงต่อไปนี้:

  • ขนาดของเนื้อหาใหม่เกินความจุของดิสก์ ( วิธีแก้ไข : ทำความสะอาดพื้นที่ดิสก์)
  • ผู้ใช้ไม่มีสิทธิ์เข้าถึงไฟล์นี้ ( วิธีแก้ไข : ให้สิทธิ์)
  • ผู้ใช้มีสิทธิ์ แต่.git\indexถูกล็อกโดยผู้ใช้หรือกระบวนการอื่น ( วิธีแก้ไข : ปลดล็อกไฟล์)

ลิงก์ค้นหาว่ากระบวนการใดกำลังล็อกไฟล์หรือโฟลเดอร์ใน Windowsระบุวิธีการต่อไปนี้เพื่อค้นหากระบวนการที่กำลังล็อกไฟล์เฉพาะ:

SysInternals Process Explorer - ไปที่ค้นหา> ค้นหา Handle หรือ DLL ในกล่องข้อความ "Handle or DLL substring:" พิมพ์เส้นทางไปยังไฟล์ (เช่น "C: \ path \ to \ file.txt") แล้วคลิก "Search" กระบวนการทั้งหมดที่มีจุดจับเปิดสำหรับไฟล์นั้นควรอยู่ในรายการ

ใช้วิธีการข้างต้นเพื่อค้นหาว่ากระบวนการใดถูกล็อก.git\indexจากนั้นจึงหยุดการล็อกปฏิบัติการ สิ่งนี้จะปลดล็อก.git\indexปลดล็อคนี้

ยกตัวอย่างเช่นProcess Explorer ค้นหาแสดงให้เห็นว่าถูกล็อกโดย.git\index vmware-vmx.exeการระงับเครื่องเสมือน VMWare Player (ซึ่งเข้าถึง git repo ผ่านโฟลเดอร์ที่แชร์) แก้ปัญหาได้


แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป - จากรีวิว
Al Sweigart

@Al ฉันอัปเดตคำตอบตามข้อเสนอแนะของคุณ
แฟน

0

หากคุณได้รับสิ่งนี้ในระหว่างการขอสินเชื่อ:

สาเหตุส่วนใหญ่เกิดจากซอฟต์แวร์บางตัวล็อกไฟล์ดัชนีของ repo ของคุณเช่นซอฟต์แวร์สำรองข้อมูลโปรแกรมป้องกันไวรัส IDE หรือไคลเอ็นต์ git อื่น ๆ

ในกรณีส่วนใหญ่การล็อกเป็นเพียงช่วงเวลาสั้น ๆ ดังนั้นจึงเกิดขึ้นจากช่วงเวลาที่ไม่ดีและโชคร้าย

อย่างไรก็ตามgit rebase --continueจะบ่นเกี่ยวกับคำสั่งถัดไปว่าเป็นการกระทำที่ว่างเปล่า:

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

ในการแก้ไขปัญหานี้ให้เรียกใช้git resetและลองgit rebase --continueอีกครั้ง


0

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

วิธีแก้ปัญหาที่ฉันได้ลอง: XYZ มีการเข้าถึง git ลองตรวจสอบไฟล์ด้วย sudo และใช้งานได้ .. !!


0

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

บริบท:

  1. การสร้างโครงการบนเซิร์ฟเวอร์

  2. git status ส่งคืน a HEAD detached at <commit-SHA>

  3. สิ่งที่เคยดำเนินการในพื้นที่ฉันมีข้อผิดพลาดนี้ โดยเฉพาะอย่างยิ่ง:

    • การชำระเงินด้วยคอมไพล์
    • git รีเซ็ต HEAD - ฮาร์ด

สารละลาย

  1. เพียงแค่ลบไฟล์ <work-dir>/.git/indexไฟล์ที่ถูกลบออกเพียง
  2. A git statusจะแสดงว่าไฟล์ทั้งหมดใน projet ไม่ถูกติดตาม (ไม่แปลกใจเลยที่นี่)
  3. git reset HEAD --hard
  4. ย้อนกลับไปHEAD detached at <commit-SHA>เมื่อทำ a git statusแต่คุณควรจะทำได้
  5. git checkout <some-branch>

และคุณจะกลับมาติดตาม!

!! สำคัญ !!

สิ่งนี้ใช้งานได้เพราะฉันกำลังสร้าง "ร่าเริง" เท่านั้น ไม่มีการแก้ไขโค้ดที่ล้ำค่า หากคุณอยู่ใน "dev-time" จริงฉันขอแนะนำให้บันทึกงานของคุณก่อนหรือใช้วิธีอื่น

หวังว่ามันจะช่วยได้ :).


0

ฉันมีปัญหานี้เมื่อใช้ GitExtensions บน windows แก้ไขโดยการให้สิทธิ์แบบเต็มสำหรับผู้ใช้ปัจจุบัน (ฉัน) ในโฟลเดอร์ที่มี repo

อีกครั้งแม้ว่าฉันจะได้รับข้อผิดพลาดจาก Git Extensions แต่ฉันก็สามารถส่งไฟล์เดียวกันจาก Visual Studio 2015 ได้

อีกครั้งที่ฉันต้องลบไฟล์ "ดัชนี" จากโฟลเดอร์. git


0

กรณีของฉันน่าสนใจเล็กน้อย:

ฉันเรียกใช้บันทึกคอมไพล์เพื่อตรวจสอบคอมมิตบางอย่างจากนั้นฉันไม่ได้ออกอย่างถูกต้องฉันกด ctrl + c เพื่อออก

จากนั้นดัชนีดูเหมือนถูกล็อค ดังนั้นฉันจึงเรียกใช้ git log อีกครั้งจากนั้นกด Q เพื่อออก

แก้ไขปัญหาแล้ว :)


0

ในกรณีของฉันมันเป็นnodemonอินสแตนซ์ที่เฝ้าดูระบบไฟล์สำหรับการเปลี่ยนแปลง

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