Saya memiliki proyek yang sudah ada, digunakan untuk heroku dan di bawah kendali git. Saya secara teratur menambahkan dan melakukan kode.
Saya baru-baru ini membangun kembali komputer yang sedang saya kerjakan (OSX, 10.6) dan sekarang ketika saya memohon
git status
Saya melihat perubahan saya, tetapi ketika saya mencoba menambahkan file yang diubah untuk melakukan, saya mengerti
Dans-iMac-335:[app-name-obscured] apple$ git add public/javascripts/*
fatal: Unable to write new index file
Saya telah mengkloning proyek dari repositori heroku git, dan saya dapat menambahkan di sana. Kepemilikan file dalam dua proyek adalah sama. Apa yang menyebabkan ini? Opsi saya adalah menambahkan masing-masing file yang diubah ke versi yang baru dikloning dan merekonstruksi dengan cara itu, tetapi ada banyak perubahan, dan sepertinya ada perbaikan di sini.
Adakah yang mengalami ini, dan ada ide untuk memulai?
Chris: terima kasih atas jawaban lengkapnya.
Saya bisa menjalankan git menggunakan sudo. Tampaknya dalam pengertian itu menjadi masalah izin, meskipun direktori tersebut adalah 755, dan dimiliki oleh saya, dan file terlampir 644, lagi-lagi dimiliki oleh saya (pengguna yang sama seperti yang memiliki file proyek). Ada banyak ruang disk, dan saran bahwa direktori dapat ditulisi adalah yang baik, tetapi saya menjalankan git dari dalam direktori yang berisi proyek - apakah masih perlu membuat path lalu?
Saya tidak menemukan ktrace di sistem saya, dan saya bukan ahli manipulasi terminal, tetapi saya mencoba menjalankan dtruss. Itu tidak menunjukkan masalah, tetapi saya sadar bahwa karena saya harus menggunakan sudo untuk menjalankan dtruss, itu berarti bahwa proses pemantauan dtruss juga berjalan sebagai superuser. Bagaimanapun, pada saat itu ia dapat menambahkan item ke git, dan juga menggunakan sudo saya bisa mengkomitnya sekarang. Masalahnya adalah ketika menambahkan item baru, bukan yang dimodifikasi. Jika saya melakukan sesuatu seperti
sudo dtruss su <my_username> git add some/file/name/*
Apakah saya dapat menjalankan git sebagai nama biasa saya? Saya memikirkan hal ini setelah saya meretas cara saya untuk mendapatkan hasil yang diinginkan.
Saya bisa hidup dengan menggunakan sudo untuk operasi di mana item ditambahkan dan dikomit untuk saat ini. Yang ingin saya lakukan adalah mendapatkan repo heroku saya sesuai dengan pekerjaan saat ini: maka saya pikir saya bisa mengkloning itu, dan melihat apakah masalahnya hilang. Kalau tidak, aku akan kembali ...
sumber
.git
direktori di root proyek Anda?ktrace
disediakan pada sistem yang lebih lama, tetapi saya tidak memiliki sistem 10.5 atau 10.6 untuk mengetahui opsi yang Anda perlukan untuk mendapatkan informasi dari dtrace . Berjalan sebagai root akan menyembunyikan berbagai macam masalah izin (pemeriksaan izin sering kali sepenuhnya dilewati untuk proses yang berjalan sebagai root). Anda mengatakan "direktori adalah 755"; apakah Anda berbicara tentang.git
direktori atau tingkat atas pohon kerja (direktori yang berisi.git
direktori)? Apakah Anda memeriksa bendera denganls -lo .git/index
?o
untukO
(huruf besar oh) dalam 10,5 dan yang lebih baru. Jadi periksa denganls -lO .git/index
.Jawaban:
Indeks biasanya disimpan di tingkat atas
.git
direktori repositori. Lokasinya dapat diganti dengan menggunakan variabel lingkungan GIT_INDEX_FILE (mungkin perlu diperiksa bahwa:printf '%s\n' "$GIT_INDEX_FILE"
).Jika direktori file indeks tidak dapat ditulisi, Anda akan mendapatkan pesan kesalahan sebelumnya:
Kami cukup yakin bahwa direktori yang berisi dapat ditulisi karena Anda tidak mendapatkan pesan kesalahan ini.
Pesan kesalahan yang Anda laporkan dikeluarkan di dekat bagian paling akhir dari aktivitas untuk git add . Sayangnya
errno
tidak dilaporkan oleh git add ; jika telah dilaporkan, kami mungkin dapat membuat perkiraan tentang masalah berdasarkan kesalahan yang dilaporkan.git add menunjukkan kesalahan yang Anda laporkan jika memiliki masalah dalam menuliskan isi indeks baru (isinya ditulis ke dalam
.lock
file) atau ketika mencoba melakukan file kunci (ganti nama file.lock
file untuk menggantikan file indeks yang ada; ini 'melakukan' transaksi file-kunci, bukan apa git melakukan tidak).Masalah Disk Space?
Bagaimana ruang kosong pada volume yang menyimpan file indeks Anda? Mungkin hampir penuh. Saya telah dapat mereproduksi pesan kesalahan ketika indeks pada volume yang cukup ruang kosong untuk membuat
.lock
file tetapi tidak cukup untuk menampung seluruh konten.Masalah "Bendera"?
Apakah ada flag yang ditetapkan pada file indeks? Pada sistem saya memiliki keduanya
uchg
("Tingkat pengguna tidak berubah") atauuappnd
("Hanya pengguna-tingkat tambahkan") yang ditetapkan pada file indeks akan menyebabkan git add untuk memberikan pesan kesalahan yang sama yang Anda dapatkan. Periksa bendera denganls -lO
pada file indeks Anda (bendera ditampilkan setelah pemilik grup dan sebelum ukuran; itu akan ditampilkan-
jika tidak ada flag yang ditetapkan). Jika Anda melihat bendera, gunakan tanda chflags perintah untuk menghapusnya. Anda mungkin ingin menyelidiki bagaimana bendera sampai di sana dan apakah ada file lain memilikinya (mungkin denganls -lOR
).Menggunakan ktrace
Jika tidak satu pun dari saran di atas meminta solusi, maka Anda mungkin keluar ktrace dan kdump untuk mengetahui panggilan sistem apa yang gagal segera sebelum pesan kesalahan dicetak.
Ketika volume penuh, saya melihat ini:
Ketika saya memiliki set bendera yang tidak kompatibel, saya melihat ini:
sumber