Ketika saya mencoba untuk mendorong ke remote git bersama, saya mendapatkan kesalahan berikut:
insufficient permission for adding an object to repository database
Lalu saya membaca tentang perbaikan di sini: Memperbaiki Ini berfungsi untuk dorongan berikutnya, karena semua file dari grup yang benar, tetapi saat berikutnya seseorang mendorong perubahan itu membuat item baru di folder objek yang memiliki grup default mereka sebagai grup. Satu-satunya hal yang dapat saya pikirkan adalah mengubah semua grup default pengembang untuk item yang mereka periksa, tapi itu seperti peretasan. Ada ide? Terima kasih.
git add
dangit commit
-ing sebagai pengguna root. Saya memperbaikinya dengangit reset
dan jawaban pertanyaan ini untuk memperbaiki.git
izin direktori.Jawaban:
Izin Perbaikan
Setelah Anda mengidentifikasi dan memperbaiki penyebab yang mendasarinya (lihat di bawah), Anda ingin memperbaiki izin:
Catatan jika Anda ingin semua orang dapat memodifikasi repositori, Anda tidak perlu
chgrp
dan Anda ingin mengubah chmod menjadisudo chmod -R a+rwX .
Jika Anda tidak memperbaiki penyebab yang mendasarinya, kesalahan akan terus kembali dan Anda harus terus menjalankan kembali perintah di atas berulang kali.
Penyebab yang mendasari
Kesalahan dapat disebabkan oleh salah satu dari berikut ini:
Repositori tidak dikonfigurasikan menjadi repositori bersama (lihat
core.sharedRepository
digit help config
). Jika output dari:bukan
group
atautrue
atau1
topeng, coba jalankan:dan kemudian jalankan kembali rekursif
chmod
danchgrp
(lihat "Perbaikan Izin" di atas).Sistem operasi tidak menginterpretasikan bit setgid pada direktori sebagai "semua file dan subdirektori baru harus mewarisi pemilik grup".
Ketika
core.sharedRepository
initrue
ataugroup
, Git bergantung pada fitur sistem operasi GNU (misalnya, setiap distribusi Linux) untuk memastikan bahwa baru dibuat subdirektori dimiliki oleh kelompok yang benar (kelompok yang semua pengguna repositori berada di). Fitur ini didokumentasikan dalam dokumentasi GNU coreutils :Namun, tidak semua sistem operasi memiliki fitur ini (NetBSD adalah salah satu contoh). Untuk sistem operasi tersebut, Anda harus memastikan bahwa semua pengguna Git Anda memiliki grup default yang sama. Sebagai alternatif, Anda dapat membuat repositori dapat ditulis oleh dunia dengan menjalankan
git config core.sharedRepository world
(tapi hati-hati — ini kurang aman).sumber
false
atauumask
). Lihatgit help config
untuk lebih jelasnya.git push
menggunakan akun root di direktori kerja saya. Saya menemukan pemilik beberapa file repositori git adalah root (-r--r--r--. 1 root root 6380 5月 25 12:39 9b44bd22f81b9a8d0a244fd16f7787a1b1d424
) menurut jawaban ini.X
, bukan huruf kecilx
. Huruf kapitalX
berarti "mengaturS_IXGRP
apakah file adalah direktori (atau jika adaS_IX*
bit lain diatur)", jadi itu tidak akan membuat semua file dapat dieksekusi. Mungkin tidak perlu, tapi mungkin tidak jikacore.sharedRepository
diatur0600
pada suatu saat di masa lalu.Untuk Ubuntu (atau Linux apa pun)
Dari root proyek,
Anda dapat mengetahui nama dan grup Anda dengan melihat izin pada sebagian besar output dari perintah ls -al
Catatan: ingat bintang di ujung garis sudo
sumber
Sorry, user myuser is not allowed to execute '/bin/chown
*
membuat semua perbedaan. Terima kasih.ls .git
gunakan perintah berikut, bekerja seperti sihir
ketik perintah persis seperti itu (dengan spasi tambahan dan satu titik di akhir)
sumber
sudo chmod -R ug+w .;
Pada dasarnya,
.git/objects
file tidak memiliki izin menulis. Baris di atas memberikan izin untuk semua file dan folder di direktori.sumber
Saya hanya ingin menambahkan solusi saya. Saya punya repo di OS X yang memiliki kepemilikan root pada beberapa direktori dan Home (yang merupakan direktori pengguna saya) pada yang lain yang menyebabkan kesalahan yang sama yang tercantum di atas.
Untungnya, solusinya sederhana. Dari terminal:
sumber
Cara yang baik untuk men-debug ini adalah saat berikutnya terjadi, SSH ke repo jarak jauh, cd ke folder objek dan lakukan
ls -al
.Jika Anda melihat 2-3 file dengan pengguna yang berbeda: kepemilikan grup lebih dari ini masalahnya.
Itu terjadi pada saya di masa lalu dengan beberapa skrip lama mengakses repositori git kami dan biasanya berarti pengguna yang berbeda (unix) mendorong / memodifikasi file terakhir dan pengguna Anda tidak memiliki izin untuk menimpa file-file itu. Anda harus membuat grup git bersama bahwa semua pengguna git-enabled berada di dan kemudian secara rekursif
chgrp
yangobjects
folder dan isinya itu sehingga itu kepemilikan kelompok adalah bersamagit
kelompok.Anda juga harus menambahkan sedikit lengket pada folder sehingga semua file yang dibuat dalam folder akan selalu memiliki kelompok
git
.Pembaruan: Saya tidak tahu tentang core.sharedRepository. Senang mengetahui, meskipun mungkin hanya melakukan di atas.
sumber
Dipecahkan untuk saya ... hanya ini:
sumber
Chmod 777
tidak disarankan karena mengekspos semua file Anda ke seluruh dunia yang membuat mesin Anda rentanchmod 777
, 99 kali dari 100 Anda tidak memahami masalah ini dan Anda cenderung menyebabkan lebih banyak masalah daripada yang Anda bantu selesaikan. Sebagaimana ditunjukkan oleh jawaban yang diterima di atas, masalah ini tidak berbeda.Ini dapat dengan mudah terjadi jika Anda berlari
git init
dengan pengguna yang berbeda dari yang Anda rencanakan untuk digunakan saat mendorong perubahan.Jika Anda secara membabi buta mengikuti instruksi pada [1] ini akan terjadi karena Anda mungkin membuat pengguna git sebagai root dan kemudian segera pindah ke git init tanpa mengubah pengguna di antaranya.
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
sumber
Linux, macOS:
di mana
name
nama pengguna Anda dangroup
grup milik nama pengguna Anda.sumber
Setelah Anda menambahkan beberapa hal ... komit dan setelah semua selesai dorong! BANG !! Mulai semua masalah ... Seperti yang seharusnya Anda perhatikan ada beberapa perbedaan dalam cara proyek baru dan yang ada didefinisikan. Jika beberapa orang mencoba untuk menambah / mengkomit / mendorong file yang sama, atau konten (git menyimpan keduanya sebagai objek yang sama), kita akan menghadapi kesalahan berikut:
Untuk mengatasi masalah ini, Anda harus memiliki sesuatu dalam sistem izin sistem operasional karena Anda dibatasi olehnya dalam hal ini. Tu mengerti lebih baik masalahnya, silakan dan periksa folder objek git Anda (.git / objek). Anda mungkin akan melihat sesuatu seperti itu:
* Perhatikan bahwa izin file-file itu diberikan hanya untuk pengguna Anda, tidak ada yang tidak akan pernah bisa mengubahnya ... *
MEMECAHKAN MASALAH
Jika Anda memiliki izin pengguna super, Anda dapat maju dan mengubah semua izin sendiri menggunakan langkah dua, dalam hal lain apa pun Anda perlu bertanya semua pengguna dengan objek yang dibuat dengan pengguna mereka, gunakan perintah berikut untuk mengetahui siapa mereka. :
Sekarang Anda dan semua pengguna pemilik file harus mengubah izin file-file itu, melakukan:
Setelah itu, Anda perlu menambahkan properti baru yang setara dengan - shared = grup yang dilakukan untuk repositori baru, sesuai dengan dokumentasi, ini membuat repositori-grup dapat ditulis, lakukan mengeksekusi:
https://coderwall.com/p/8b3ksg
sumber
username:groupname
untuk milik saya, tetapi ketika saya mencobachmod -R 774 .
, saya kemudian dapat berlari dengangit add --all
sukses.Untuk kasus saya, tidak ada saran yang berfungsi. Saya menggunakan Windows dan ini bekerja untuk saya:
git remote add foo //SERVERNAME/path/to/copied/git
)git push foo master
. Apakah itu berhasil? Bagus! Sekarang hapus repo yang tidak berfungsi dan ubah nama ini menjadi apa pun sebelumnya. Pastikan izin dan berbagi properti tetap sama.sumber
Saya mengalami masalah yang sama ini. Membaca di sekitar sini saya menyadari itu adalah izin file pesan yang dimaksud. Perbaikannya, bagi saya, ada di:
/etc/inetd.d/git-gpv
Itu mulai git-daemon sebagai pengguna ' tidak ada ' sehingga tidak memiliki izin menulis.
(Saya ragu orang lain memanggil file conf inetd mereka git-gpv. Biasanya akan langsung di /etc/inetd.conf)
sumber
Anda memerlukan izin menulis yang cukup pada direktori yang Anda dorong.
Dalam hal ini: Windows 2008 server
klik kanan pada direktori git repo atau direktori induk.
Properti> tab Berbagi> Berbagi Tingkat Lanjut> Izin> memastikan pengguna memiliki hak akses yang sesuai.
sumber
Anda mungkin secara tidak sengaja memiliki repositori git
sumber
Ada kemungkinan juga bahwa Anda menambahkan repositori lokal lain dengan alias yang sama. Sebagai contoh, Anda sekarang memiliki 2 folder lokal yang disebut
origin
sehingga ketika Anda mencoba untuk mendorong, repositori jarak jauh tidak akan menerima kredensial Anda.Ganti nama alias repositori lokal, Anda dapat mengikuti tautan ini https://stackoverflow.com/a/26651835/2270348
Mungkin Anda dapat meninggalkan 1 repositori lokal sesuai keinginan Anda
origin
dan yang lain mengganti nama mereka misalnya dariorigin
keanotherorigin
. Ingat ini hanya alias dan yang perlu Anda lakukan hanyalah mengingat alias baru dan masing-masing cabang jarak jauh.sumber
Bekerja untukku
sumber
Saya mendapatkan ini ketika menarik ke dalam proyek Rstudio. Saya menyadari saya lupa melakukan:
pada startup program. Bahkan karena ada bug lain yang saya punya, saya harus benar-benar melakukannya:
sumber
Gunakan sudo untuk komit -m
sumber
Saya mendapatkan masalah ini dengan repositori jarak jauh pada share Samba; Saya berhasil menarik dari remote ini, tetapi gagal ketika mendorongnya.
Penyebab kesalahan adalah kredensial yang salah dalam
~/.smbcredentials
file saya .sumber