Git 'fatal: Tidak dapat menulis file indeks baru'

128

Saya telah melihat banyak utas lain tentang ini dan mereka tidak membantu.

Saya memiliki repo yang sangat sederhana - dua file JavaScript. Saya memiliki 100+ GB di Macbook. Ketika saya mencoba untuk memindahkan file ke subdirektori dan tahapan secara lokal perubahan yang saya dapatkan ...

fatal: Tidak dapat menulis file indeks baru

Ini terjadi apakah saya melakukan semua tindakan di terminal atau jika saya menggunakan GUI seperti SourceTree. Selain itu, salah satu file menjadi terkunci dan saya tidak dapat menghapus direktori kerja sampai saya keluar dan masuk kembali.

Mengapa ini terjadi? Apakah kunci mencegah sesuatu dari pementasan? Jika ya, apa / bagaimana cara membuka kunci file masalah di OS X ?? Repo jarak jauh adalah Google Code, jika itu membuat perbedaan, meskipun saya belum mendorong ke remote. Semuanya lokal.

Jeff
sumber
Tidak yakin apakah ini harus masuk ke SuperUser ?
MMM
kemungkinan besar masalah dengan hak akses (pengguna yang menjalankan git tidak memiliki izin menulis ke semua repo)
Nevik Rehnel
Ada utas tentang ini di SO dan SU. Saya pikir pertanyaan bekerja dengan baik di keduanya. Nevik, hak akses untuk repo adalah 777, termasuk ./gitfoldernya.
Jeff
Kapan Anda melihat masalah ini? Apakah saat Anda melakukan "git mv" atau "git add"?
Mayur Nagekar

Jawaban:

221

Dalam kasus saya, disk kehabisan ruang, jadi saya harus menghapus file dari hard drive untuk memberi ruang.

Alexander Bird
sumber
64

Saya mengalami masalah yang sama selama beberapa hari terakhir. Pada dasarnya, tanpa sepengetahuan saya, seluruh repo telah dipindahkan ke sistem file baru, ketika saya mencoba menjalankan status git, tiba-tiba dilaporkan bahwa setiap file dalam repo telah di-udpated.

Solusi yang memungkinkan

Jadi, setelah banyak menjelajahi google, saya mencoba yang berikut ini:

  • mengubah izin .git (masalah yang sama)
  • mengubah izin .git / index (masalah yang sama)
  • git menambahkan semua perubahan untuk dilakukan (masalah yang sama)
  • git rm-ing menghapus file, karena mereka melaporkan kesalahan nama file yang terlalu panjang (masalah yang sama)
  • git reset (soft | Head | Hard) (masalah yang sama)
  • git clean (masalah yang sama)
  • mematikan windows defender (masalah yang sama)
  • memperbarui git (masalah yang sama)
  • klien git yang berbeda (saya menggunakan gitbash) (masalah yang sama)
  • minum 2 kopi, bukan 1 (masalah yang sama)

tl: dr - solusi kotor

Satu-satunya hal yang berhasil menyelesaikan masalah adalah menyalin file indeks, menghapus yang asli dan mengganti nama salinannya.

Saya tahu ini bukan benar-benar 'solusi' tetapi sekarang bekerja secara ajaib> <, dengan semua file / cabang utuh. Jika ada yang tahu mengapa ini mungkin berhasil, beri tahu.

ruang teater
sumber
82
Ditemukan penyebab lain: Anda mungkin kehabisan ruang disk.
lennartcl
21
Dalam kasus saya, Google Drive mengupload (mencadangkan) file dan file terkunci selama proses tersebut. Setelah selesai mengupload, komit berfungsi.
Kristjan O.
3
Terima kasih atas tip tentang Google Drive. Saya memiliki masalah yang sama, tetapi dengan Dropbox.
hgolov
1
Restart bekerja untuk saya. Bekerja pada drive bersama setengah kosong, 22 TB, jadi ruang bukanlah masalah.
Wayne F. Kaskie
1
"solusi kotor" Anda berfungsi untuk saya (dikembalikan ke file indeks sebelumnya, ditambahkan ulang dan lakukan kembali semua perubahan sejak saat itu)
trust_words
19

Dalam kasus saya, menjeda sinkronisasi dropbox menyelesaikan masalah

tonymayoral.dll
sumber
17

Saya memiliki masalah yang sama di Mac. Tampaknya ini disebabkan oleh ACL sistem file. Cobalah chmod -RN /path/to/repountuk menghapus ACL. Setelah melakukan ini, saya dapat melakukan perubahan. Menggunakan trik untuk menyalin file indeks, menghapus yang asli dan memindahkan salinan kembali mencapai hasil yang sama.

pengguna2465454
sumber
Jika akun pengguna Anda baru-baru ini mengalami masalah izin, itu dapat menyebabkan Anda mengalami masalah ini. Dalam kasus saya, itu adalah masalah integrasi Direktori Aktif yang membuat saya mengalami ACL yang bermasalah.
keris
17

Jika Anda memiliki pengaturan github di beberapa jenis layanan sinkronisasi online, seperti google drive atau dropbox, coba nonaktifkan sinkronisasi saat layanan sinkronisasi mencoba membaca / menulis ke file saat github mencoba melakukan hal yang sama, yang menyebabkan github tidak berfungsi benar.

Cornchip
sumber
Ini adalah solusi yang berhasil untuk saya. Terima kasih!
Macondo
7

Kebetulan pada saya bahwa file .git / index sedang digunakan oleh proses lain (server web pengembangan lokal saya). Saya menghentikan proses dan kemudian berhasil.

gls123
sumber
7

Menutup Visual Studio Code (yang dalam kasus saya memiliki pekerjaan latar belakang pengunggah otomatis yang berjalan pada penyimpanan file) memecahkan masalah bagi saya.

Penghargaan untuk solusinya: teman dan kolega saya Arnel.

Spyryto
sumber
Saya telah menutup server nodeJs tempat aplikasi angularJs saya berjalan dan indeks tidak terkunci
Radu Linu
6

Ini berhasil untuk saya:

rm -f ./.git/index.lock
Untuk kemenangan
sumber
6

Dalam kasus saya, solusinya hanya menambahkan izin ke pengguna baru.

Ketika saya menginstal OS baru, memindahkan repo saya dan itu menunjukkan kesalahan yang tepat ini saya memilih folder root dan kemudian menambahkan pengguna yang diautentikasi untuk memeriksa semua masukkan deskripsi gambar di sini

Md. Alim Ul Karim
sumber
3

Saya memasang ACL (entah bagaimana) ke semua file di folder .git.

Periksa dengan ls -ledi folder .git.

Anda dapat menghapus ACL dengan chmod -N(untuk folder / file) atau chmod -RN(rekursif)

Tim
sumber
3

Saya pikir beberapa solusi backup latar belakang seperti Google Backup dan Sync memblokir akses ke file indeks. Saya menutup aplikasi dan Sourcetree tidak memiliki masalah sama sekali. Tampaknya Dropbox melakukan hal yang sama (@tonymayoral).

J-Schaefer
sumber
2

Dalam kasus saya, itu adalah EGit yang berjalan bersamaan. Setelah memulai ulang gerhana berfungsi seperti biasa.

Phil R.
sumber
pertanyaannya adalah 'mengapa pesan kesalahan terjadi?' dan jawaban ini menjelaskan penyebab potensial lainnya.
robm
2

Jika Anda menggunakan kotak Windows, pastikan program yang Anda gunakan, baik Source Tree atau terminal git, dijalankan sebagai administrator. Saya mendapatkan pesan kesalahan yang sama persis. Anda dapat mengklik kanan pada program untuk dijalankan sebagai administrator atau mengubah propertinya agar selalu dijalankan sebagai administrator.

wonster
sumber
2

Tidak memiliki cukup ruang adalah masalah. Bersihkan dan coba lagi

Vijay SB
sumber
2

Saya memiliki masalah yang sama. Saya menyalakan ulang komputer saya dan masalah telah teratasi.

Enayat
sumber
1

apakah Anda mencoba 'git add.' . akankah itu semua berubah? (Anda dapat menghapus file tambahan yang tidak perlu dengan git reset HEAD)

Pengguna123456
sumber
1

Pesan kesalahan fatal: Unable to write new index fileberarti kami tidak dapat menulis konten baru ke file indeks git .git\index(Lihat di sini untuk informasi selengkapnya tentang indeks git). Setelah meninjau semua jawaban atas pertanyaan ini, saya merangkum akar penyebab berikut ini:

  • Ukuran konten baru melebihi kapasitas disk yang tersedia. ( Solusi : Bersihkan ruang disk)
  • Pengguna tidak memiliki hak akses ke file ini. ( Solusi : Berikan izin)
  • Pengguna memiliki izin tetapi .git\indexdikunci oleh pengguna atau proses lain. ( Solusi : Buka kunci file)

Tautan Temukan proses mana yang mengunci file atau folder di Windows menentukan pendekatan berikut untuk mengetahui proses yang mengunci file tertentu:

SysInternals Process Explorer - Buka Find> Find Handle atau DLL. Dalam kotak teks "Tangani atau substring DLL:", ketik jalur ke file (misalnya, "C: \ path \ to \ file.txt") dan klik "Search". Semua proses yang memiliki pegangan terbuka ke file itu harus dicantumkan.

Gunakan pendekatan di atas untuk menemukan proses mana yang terkunci .git\indexdan kemudian hentikan penguncian yang dapat dieksekusi. Ini membuka kunci .git\index.

Misalnya, Pencarian Penjelajah Proses menunjukkan bahwa .git\indexdikunci oleh vmware-vmx.exe. Menangguhkan mesin virtual VMWare Player (yang mengakses git repo melalui folder bersama) menyelesaikan masalah.

Kipas
sumber
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
Al Sweigart
@Al, saya memperbarui jawaban saya sesuai dengan saran Anda.
Kipas Angin
0

JIKA ANDA MENDAPATKAN INI SELAMA REBASE:

Hal ini kemungkinan besar disebabkan oleh beberapa perangkat lunak yang mengunci file indeks repo Anda, seperti perangkat lunak cadangan, anti-virus, IDE, atau klien git lainnya.

Dalam kebanyakan kasus, kunciannya hanya sesaat dan karena itu terjadi karena waktu yang buruk dan kesialan.

Namun, git rebase --continueakan mengeluh tentang perintah berikutnya menjadi komit kosong:

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

    git commit --allow-empty

Untuk mengatasinya, jalankan git resetdan coba git rebase --continuelagi.

qwertzguy.dll
sumber
0

Masalah: Ketika saya memeriksa beberapa file yang dimodifikasi di git, mendapat kesalahan ini. Saya memiliki dua pengguna ABC dan XYZ. file memiliki uid: gid dari ABC tetapi tidak memiliki akses git dan mencoba untuk memeriksa file dengan file yang sama.

Solusi yang saya coba: XYZ memiliki akses git, mencoba memeriksa file dengan sudo dan berhasil .. !!

Dilip Kumar K.
sumber
0

Inilah yang berhasil untuk saya:

Konteks:

  1. Membangun proyek di server

  2. git status mengembalikan a HEAD detached at <commit-SHA>

  3. Operasi apa pun yang saya lakukan secara lokal, saya mengalami kesalahan ini. Lebih spesifik:

    • git checkout
    • git reset HEAD --hard

Larutan

  1. File cukup dihapus <work-dir>/.git/index.
  2. A git statusakan menunjukkan bahwa semua file di projet tidak terlacak (tidak mengherankan di sini).
  3. git reset HEAD --hard
  4. Kembali ke HEAD detached at <commit-SHA>saat melakukan git status, tapi kemudian Anda harus bisa
  5. git checkout <some-branch>

dan Anda kembali ke jalur yang benar!

!! PENTING !!

Ini bekerja hanya karena saya membangun "pantas". Tidak ada modifikasi berharga yang dilakukan pada kode. Jika Anda benar-benar berada dalam "waktu-dev", maka saya akan merekomendasikan untuk menyimpan pekerjaan Anda terlebih dahulu atau menggunakan metode lain.

Semoga bisa membantu :).

avi.elkharrat
sumber
0

Saya mengalami masalah ini menggunakan GitExtensions di windows. Diperbaiki dengan memberikan izin penuh untuk pengguna saat ini (saya) di folder yang berisi repo.

Di lain waktu, saya meskipun saya mendapatkan kesalahan dari Git Extensions, saya dapat melakukan file yang sama dari Visual Studio 2015.

Di lain waktu saya harus menghapus file "index" dari folder .git

Rob Bowman
sumber
0

Kasus saya agak menarik:

Saya menjalankan git log untuk memeriksa komit tertentu, lalu saya tidak keluar dengan benar, saya menekan ctrl + c untuk keluar.

Kemudian indeks sepertinya terkunci. Jadi saya menjalankan git log lagi, lalu tekan Q untuk keluar.

Masalah diperbaiki. :)

Jim Yu
sumber
0

Dalam kasus saya, itu adalah nodemoncontoh mengamati perubahan sistem file.

Stephan Ahlf
sumber