Ketika saya menjalankan git remote -v
di salah satu repositori Git saya yang memiliki kendali jarak jauh, saya melihat bahwa setiap kendali jarak jauh mengambil dan mendorong spesifikasi:
$ git remote -v
<remote-name> ssh://host/path/to/repo (fetch)
<remote-name> ssh://host/path/to/repo (push)
Untuk remote yang menunjuk ke peer developer, Anda tidak perlu mendorong, dan Git akan menolak untuk mendorong ke repositori yang tidak kosong. Apakah ada cara untuk mengkonfigurasi remote ini sebagai "hanya-ambil" tanpa alamat atau kemampuan push?
Jawaban:
Saya tidak berpikir Anda dapat menghapus URL push, Anda hanya bisa menimpanya menjadi sesuatu selain dari URL tarikan. Jadi saya pikir yang paling dekat Anda akan dapatkan adalah sesuatu seperti ini:
Anda mengatur URL push to
no-pushing
, yang, selama Anda tidak memiliki folder dengan nama yang sama di direktori kerja Anda, git tidak akan dapat menemukan. Anda pada dasarnya memaksa git untuk menggunakan lokasi yang tidak ada.sumber
git remote set-url --push origin -- --read-only--
- perhatikan tambahan--
untuk memungkinkan nama dengan tanda hubung utama. Ini terasa lebih mudah dibaca oleh saya.Selain mengubah URL push menjadi sesuatu yang tidak valid (misalnya,
git remote set-url --push origin DISABLED
), Anda juga dapat menggunakanpre-push
hook.Salah satu cara cepat untuk berhenti
git push
adalah dengan symlink/usr/bin/false
menjadi hook:Menggunakan kait memungkinkan untuk kontrol yang lebih halus dari dorongan jika diinginkan. Lihat
.git/hooks/pre-push.sample
contoh bagaimana mencegah mendorong komitmen dalam pekerjaan.Untuk mencegah mendorong ke cabang tertentu atau membatasi mendorong ke cabang tunggal, ini dalam contoh kait:
Repo uji dengan beberapa remote:
Mendorong ke
origin
diizinkan:Mendorong ke remote lain tidak diizinkan:
Perhatikan bahwa
pre-push
skrip kait dapat dimodifikasi untuk, antara lain, mencetak pesan ke stderr dengan mengatakan push telah dinonaktifkan.sumber
Pernyataan umum "Git akan menolak untuk mendorong ke repositori non-telanjang" tidak benar. Git hanya akan menolak untuk mendorong ke repositori jarak jauh yang tidak kosong jika Anda mencoba untuk mendorong perubahan yang ada di cabang yang sama dengan direktori kerja yang dicentang dari repositori jauh.
Jawaban ini memberikan penjelasan sederhana: https://stackoverflow.com/a/2933656/1866402
(Saya menambahkan ini sebagai jawaban karena saya belum memiliki reputasi yang cukup untuk menambahkan komentar)
sumber
Jika Anda sudah memiliki pengaturan jarak jauh dan hanya ingin mencegah diri Anda melakukan sesuatu seperti mendorong langsung ke
master
ataurelease/production
, Anda dapat mencegahnya menggunakan inigit config
.Untuk catatan,
no_push
bukan nama khusus. Itu hanya nama cabang yang tidak ada. Jadi Anda bisa menggunakan$ git config branch.master.pushRemote create_a_pr_and_do_not_push_directly_to_master
dan itu akan berfungsi dengan baik.Info lebih lanjut: git-config pushRemote
sumber
Jika Anda memiliki kendali atas repositori, Anda dapat mencapainya dengan memanfaatkan izin. Pengguna yang mengambil repositori tidak boleh memiliki izin menulis di repositori master.
sumber