Git: depodan otomatik çekme?


91

Git'i uzak bir depodan güncellemeleri dinleyecek ve bir şey değiştiğinde çekecek şekilde kurmanın bir yolu var mı? Kullanım örneği, git kullanarak bir web uygulamasını dağıtmak istiyorum (bu yüzden dağıtılan uygulamanın sürüm kontrolünü elde ediyorum), ancak "merkezi" git deposunu web sunucusu yerine Github'a koymak istiyorum (Github'ın arayüzü çok güzel) .

Bunu çalıştıran var mı? Heroku bunu nasıl yapıyor? Google-fu'm bana alakalı sonuçlar veremiyor.

Yanıtlar:


49

Git, diğer eylemlerden sonra yürütülebilecek eylemler olan "kancalara" sahiptir. Görünüşe göre aradığınız şey "alma sonrası kancası". Github yöneticisinde, birisi deponuza her ittiğinde vurulacak (az önce neyin itildiğiyle ilgili verileri içeren bir yük ile) bir alma sonrası url'si ayarlayabilirsiniz.

Değeri ne olursa olsun, otomatik çekmenin iyi bir fikir olduğunu düşünmüyorum - peki ya dalınıza yanlış bir şey gönderildiyse? capistranoBöyle şeyler için benzer (veya eşdeğeri) bir araç kullanırım .


12
Planlı kullanım durumum, geliştirici "test etme ve uğraşma" aşaması için ayrı bir depoya / şubeye sahip olmak ve her şeyin çalıştığından emin olduğumda yalnızca bir kez ittiğim özel bir "üretime aktarım" deposuna sahip olmaktı. Temelde rsync ile yapmak için Git kullanıyorum, ancak dağıtılan tüm sürümlerin günlüğünü tutuyor ve kolayca önceki bir sürüme geri dönebiliyorum. Kapistrano gibi daha sert bir şeye göre avantajı, (şu an itibariyle) gerçekten küçük bir proje için yepyeni bir araç öğrenmem gerekmeyecek olmasıdır.
Li Haoyi

webhook kimlik doğrulaması ekstra güvenlik sorunları ve karmaşıklık ekler, bu nedenle çekme tabanlı çözümlerin hala avantajları vardır. Kazara dağıtımdan kaçınmak için etiketlerle yayın sürümü kontrolü yapılabilir.
lz96

21

Unix beğenilerinde, makinenizde "git pull" (her gün veya her hafta veya her neyse) çağıran cron işi oluşturabilirsiniz. Windows'ta aynı şeyi yapmak için görev zamanlayıcı veya "AT" komutunu kullanabilirsiniz.


3
Git kullanmanın uygun bir yolu değil.
deepdive

28
@deepdive Neden olmasın? Evinizde küçük bir Rasperry Pi'nin olduğunu ve statik IP'nin mevcut olmadığını hayal edin. O zaman bir cron çalıştırma veya iş sırasında çalıştırma seçeneğiniz var mı?
kaiser

2
İyi bir fikir değil. Değişikliklerin itildikten hemen sonra uygulanmasını istiyor.
boi_echos

11
OP, özellikle uzak bir depodan gelen güncellemeleri dinleyen ve bir şey değiştiğinde onu çeken bir yöntem istiyor . Bu çözüm, depodan sık sık çekerdi, bu nedenle etkili olması için aralığın çok kısa olması gerekir ve bu da çok sayıda gereksiz çekme isteğine yol açar.
Boaz

3
Hızlı bir yolu cron sekmesini değiştirmeden bunu yapmak: while true; do git pull; sleep 10; done. Bu git pullher 10 saniyede bir yapacak ...
JakeD

3

Jenkins veya Bamboo gibi, taahhütleri algılayabilen ve derleme, test etme, paketleme ve dağıtma gibi işlemleri tetikleyebilen sürekli entegrasyon programları vardır. İstediğinizi yaparlar, ancak bağımlılıklarla ağırdırlar, yapılandırmaları zordur ve sonunda git deposuna karşı periyodik kontrol kullanabilirler, bu da git pull by cron her dakika çağırmak gibi aynı etkiye sahiptir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.