Şimdi Ara

Git ile Proje Yönetimi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
9
Cevap
0
Favori
762
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba Arkadaşlar,

    Çalıştığım şirkette geliştirmiş olduğumuz bir web projesinde, dosya sisteminde ana bir proje var. Müşteri bazlı değişiklikler musteri_adı şeklinde klasörlerde tutuluyor. Müşteriye kurulum yapılacağı zaman ana klasörün üzerine müşteri_ismi ile kayıtlı olan klasörü yapıştırarak kurulum yapıyorum fakat işler arap saçına dönmüş durumda. Ben şirkete gelmeden önce dönmüş diyebilirim hatta :)

    Araştırmalarım sonucunda git'i bu mantıkla kullanarak hem çok daha az yer kaplayacak hem aynı anda yedeklerimi server'da tutabileceğim sanırım.

    Mantığımı sizlerle paylaşıp doğrumu yanlış mı' git'in mantığına uyuyor mu bunu irdelemek istedim. Master'da şu anda benim ana proje var, branclarda müsteri_adı şeklinde. Ben müşteri birşey istediğinde o müşterinin brac'hında değişiklik yapıcam, eğer genel bir değişiklik varsa master ile merge edip kurulumu yapıcam. Tek sıkıntı aynı dosyada değişiklik yapıldığında olan çakışmalar, ama onlarıda elle kolayca düzeltebiliyorum.

    Yedekler kendi localimizdeki server'ımızda olacak. Akşamları push yapmam yeterli olur sanırım. Önerilerinize açığım, şu anki yapıyı git'e geçirmek baya vaktimi alacak ama sanırım çok daha temiz ve kararlı olacak. :)

    Önerilerinizi ve yorumlarınızı bekliyorum.

    Not: Proje php, html, javascript tabanlı - Bi önemi yok sanırım.

    Not 2: Sizlere danışma sebebim git ile iki gündür uğraşıyor olmam. Baya yol katettim, hatta yukarıda bahsettiğim yapıyı kabaca kullanabiliyorum ama değerli tecrübelerinizden faydalanmak istedim.

    Teşekkürler...







  • dosyalar az yer kaplayacaksa neden kendi server'ınızı kullanmıyorsunuz ?
    git kaynak kodları saklamak için idealdir.Anı anına saklayabilirmi bilmem.
  • Kemâncı kullanıcısına yanıt
    Kendi server'ımızı kullanacağız zaten, bir yanlış anlaşılma oldu sanırım. Ayrıca Projede yapıp kaydettiğiniz her değişikliği logluyor. Commitlerken de güzel bir açıklama yazdınız mı mükemmel bir düzen içinde saklanacağını düşünüyorum. :)
  • quote:

    Orijinalden alıntı: -evren-

    Kendi server'ımızı kullanacağız zaten, bir yanlış anlaşılma oldu sanırım. Ayrıca Projede yapıp kaydettiğiniz her değişikliği logluyor. Commitlerken de güzel bir açıklama yazdınız mı mükemmel bir düzen içinde saklanacağını düşünüyorum. :)

    Hmm.. anladım hocam , git'in çalışma düzenini pek bilmiyorum proje derken genellikle .cpp , .cs ,.java , .php , gibi dosya uzantıları kalıyor ve projeyi güncelleyen kişi yorum da ekleyebiliyor diye biliyorum ama siz bir kişinin bilgileri gibi , saklamayı pek olumlu bakmıyorum onun yerine veritabanıda kiralanabilir.
  • Merhaba,

    Git'in yaklaşımı sizin sorununuzu çözmez. Git üzerinde farklı özellikler için farklı branchler açılabilir ama release çıkarmadan önce bunların master ya da minor release branchlerine merge edilmesi gerekir ( kusura bakmayın yarı türkçe yarı ingilizce oldu )
    kısaca, sizin n tane müşteriniz var diyelim eğer n branch üzerinden her müşteri için ayrı release çıkaracaksanız bu müşterilerde kullandığınız common componentlerde değişiklik yapmaya gittiğinizde n tane branch üzerinde değişiklik yapacağınız anlamına gelir. Bu hem bakım/değişiklik maliyetlerini çok yükseltir hem de hataya yol açar. Kısaca git bunun için tasarlanmamıştır, kullanabilirsiniz ama sorununuzu çözmez malesef.

    Sizin yaptığınızın benzeri projeler için genel yaklaşım, müşterilere özgü custom özelliklerin/ayarların genelde configuration dosyaları üzerine alınması ve her müşterinin kendi ortamında kendi config dosyası ile çalışmasını sağlamaktır.
    Örnek vermek gerekirse, a, b, c diye üç müşteriniz olsun. Bu müşterilerinize özgü ayarları farklı dosyalarda tutalım, atıyorum


    config-a.properties
    config-b.properties
    config-c.properties

    buradan sonra iki seçenek çıkıyor karşınıza. projeyi nasıl build ediyorsunuz bilmiyorum, php ye de çok aşina değilim ama java dan örnek vermek gerekirse maven benzeri bir build aracı kullandığınızda verdiğiniz parametreye ( a ) göre projeniz a müşterisi için build edilirken içerisine config-a.properties dosyası atıyorum config.properties adıyla değiştirilerek paketlenir ve bunu a müşterisine gönderdiğinizde kendi ayarları ile çalışır.

    bir diğer seçenek de projeyi paketlerken/build ederken bunları ayarlazsınız tüm config dosyalarını koyarsını projeye. Bu sefer de projenin içrisinden hangi dosyasnın nerede okunacağını ayarlamanız gerekir. En çok kullanılan yöntem müşteri ortamında bir sistem değişkeni atarsınız, buna da müşterinizin adını verirsiniz. Projeniz de ayarları okurken bu sistem değişkenini okur, atıyorum değeri b ise config-b.properties dosyasındaki ayarlar ile çalışır. Bu yöntem eğer müşterilere özgü ayarlar gizlilik teşgil ediyorsa sakıncalı olabilir.



    eğer farklı müşteriler için yapılan değişiklikler ayar dosyalarında kontrol edilecemeyecek gibiyse o zaman en mantıklısı ortak özelliklerin bir projeye/component'e alınması ve müşterilere özgü projelerin bu projeden türemesi ya da bu component'i kullanmasını sağlamaktır. Bu sayede tüm müşterilerin kullandığı özelliği bir kez değiştirdiğinizde bu tüm müşterilere özel projelerde etkili olacaktır. Tabi bu sefer de bu ortak kodların versiyonlarının kontrol edilmesi uğraştırıcı olabiliyor. java için yine maven bu konuda çok ideal bir çözüm, php karşılığını bilemiyorum.




  • bestanealtcizgi B kullanıcısına yanıt
    Merhaba,

    Öncelikle ilgilenip detaylı cevap verdiğiniz için teşekkür ederim.

    Son seçenekte bahsettiğiniz üzere, yapılan değişiklikler ayar dosyalarında kontrol edilemeyecek gibi. Elimden geldiğince sistemi parametrik hale getirmeye çalışıyorum. Sizin "en mantıklısı ortak özelliklerin bir projeye/component'e alınması ve müşterilere özgü projelerin bu projeden türemesi" diye kasdettiğiniz şekilde giti kullanmak istiyorum aslında. Bu ortak özellikler master'da geliştirilecek. Ekstra tüm müşterileri etkileyecek işlemlerin hepsi burada gerçekleşecek. Müşteriye özgü değişiklik olduğunda ise müşteri adıyla oluşturduğum branch'a geçip orda değişiklikleri yapıcam ve master dalıyla merge edip müşteriye göndericem. Benim yaptığım testlerde herhangi bir problem olmuyor gibi, nasıl sorunlar çıkabilir açıklayabilir misiniz? Aslında yaptığım bir core üzerinden değişik versiyonlar üretmek. Coredaki gelişmeler merge işlemi ile diğer versiyonlarla paylaşılacak. Yanlış mı düşünüyorum?




  • quote:

    Orijinalden alıntı: -evren-

    Merhaba,

    Öncelikle ilgilenip detaylı cevap verdiğiniz için teşekkür ederim.

    Son seçenekte bahsettiğiniz üzere, yapılan değişiklikler ayar dosyalarında kontrol edilemeyecek gibi. Elimden geldiğince sistemi parametrik hale getirmeye çalışıyorum. Sizin "en mantıklısı ortak özelliklerin bir projeye/component'e alınması ve müşterilere özgü projelerin bu projeden türemesi" diye kasdettiğiniz şekilde giti kullanmak istiyorum aslında. Bu ortak özellikler master'da geliştirilecek. Ekstra tüm müşterileri etkileyecek işlemlerin hepsi burada gerçekleşecek. Müşteriye özgü değişiklik olduğunda ise müşteri adıyla oluşturduğum branch'a geçip orda değişiklikleri yapıcam ve master dalıyla merge edip müşteriye göndericem. Benim yaptığım testlerde herhangi bir problem olmuyor gibi, nasıl sorunlar çıkabilir açıklayabilir misiniz? Aslında yaptığım bir core üzerinden değişik versiyonlar üretmek. Coredaki gelişmeler merge işlemi ile diğer versiyonlarla paylaşılacak. Yanlış mı düşünüyorum?

    tekrar merhaba

    common componentlerden müşteriye özgü bir proje türettiğinizde bu bir branch olmaz, olmamalı. Bu adı üzerinde yeni bir proje olmalı. branchler sadece versiyonlar ve bunların içerdiği featurelar için açılır.
    ayrıca "Müşteriye özgü değişiklik olduğunda ise müşteri adıyla oluşturduğum branch'a geçip orda değişiklikleri yapıcam ve master dalıyla merge edip müşteriye göndericem" demişsiniz. Burada masterda common componentlerin olduğunu varsayarsak eğer, bunu yaptığınızda masterı ezip ilgili müşterinin değişikliklerini master hale getirmiş olursunuz.

    merge işlemi, branchler üzerinde yapılan değişkliklerin bir temel branch ( master ) üzerinde toplanmasıdır.
    master üzerinden a, b, c müşterileriniz için branch açtınızı varsayalım. bu branchlerden hagisini master ile merge ederseniz edin, master üzerindeki common işi ezeceksiniz demektir bu.
    mergo, master/core üzerinden çoğaltmak ya da çeşitlendirmek değil, branchlerde çoğalmış/çeşitlenmiş kodun bir araya getirilmesi/yapılandırılmasıdr.

    "Aslında yaptığım bir core üzerinden değişik versiyonlar üretmek" -> core üzerinden değişik versiyon değil, değişik implementasyonlar üretmek aslında sizin yapmak istediğiniz.

    müşterilerinize özgü implementasyonları branchte tutacaksanız eğer, bu implementasyonların versiyonlarını nerede tutucaksınız? branchin branchini yapmaktansa her implementasyon için ayrı proje ve bunların versiyonlarını geliştirmeniz daha mantıklı.




  • Git kullanmaktan ziyade otomasyon programlarını kullanabilirsiniz.

    Sanırım her projede yaptığınız şey sabit:

    -Ana scriptleri upload et
    -Müşteri ID'sine ait klasörü seç.
    -Bu klasör içerisindeki tüm dosyaları upload et (üzerine yaz)

    Bunun için otomasyon programlarını kullanabilirsiniz. Siz upload işlemini nasıl yapıyorsunuz bilmiyorum ancak şu programlara bir göz atın: Capistrano (deployment), Guard/GruntJS/Yeoman (otomasyon)

    Yani şöyle bir otomasyon scripti yazabilirsiniz:

    -Sunucuya SSH ile bağlan
    -config.yml içerisindeki müşteri ID'sini bul
    -Klasik işlemleri gerçekleştir (minify, compress, testlerin çalıştırılması vb.)
    -Ana dosyaları sunucuya upload et
    -Müşteri klasöründeki dosyaları sunucuya upload et, üzerine yaz

    Yukarıdaki arkadaşa katılıyorum. Git ile işleri dahada karıştırırsınız. (müşterilere branch açmak vb.) Git sadece versiyon kontrol için kullanılmalı.




  • bestanealtcizgi B kullanıcısına yanıt
    Anlatmak istediklerinizi anladım. Projeyi sıfırdan framework ile yapmaya karar verdim. Çünkü geçmişten gelen kronik sorunlar bulunuyor ve çok can sıkmaya başladı. Yukarıda bahsettiğim gibi müşterilerde farklı olabilecek bölümleri parametrik yapmaya çalışıyorum. Ben biraz daha araştırıyım bu konuyu, yapmak istediğim şeyi otomatikleştiremezsem işler yine karışacak. Şu anda bu projeyi kullanan 37 kurum var ve en basitinden bunların logoları farklı, bunun için bile klasör klasör tutmam lazım şu anki yapıda. "TSF Aristona"
    arkadaşın tavsiye ettiklerini inceleyeceğim. Yeni tavsiyelere de açığım. :)

    İlgilendiğiniz için tekrar teşekkür eder iyi günler dilerim.

    Not : Kullandığım Framework Codeigniter(php+jquery+css)
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.