Git repo'yu ve üretim web sitesini bozmadan Drupal çekirdeğini yükseltmek için en iyi uygulama nedir


13

Tüm kodumun ana dalda olduğu bir Git depom var ve daha önce tüm Drupal dosyalarını görmezden geldim, böylece yazdığım (veya değiştirilen veya değiştirebilecek) kod ile kod arasında sıkı bir ayrım yaptım Drush ile ya da her neyse üretilebilir.

Drupal'ı yükseltmek zorunda kalana kadar bu iyi bir strateji gibi görünüyordu. İşler kötü gittiğinde geri dönmek istediğimi ve bunu yapmak için Git'ten daha iyi bir araç kullanmak istediğimi fark ettim. drupal-7.14Kendi kendime bu bir özellik dalı için mükemmel bir durum olacağını düşündüm, bu yüzden bir şube yaptım , .gitignoretüm kod ve ayar dosyalarımı görmezden gelmek ve sadece Drupal kurulumunun bir parçası olan dosyalara dikkat etmek için kendi verdim ' t dokunmak. El ile bir yükseltme yaptım (indirme, unzip, untar, kopya), robots.txt ve .htaccess gibi borderline vakaları sıralayarak ve Drupal'ın .gitignore'unun üzerine kendim yazıyorum. Bir 500 hatadan kurtulmak için 7.14 ile çalışan, ancak 7.15 ile çalışmayan bazı ayarları düzelttim ve sonra her şey mükemmel görünüyordu. Şube adını değiştirdim ve drupal-7.15mutlu bir şekilde yola çıkmak üzereydim.

Yanlışlıkla ne yaptığımı anlayana kadar: daha önce ana dalım tarafından izlenmeyen, ancak çalışma dizininde bırakılan dosyalar, artık denetlenmeyen dosyalar olmadıkları için, master'ı teslim aldığımda çalışma dizininden kaldırıldı! D'oh!

drupal-7.15Şubeyi master ile birleştirirsem kod ayrımını kaybedeceğim.

Muhtemelen bir dalı bir alt modüle dönüştürmenin bir yolu vardır. Bunun mümkün olduğunu varsayarsak, bu en iyi strateji olabilir. Bunu yapmadan önce, alt modüllerin "doğru" çözüm olduğunu biliyordum, ancak daha önce izlenmemiş dosyalar için dalları kullanmanın yan etkisini fark etmediğim için, köşeleri kesmeye ve o rotaya gitmeye karar verdim. (Ayrıca, Drupal ile alt modülleri kullanmakta gördüğüm tüm yaklaşımlar, yeni bir projeye başladığınızı ve Drupal'ın ana dal olacağını varsayar. Başka birinin kodunu ana dal yapmak benim için istenmeyen bir durumdur ve zaten bir ana dal ile bir repo. Bu sadece bir yükseltme yapmak için gereksiz karmaşık gibi görünüyordu.)

Düşündüğüm başka bir çözüm olabilir.

Mümkün olan en az olumsuz tarafı ile nasıl en iyi şekilde iyileşebilirim?

GÜNCELLEME : Bu geliştirilme aşamasındadır (dizüstü bilgisayarımdaki bir Linux VM'sinde) ve henüz üretime geçmedi. Üretime gittiğimizde, her şeyin özellik modüllerine sarılmasını planlıyorum, ancak bu henüz mevcut değil.

GÜNCELLEME 2 : Altmodüller may işi değildir. Pro Git'e göre, "Alt modüller bir Git deposunu başka bir Git deposunun alt dizini olarak tutmanıza izin verir". Drupal böyle güzel bir ayrım sağlamaz. Tüm Drupal kodunun bir alt dizinde olması yerine, ilişki az çok ters çevrilir, ancak hala temiz bir ayırma yoktur, çünkü .htaccess ve robots.txt dosyanızı düzenliyor olabilirsiniz, böylece kodunuz ve Drupal repo birlikte karıştırılır. Ben ediyorum bu soruna bir çözüm arıyor .


Sorunuz gerçekten git ile ilgili. Bunun Drupal'a özgü olmayan bir siteye taşınmasını sağlayarak daha iyi yanıtlar alacağınızı düşünüyorum. Yükseltmeler hakkında: Make dosyasını yeni bir dizinde oluşturarak yükseltmeleri yaparım ve ardından symlink'i eski ortak dizine güncelleyerek kod geri almalarını önemsiz hale getiririm.
Letharion

2
@Letharion katılmıyorum. Herkes, sitelerini mevcut sürümlerinden yeni bir sürüme geçirme sürecinden geçecektir. Çekirdeği yükseltmek için git kullanmak oldukça yaygındır, çünkü bu modülleri yükseltmek için yaygın olarak kullanılan bir yöntemdir. Daha önce yaşadığım gibi birçok insan bu sorunla mücadele edecek. Şu anda web'de bu sorunu ele alan iyi bir belge yok ve bunun bunun için iyi bir yer olduğuna inanıyorum.
iStryker

Sadece açıklığa kavuşturmak için, "Drupal'ı yükseltmek için en iyi uygulama" ile ilgili bir sorunun daha uygun olacağını düşünüyorum, çünkü bu soru gerçekten "Git hatasını nasıl düzeltebilirim". Konu hakkında güçlü duygular yok, o yüzden bırakacağım. :)
Letharion

Tamam yeterince adil. Brandon'ın yaşadığı sorun oldukça yaygın. Belki yeni bir soru oluşturmalı veya bunu yeniden yazmalıyım (ve geri kalanını başka bir soruya taşımalıyım). İlk 2-3 paragraf yaygındır. 7.x-1.0 git repo oluşturursunuz ve 7.x-1.1 sürümüne yükseltmek istiyorsunuz. Sorun dosyaları .gitignore, .htaccess ve robot.txt. Bazen bunların modifiye oldukları için izlemelerini istersiniz, bazen izlemelerini istemezsiniz çünkü modded oldukları için. Repo'yu yükseltirken, birleştirme oluşturup yeni bir şube mi oluşturuyorsunuz? @Letharion Öneri?
iStryker

@Letharion: Bunu StackOverflow'a Git sorusu olarak mı yoksa Drupal sorusu olarak mı koyacağımı düşündüm. Eğer oraya koyarsam herkes şikayet eder ve bunun Drupal ile ilgili olduğunu söylerdi ve bence gerçekten haklı olacaklardı. Git durumu onarmak için kullanılan araç olsa da, alınan yön Drupal'ın bilgisine bağlıdır. Her Drupal kullanıcısı Git'i kullanır (veya kullanmıyorlarsa kullanmalıdır), ancak Git kullanıcılarının sadece küçük bir kısmı Drupal'ı kullanır. Git hakkındaki soruya cevap veren insanlar Drupal arka planını anlamayacaklar.
iconoclast

Yanıtlar:


10

Yukarıdaki tartışmadan, sorunuzun git repo'nuzu düzeltmek değil, git'te bir Drupal sitesini korumak ve bunun temel güncellemelerle nasıl çalıştığı ile ilgili olduğu anlaşılıyor.

Standart uygulamanın aslında Drupal çekirdeği de dahil olmak üzere tüm dosyaları deponuzda tuttuğunu düşünüyorum. Drupal kodunun özel koddan ayrılması hoş bir fikir gibi görünüyor, ancak bunun gerekli olduğunu düşünmüyorum ve size hangi avantajları sağladığını görmüyorum. Ayrıca, en iyi uygulama olmasa da, bir şey kırılırsa kesinlikle yapmak istediğiniz bir şey olan çekirdeği asla yamalamak istemediğinizi (ya da dağıtımınızın bir parçası olarak yapmak zorunda kalmayacağınızı) varsayıyor. üretimde. Taahhütlerinizi iyi ve odaklı tutmak, bu tür bir ayrılığın elde edilmesine yardımcı olur.

Kullandığım çözüm, tüm kodu aynı depoda tutmak, Özellikler'e veya diğer dışa aktarma / kod / yapılandırma türlerine olabildiğince koymak ve dışına uygulanması gereken yamaların bir listesini tutmaktır. kutu çekirdek ve katkıda bulunur.

Çekirdeği güncellediğinizde, geliştirme ortamınızdan başlayın:

  • Çalışma dizininin temiz olduğundan emin olun
  • En son veritabanını ( drush sql-dump) dökümü . Çöp ile bir taahhütte bulunun veya güvenli bir yere kaydedin.
  • Çekirdeği güncelle ( drush up drupal)
  • Tüm değişiklikleri yapın.
  • Yama dosyasını kontrol edin. Herhangi bir yamanın uygulanması gerekiyorsa, uygulayın ve başka bir taahhütte bulunun
  • Gerekirse update.php dosyasını çalıştırın (güncelleme için drush kullandıysanız zaten yapılır)
  • Geliştirme sitenizi test edin. Her şey yolundaysa, kodu üretime aktarın. drush updbÜretimde çalıştırın .
  • Bir sorun varsa ve geri dönmeniz gerekiyorsa, repo'nuzu geri alın veya sıfırlayın ( git reset --hard HEAD~2yapmalısınız) veya geçmişi korumak istiyorsanız iki taahhüdü geri alın. Veritabanınızı dökümle değiştirin.

Veritabanı dökümü gereklidir, çünkü veritabanında yapılan değişiklikleri güncellemelerle geri alamazsınız. Güncellemeyi bir şubede de yapabilirsiniz, bu durumda geri döndürmek sadece master'ı kontrol etmek anlamına gelir. Bir geliştirici sitesinde çalışıyorsanız biraz tavsiye edilemez çünkü gerçekten master'a geri dönemez ve veritabanı nedeniyle paralel olarak çalışmaya devam edemezsiniz.

Bu daha basit git-side iş akışını kullanmak, alt modüllerin, vb. Karmaşıklığı olmadan git gerektiğinde git'in tam gücünü kullanmanıza izin verecektir.


0

Yukarıdaki yorumlarımdan, sahip olduğunuz bu soru git ile bir Drupal site dosyalarını korumak ve bunun temel güncellemelerle nasıl çalıştığıyla ilgilidir. Veritabanını yedekleme ve yükseltme hakkında hiçbir şeyden bahsetmediniz. Goron cevabından hiçbir şey kopyalamamaya çalışacağım.

Bu sorunla ilgili bir blog yazısı oluşturdum Git ile web sitenizde Drupal çekirdeğini yükseltme

Alternatif yöntemler

  1. Drush komutunu çalıştır drush up drupal
  2. Sürümler arasındaki farklardan bir yama uygulayın. Bkz. Http://drupal.org/node/359234 & http://fuerstnet.de/en/drupal-upgrade-easier

Bunu belirtmediniz, ancak Drupal sürümleri arasındaki değişiklikleri izlemek istiyorsanız, bunu dallar yerine etiketler kullanarak yapardım . Eğer yükseltme bitirdikten sonra taahhüt ustası , 7.x olarak kodunuzu etiketlemek


Doğru anlarsam, tüm Drupal çekirdek kodunu aynı depoda saklamamı önerirsiniz. Bu fikir birliği gibi görünüyor. İsteksizim, ama bunu vermek ve bu şekilde yapmak zorunda kalabilirim.
iconoclast

Evet hepsi bir havuzda. Çekirdek / ana havuzun içinde kendi git depoları olan modüller, profiller ve temalar var. En iyi yol olup olmadığını bilmiyorum, ama bildiğim en iyi yol bu.
iStryker

bu çözüm geri dönmenin bir yolunu sunmaz. benim oy verme nedenim.
Andre Baumeier

@Serpiente: Geri dönmek için bir yol eksikliğinin neden bir aşağı oy nedeni olması gerektiğini anlamıyorum. En iyi yaklaşım buysa, bu yeterli. Bunun en iyi yaklaşım olduğunu düşünmüyorsanız, lütfen neden olmadığını belirtin.
iconoclast

@iconoclast Zaman çizelgenize geri dönemezseniz revizyon sisteminin sorunu nedir? örneğin başarısız bir güncellemeyi düşünün - burada kurtarmanın yolu ne olurdu? "Ne olursa olsun" yazılımın sevk edilmiş versiyonunun açık bağımlılıkları olmalıdır, bunlar özellikle çerçeve çekirdeğini içerir. Aksi takdirde, git'inizi basitçe bırakabilir ve FTP sunumu yapmaya tekrar başlayabilirsiniz. sadece 2 sentim.
Andre Baumeier

0

Sadece OP gibi iki dal ile kurulum çalıştırıyorum: sadece benim özel kod ile bir şube ve benim özel ve çekirdek dosyaları hem de bir şube. Aynı durumla karşılaştım: şubeler arasında geçiş yaparken yok sayılan çekirdek dosyalar kaldırılır.

Ben iki özdeş git dizinleri olan sona erdi: - biri benim özel kod üzerinde çalışmak için, çekirdek dosyaları mevcut ama yoksayıldı, ve ben asla bu dizinde "tam" dalına geçmek olmaz - birleştirme yapmak için, böylece ben yalnızca bu dizinde şube anahtarlama ve birleştirme gerçekleştirin.

Bu iki dallı kurulumu seçmemizin nedeni, tüm yerel taahhütleri çekirdek dosyalara kolayca izlemek istediğimden, çekirdek dosyaları yükseltirken çekirdek modları incelemek ve yeniden uygulamak daha kolaydır.

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.