Saya meng-host repositori git saya sendiri di VPS. Katakanlah pengguna saya adalah john.
Saya menggunakan protokol ssh untuk mengakses repositori git saya, jadi url saya mirip ssh://[email protected]/path/to/git/myrepo/
.
Root adalah pemilik semua yang ada di bawah /path/to/git
Saya mencoba memberikan akses baca / tulis ke john untuk semua yang ada di bawah /path/to/git/myrepo
Saya sudah mencoba baik chmod
dan setfacl
akses kontrol, namun keduanya gagal dengan cara yang sama: mereka menerapkan hak rekursif (dengan pilihan yang tepat) untuk semua subdirektori yang ada saat ini dari /path/to/git/myrepo
, tetapi segera setelah direktori baru dibuat, pengguna saya tidak bisa menulis di direktori baru.
Saya tahu bahwa ada kaitan di git yang akan memungkinkan saya untuk menerapkan kembali hak setelah setiap komit, tetapi saya mulai berpikir bahwa saya salah jalan karena ini tampaknya terlalu rumit untuk tujuan yang sangat mendasar.
T : Bagaimana saya harus mengatur hak saya untuk memberikan akses baru ke john ke apa pun di bawah /path/to/git/myrepo
dan membuatnya tangguh terhadap perubahan struktur pohon?
T2 : Jika saya harus mengambil langkah mundur mengubah pendekatan umum, tolong katakan padaku.
Sunting : Pertanyaan dijawab apa adanya, tapi itu adalah pertanyaan yang salah. Pertanyaan yang tepat adalah "Bagaimana mengkonfigurasi repositori bare git di server untuk digunakan dengan akses ssh?". Lihat jawaban saya sendiri.
sumber
g+s
. Tentu saja Anda harus terlebih dahulu memahami dasar-dasarnyachmod
juga.{}
- adalah pengganti untuk nama file pengganti.;
adalah terminator dari perintah yang dieksekusi oleh-exec
. Seperti;
memiliki makna khusus dibash
dalamnya, harus diloloskan dengan \. lihatman find
detailnyaSebenarnya itu pendekatan yang salah. Setelah penelitian tambahan, saya menemukan bahwa dalam kasus saya, saya harus menggunakan fitur buildin pengguna git untuk menangani hak filesystem dalam repositori.
Ini pada dasarnya dilakukan dengan
shared
opsigit init
, yang dapat memiliki (antara lain) nilai-nilai berikut:group
: inisialisasi repositori sehingga file dan direktori memiliki akses tulis pengguna dan grup, dan semua orang memiliki akses baca0660
: sama tetapi tanpa akses baca untuk yang lain.Direktori dan file yang baru dibuat secara otomatis memiliki izin yang tepat. Anda juga dapat menggunakan
git init
repositori yang sudah ada untuk mengkonfigurasi ulang tanpa kehilangan kontennya.Jadi pada akhirnya apa yang harus saya lakukan:
mygitrepo
root:mygitrepo
Dan sekarang setiap pengguna grup dapat menarik / mendorong, dan tidak ada orang lain yang bisa, dan itu tanpa mengacaukan hak sistem file.
http://www.kernel.org/pub/software/scm/git/docs/git-init.html untuk informasi lebih lanjut.
sumber
Jika ACL didukung, Anda dapat melakukannya dengan ACL default. Berhati-hatilah karena mudah melupakannya karena tidak muncul saat Anda melakukan
ls -l
.Tapi, saya curiga Anda mungkin ingin melakukan sesuatu yang sedikit lebih terorganisir. Menyebarkan gitolite dapat memberikan solusi yang lebih baik.
sumber
ls
(dan saya pikir Squeeze juga) Anda mendapatkan+
di akhir izin untuk mengatakan ada ACL:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
sintaks, di mana{}
diganti dengan banyak nama file yang ditemukan sebanyak mungkin (seperti oppsed ke{} \;
mana{}
hanya diganti dengan satu file yang ditemukan pada satu waktu)