2009-09-16 11 views
7

Uzaktaki bir sunucudaki bazı verileri yönetmek için git kullanmak istiyorum, bu yüzden orada non-bare deposu var. Bunu sorunsuz bir şekilde zorlayabilirim ve deponun kendisi güncellenir ancak asıl dosyalar değiştirilmez/eklenmez/silinmez. Sunucuya ssh etmeliyim ve dosya yapısının gerçekte güncellenmesini sağlamak için birGit: ne zaman tıklandığında uzak dizin güncellemesi nasıl yapılır?

'u kullanmalıyım.

Ne yapmalı? Orada

hooks

Eğer her güncellemede istediğini yürütebilirsiniz:

cevap

7

Bunu yapmamalısınız. Çıplak depoların bulunması tavsiye edilir. Başka bir deyişle, hiçbir dosya teslim edilmedi, sadece .git dizininin kendisi. Ardından, deponuzu sunucunuzdaki başka bir konuma - yani web kökünüze - kontrol edebilirsiniz. Bu şekilde, en iyi uygulama:

  • Git dokümanlarına göre, onu izlemezseniz "beklenmedik sonuçlar" alabilirsiniz. İyi bir programlama yapabilen herkes "beklenmedik sonuçlar" ın "muhtemelen çocuklarınızı yiyeceği ve her ne pahasına olursa olsun kaçınılması gerektiği" için bir kod olduğunu bilir. Bir web sunucusundan erişilebilir sunucuda teslim alınmış dosyaları almayı planlıyorsanız, daha iyi güvenlik için

  • .

  • Teslim kodunuzdaki yerel değişiklikler ve teslim alınmış koda kısa sürede değişiklik yapma yeteneği. Bunu doğrudan depoda yapmayı deneyebilirsiniz, ancak dağınık ve hataya daha açık hale gelir.

  • Sunucu havuzunuzu, canlı hizmet kodunuzu güncelleştirmekten bağımsız olarak güncelleyebilme. Bu, uzaktan çalışıyorsanız ve sunucuya bir şey göndermeniz gerekiyorsa ve daha sonra canlı hizmetinize hazır hale gelmeden önce ya da canlı servis kodunuzda değişiklikler yapıyorsanız (örneğin, farklı yapılandırma ayarları), oldukça önemlidir.) ve bu değişiklikleri repodaki değişikliklerle birleştirmeli, ancak şimdi yapamayız.

  • aşağıdaki adımları öneriyoruz:

    • canlı servis hedef dir
    • Kurulum için repo kodu
    • kontrol çıplak depo dışarı kurma hakkında git docs izleyin depo güncelleştirildiğinde canlı hizmetinizi güncellemek için bir git kanca (post-commit doğru bir IIRC olmalıdır). Muhtemelen canlı servis direkine cd yapmalı ve bir tane --rebase çekmeli ve belki de bazı dosya izinlerini ayarlamalıdır.
    • Sadece kodunuzu şu an dev kutusundan repoya aktarın.
    +0

    Çok faydalı bir cevap. Teşekkürler! – Felixyz

    +0

    Ancak en azından çeşitli türde üretim dışı kurulumlar için Brandon Rhodes'un yanıtına bakın. – Felixyz

    3

    sonrası bir güncelleme kanca kullanın.

    +0

    Tam olarak düşündüm. –

    +0

    Teşekkürler. Bunu başarmak için basit bir ortam olacağını umuyordum. Ama kancalar da yeterince basit görünüyor. – Felixyz

    1

    Git Sürüm 1.9.1
    Ubuntu Server 14.04 LTS
    LAMP Sunucusu

    Web geliştiricilerimden biri sunucuda bir değişiklik yaptığında, LAMP sunucumu Git repo'mın çalışma dizinimi güncelleyecek şekilde ayarlıyorum. Günlüğün yeni işlemleri not edeceğini, ancak çalışma dizinini güncelleştirmeyeceğini fark ettim. Her güncelleme için bunu manuel olarak (git checkout -f) yapmak yerine, bir itme alındıktan sonra otomatik olarak ayarlanabilir.

    1. ".git" dizininizde "kancalar" klasörüne gidin.
    2. bu içerikle "kanca" klasörü içinde "post-alma" adlı bir dosya oluşturun:!

      #/bin/sh

      # Güncelleme çalışma dizinini uzak müşterilerinden gelen bir itme aldıktan sonra.
      # Bu, git çalışma dizinine yönlendirilmelidir.

      GIT_WORK_TREE =/var/www/dev_site git ödeme

    3. "kanca" klasöründe "chmod + x sonrası alma" yazarak dosyayı yürütmek için izinleri etkinleştir -f.

    Şimdi, çalışma dizini Git repo'ya aktarıldığında çalışma dizini güncellenecektir. Sitem şimdi bir tarayıcıda ziyaret ettiğimde değişiklikleri gösteriyor.

    My çalışma dizini/var/www/dev_site

    +0

    GIT_WORK_TREE satırı, çalışma dizininize işaret etmelidir. –

    +0

    bu, düzenli bir Repo için değil, çıplak bir Repo için. Çıplak bir Repo'nun çalışma dizini yoktur. –

    3

    Bu, mutlulukla, artık Git kendisi doğrudan destekleniyor edilir! Sen sadece upvoted gelmiş bu cevap ayrıntıları bulabilirsiniz:

    https://stackoverflow.com/a/38363683/85360

    O kadar o güncelleştirilmiş çalışma kopyasını yol iter

    git config receive.denyCurrentBranch updateInstead 
    

    ile uzaktan konfigüre önerir!

    +1

    Harika, teşekkürler! Gerçekten ne kadar çok sorduğumu unutmuş olduğum şeyleri takip etmeme izin verdiğini takdir ediyorum. Kabul edilen cevabın birçoğunun hala geçerli olduğunu düşünüyorum (belki de "kontrol edilen koddaki canlı değişiklikler"), ancak "üretim kullanımı" olmayan pek çok durum için bu gerçekten yararlıdır. – Felixyz

    İlgili konular