Git: penarikan otomatis dari repositori?

90

Adakah cara untuk mengatur git sedemikian rupa sehingga mendengarkan pembaruan dari repo jarak jauh dan akan menarik setiap kali ada perubahan? Kasus penggunaannya adalah saya ingin menerapkan aplikasi web menggunakan git (jadi saya mendapatkan kontrol versi dari aplikasi yang diterapkan) tetapi ingin meletakkan repo git "pusat" di Github daripada di server web (antarmuka Github sangat bagus) .

Adakah yang berhasil mendapatkan ini? Bagaimana Heroku melakukannya? Google-fu saya gagal memberikan hasil yang relevan.

Li Haoyi
sumber

Jawaban:

48

Git memiliki "hooks", tindakan yang dapat dijalankan setelah tindakan lainnya. Apa yang Anda cari adalah "hook pasca-terima". Di admin github, Anda dapat mengatur url pasca-terima yang akan terkena (dengan muatan yang berisi data tentang apa yang baru saja didorong) setiap kali seseorang mendorong ke repo Anda.

Untuk apa nilainya, menurut saya tarik otomatis bukan ide yang bagus - bagaimana jika ada sesuatu yang salah didorong ke cabang Anda? Saya akan menggunakan alat seperti capistrano(atau yang setara) untuk hal-hal seperti itu.

ksol
sumber
10
Kasus penggunaan yang saya rencanakan adalah memiliki repo / cabang terpisah untuk tahap dev "testing and messing around", dan memiliki repo "push to production" khusus yang saya dorong hanya setelah saya yakin semuanya berfungsi. Saya pada dasarnya menggunakan Git untuk dilakukan dengan rsync bisa dilakukan, kecuali itu menyimpan log dari semua versi yang disebarkan, dan saya dengan mudah dapat memutar kembali ke versi sebelumnya. Keuntungan dari sesuatu yang lebih hardcore seperti capistrano adalah saya tidak perlu mempelajari alat yang sama sekali baru untuk apa (yang sekarang) merupakan proyek yang sangat kecil.
Li Haoyi
otentikasi webhook menambah masalah keamanan dan kerumitan ekstra, jadi solusi berbasis tarik masih memiliki kelebihan. Kontrol versi rilis dapat dilakukan dengan tag untuk menghindari penerapan yang tidak disengaja.
lz96
21

Di unix-like, Anda dapat membuat tugas cron yang memanggil "git pull" (setiap hari atau setiap minggu atau apa pun) di komputer Anda. Pada windows Anda dapat menggunakan penjadwal tugas atau perintah "AT" untuk melakukan hal yang sama.

SigTerm
sumber
3
Bukan cara yang tepat untuk menggunakan Git.
deepdive
26
@deepive Mengapa tidak? Bayangkan Anda memiliki Rasperry Pi kecil di rumah Anda dan tidak ada IP statis yang tersedia. Opsi lain apa yang Anda dapatkan saat menjalankan tugas cron atau runwhen?
kaiser
2
Itu bukan ide yang bagus. Dia ingin perubahan segera diterapkan setelah mendorong.
boi_echos
10
OP secara khusus meminta metode yang mendengarkan pembaruan dari repo jarak jauh dan akan menarik setiap kali ada perubahan . Solusi ini hanya akan menarik dari repositori sesering mungkin, jadi agar efektif, intervalnya harus sangat singkat, yang mengarah ke banyak permintaan tarik yang berlebihan.
Boaz
3
Cara cepat untuk melakukan ini tanpa mengubah tab cron: while true; do git pull; sleep 10; done. Ini akan dilakukan git pullsetiap 10 detik ...
JakeD
3

Ada program integrasi berkelanjutan seperti Jenkins atau Bamboo, yang dapat mendeteksi commit dan memicu operasi seperti build, test, package, dan deploy. Mereka melakukan apa yang Anda inginkan, tetapi mereka berat dengan dependensi, sulit dikonfigurasi dan pada akhirnya mereka dapat menggunakan pemeriksaan berkala terhadap git repository, yang akan memiliki efek yang sama seperti memanggil git pull by cron setiap menit.

Pavel Niedoba
sumber
0

Saya tahu pertanyaan ini agak lama, tetapi Anda dapat menggunakan log windows dan git untuk menarik proyek Anda secara otomatis menggunakan webhook dan php (dengan asumsi proyek Anda melibatkan server web. Lihat inti saya di sini: https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

Ioannis Kokkinis
sumber