Saya memiliki repo git (yang kosong) yang sampai saat ini hanya dapat ditulis oleh saya. Saya ingin membukanya untuk beberapa grup pengguna UNIX, foo, sehingga semua anggota foo dapat mendorongnya. Saya sadar bahwa saya dapat dengan mudah menyiapkan repo git baru dengan:
git init --bare --shared=group repodir
chgrp -R foo repodir
Tetapi saya membutuhkan operasi yang setara untuk direktori repo yang ada .
git
permissions
share
shared
Pistos
sumber
sumber
Jawaban:
Coba ini untuk membuat repositori yang ada
repodir
berfungsi untuk pengguna dalam grupfoo
:sumber
git init --shared
perintah pada repo yang ada untuk menyetel nilai konfigurasi. Anda juga perlu melakukanchmod
perintah untuk mendapatkan izin file dengan benar.git pull
dll sebagai root daripada sebagaiwww-data
atau apapun pemiliknya dan sebagai hasilnya Anda dapatkanerror: insufficient permission for adding an object to repository database .git/objects
. Saya pikir saya telah memperbaiki kepemilikan semua file / direktori yang salah dengan menggunakanfind
dan-type d
/type -f
, tetapi hanya metode ini yang menghilangkan kesalahan (mungkin karena file di beberapa subdirektori tidak dapat ditulisi grup?)core.sharedRepository
akan menyebutkan ini - tampaknya tidak berguna tanpa pengguna membuat semua grup file mereka dapat ditulisi.Di repo dir jalankan perintah berikut:
Edit: Untuk mengatasi kebingungan yang sering terjadi,
group
ini adalah kata kunci yang sebenarnya, Anda tidak boleh mengganti ini dengan nama grup.sumber
group
BUKAN nama grup :)git config core.sharedRepository dev
kemudian mengetikgit config
saya mendapatkanfatal: bad config value for 'core.sharedrepository' in .git/config
digit version
1.7.0.4
(dan mungkin versi setelah)git config core.sharedRepository group
group
bukanlah nama grup, tetapi nilai sebenarnya!Menggabungkan jawaban @David Underhill dan @kixorz , saya membuat solusi (definitif) saya sendiri.
Ini untuk repo telanjang dan repo non-telanjang . Hanya ada sedikit perbedaan di antara mereka, tetapi cara ini lebih jelas.
REPOSITORI BARE
dimana:
<repo.git>
adalah direktori repositori kosong, biasanya di server (mismy_project.git/
.).<group-name>
adalah nama grup untuk pengguna git (mis. pengguna ).REPOSITORI NON-BARE
dimana:
<project_dir>
adalah direktori proyek yang berisi.git
folder tersebut.<group-name>
adalah nama grup untuk pengguna git (mis. pengguna ).sumber
chmod g-w objects/pack/*
(jika repositori non-kosong, awali.git/
)find . -type d
' menimbulkan kesalahanunable to execute /bin/chmod: Argument list too long
chmod g+s `find . -type d`
tidak skala. Gunakanfind -type d -exec chmod g+s {} +
chmod g-w objects/*/*
. Saya tidak yakin tentang subdirektori info karena repo ini kosong.Ini mungkin tidak perlu, tetapi ada baiknya menunjukkan bahwa
git init --bare --shared
juga menyetel opsi denyNonFastForwards .Arti dari opsi ini adalah sebagai berikut:
(dari http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration )
sumber
Selain jawaban di atas untuk mengizinkan sebuah grup membaca / menulis, Anda juga perlu menambahkan pengguna ke grup (katakanlah "foo").
Catatan: Anda harus terlebih dahulu membuat pengguna jika tidak ada
sumber