2012-01-31 20 views
7

Şu anda sadece kaynak kontrol altında klasörlerde oturan bir sürü php dosyaları var. Mantıksal olarak ilgili projelerden oluşan bir koleksiyona ve paylaşılan bir veritabanına sahibim.PHP proje organizasyonu

  • Proje 1, bir veritabanıyla etkileşimde bulunan bir web uygulamasıdır.
  • Proje 2, aynı veritabanıyla etkileşimde bulunan bazı arka plan işlemleridir.
  • Proje 3, genişletilmiş veritabanı bağlantı nesneleri ve diğer yardımcı işlevler içeren bir kütüphanedir.

Proje 1 ve 2, kütüphane koduna göre değişir.

Projeleri bağımsız olarak geliştirilebilmesi için üç ayrı depoya ayırmak istiyorum.

İlk iki projeyi organize etmenin en iyi yolu nedir, bu nedenle kütüphaneye bağlılar, fakat kütüphanenin kendi kopyasına kaynak ağacında ihtiyaç duymazlar mı?

Kitaplığı bir PEAR paketine dönüştürmeli ve bu paketi yüklü sistem genişliğine sahip olmamalıdır. Veya, 1 ve 2 numaralı projelerin bir anlamda 'oluşturulmasını/dağıtılmasını' ve bu yapılama adımı sırasında kütüphanenin bir kopyasını içermesini daha iyi hale getirin. Bu yaklaşım, Phing/PHP-Maven gibi bir tür yapı yönetim aracının kullanılmasını ima eder.

+1

Hangi scm yazılımını kullanıyorsunuz? Sembolik bağlantılar ne olacak? – hakre

cevap

3

Kodun bir kopyasını kaynak ağacın içinde tutmak kötü bir şey değildir. Sistemin uygulamanıza empoze edilmesini değil, yükseltme aşamalarından geçtiğinizde kontrol etmenizi sağlar. Kodunuzu serbest bırakmanız gerektiğinde oldukça kötü bir durumdur ve daha önce gerçekleşen bir kütüphane değişikliği, sizi yaşamak zorunda olan yazılımlarda son dakika değişikliklerini yapmaya zorlar.

Subversion kullanıyorsanız, kütüphane kodunu uygulamanıza eklemek için externals'ı kullanabilirsiniz ve belirli bir revizyonda kilitleyebilirsiniz. Güncelleme, sürüm numarasını değiştirmek ve kodu güncellemek için bir mülkü düzenlemekle ilgilidir.

Diğer sürüm denetim araçları benzer işlevler sunabilir. Symfony2 gibi bazı projeler de bağımlılıkları yönetmek için bir komut içerir, ancak sadece git destekliyorlar.

+0

Aslında bu doğru bir nokta. Muhtemelen şimdilik en iyi çözüm. Değeri için aslında Mercurial kullanıyorum. Kütüphanenin en son sürümü ne olursa olsun tabi olmayı istememekle ilgili bir noktaya gelin. – freshnewpage

+0

Bunun için mercurial kullanımı hakkında bir iş parçacığı var. Bir uzantı mevcut gibi görünüyor. http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial –

1

Belki de bir maven kullanıcısı olduğum için, proje3'ü proje1 ve projenin2 bağımlılığı olarak beyan etmeyi tercih ederim ve maven'i yapı yönetim aracı ve bağımlılık çözümleyici (diğer şeylerin yanı sıra) olarak kullanmayı tercih ederim. @ Louis-Philippe Huberdeau'nun işaret ettiği versiyon problemi sürümleri kullanmaktan ve bağımlılıkların sürüme özgü olduğunu bildirmekten kaçınmak olabilir: örn. Geliştirme projeleri için project3-1.0-SNAPSHOT'a bağlı olabilir ve serbest bırakma için bağımlılık project3-1.0-RELEASE olur. . Bu şekilde üç proje bağımsız olarak gelişebilir. Eserlerin versiyonlanması ve dağıtımı maven tarafından yapılabilir. Daha sonra, ihtiyacınız varsa, hudson veya Travis CI gibi bir CI sunucusu kullanabilirsiniz.

+0

Çoğunlukla bir sabit diskteki sabit bir yere işaret etmekteydim. Ortak refleks insanlar PHP'de var. –

+0

Evet, C# içindeki ortak bir refleksle uğraşıyorum: P Biz miras kalan bir C# 'da svn externals kullanıyoruz ama bunu değiştirmek isterim. – Diego