Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • YardımLaravel
  • Laravel 5 ile git kullanımı için tavsiyeleriniz nelerdir?

Merhabalar

https://laravel.gen.tr/d/1590 sayfasında sorduğum soruyla ilgili projenin ilk aşamasını kendi kodlarımı kullanarak tamamladım. Şimdi ilerleyen günlerde sadece kritik hatalarını gidererek devam etmeyi ve uygulamanın yeni halini Laravel 5 ile yazmayı düşünüyorum. Hazır Laravel'e iyice başlamışken Git üzerinde çalışmak istedim. Bitbucket üzerinde private repo açarak bir kaç deneme yaptım ve laravel ile gayet güzel çalışıyor. (gitignore dosyaları ile 300-400Kb boyutunda olması 10 numara olmuş) Github üzerinden de test deposu açıp birkaç denemeyi de orada yaptım genel olarak çok büyük bir sıkıntı yaşamadım ama ilk defa git ile çalışacağım için kullananlardan tavsiyelerini dinlemek isterim.

Benim düşündüğüm / testlerini yaptığım işlemleri yazarak başlayayım ve eksik yada yanlış yaptığım bir adım varsa düzeltir misiniz?

Biri evde biri iş yerinde olmak üzere 2 bilgisayarım var ve bu uygulama için alınan VPS'i de sayarsak 3 farklı bilgisayar kullanıyorum. Temel olarak yapmak istediğim, iş yerinde kodları yazarken eve geçtiğimde de gerektiğinde kodlamaya devam etmek, %100 biten bölümleri sunucuya gönderip kullanıma almayı düşünüyorum.

- Şirkete özel bir uygulama olacağı için BitBucket üzerinde özel bir depo açarak işleme başladım. ( adı : superdepo )

- git clone ile bu depoyu htdocs/superdepo klasörüne klonladım.

- Localhost üzerinde htdocs/laravelphp isminde bir klasöre temiz bir Laravel 5 kurulumu yaptım ve buradaki tüm dosyaları htdocs/superdepo klasörüne kopyaladım.
( Laravel kurulumundan sonra composer require bican/roles ve composer require barryvdh/laravel-debugbar paketlerini ekleyip, ayarlamalarını yaptım.)

- Bu işlemlerden sonra git status kontrol yapıp git add . ile değişiklikleri ekliyorum ve git push ile depoya temiz Laravel 5 kurulumunu atıyorum.

Bu şekilde devam ederek tek bir branch üzerinden işlemleri yapmak yerine master ve beta diye 2 branch yapsam ve çalışma / testleri betada yaptıktan sonra master'a merge etsem ve server üzerinde de sadece master üzerinden işlemleri yapsam daha mı sağlıklı olur dersiniz?

Böyle birşey için ise komutlara şu şekilde devam ediyorum...

- git branch beta ile branch açıyorum ve git checkout beta ile branch'a geçiyorum. Sonrasında localde yaptığım bu değişikliği git push --set-upstream origin beta komutu ile bitbucket üzerindeki depoya yeni branch'ı atıyorum.

- htdocs/superdepo/test.txt isimli bir dosya açıyorum ve bunu git add text.txt ile ekledikten sonra git commit -m "test.txt dosyasi" şeklinde commit oluşturuyorum ve bunu git push beta branch'ına atıyorum.

Bundan sonraki kısımlarda pull request oluşturmak ve bunu merge etmek için web sitesine geçip, master branch üzerine değişiklikleri uyguluyorum. Pull request oluşturmak ve bunu merge etmek için komut satırını kullanamıyor muyuz? (Stackoverflow'da birkaç yazı okudum ama emin olamadım)

Master branch içerisine beta'daki dosyaları merge ile attıktan sonra server içerisinde her zaman master branchını kullanarak git pull yapıp, dosyaları sunucuya atıyorum. (Testini localde yaptım) Sunucudaki depo güncellendikten sonra composer update ile ayarlamaları tamamlıyorum. Sunucu içerisindeki dosyaları güncelledikten sonra ilk olarak ne yapmam gerekir? Daha doğrusu ayarlar ile ilgili bir değişiklik var mı diye kontrol etmem gereken bir dosya var mıdır? .env dosyası sunucuya özel olduğundan (dosyayı gitignore'dan çıkartmayı düşünmüyorum) yok gibi geliyor ama emin olmak istedim. app/config.php içerisindeki 'url' => http://localhost', satırındaki değeri de .env içerisine atmalı mıyım? Yazana göre bu sadece artisan komutları için kullanılıyormuş, site içerisindeki URL işlemlerini Laravel kendisi hallediyor sanırım.? Bu url için ekstra bir ayar yapmadan uygulama düzgün çalışmıştı. Sanki L4 de bunun ayarı biz yapıyorduk diye hatırlıyorum.

Sunucu üzerinde public klasörü için vhost oluşturmayı ve buraya yönlendirme yapmayı planlıyorum. git clone komutu yeni klasör açtığı için bunu sunucu üzerinde tam olarak nasıl kullanmam gerekir? (Henüz sunucuda testlere başlayamadım) Örneğin /var/www/falanfilan.com/public_html/ klasörü içerisine tam olarak nasıl bir kurulum yapmam gerekir. public_html içerisindeyken git clone çalıştırsam /var/www/falanfilan.com/public_html/superdepo/public klasörüne vhost ayarlayabilirim ama superdepo klasörünü oluşturmadan doğrudan public_html'e klasörüne nasıl atabilirim?

Genel olarak yaptıklarımda size saçma gelen yada şöyle olsa daha iyi olur dediğiniz yerler var mı?

Laravel ile Git kullanırken genel olarak dikkat etmem gereken şeyler nelerdir? Şifrelerin bulunduğu dosyaları .gitignore içerisine eklemeyi düşünüyorum. Bunun dışında özel bir durum var mıdır?

Aklıma takılan birkaç şey daha vardı ama yazıyı yazarken unuttum. Hatırlayınca ekleme / düzenleme yaparım.
Öncelikle bir tür standart olarak geliştirme ağacı için "develop" ismini kullanıyoruz "beta" değil. Tüm geliştirmeyi "develop" üzerinde yapıp sonra aşama aşama "master" üzerine merge ediyoruz. Burada en önemli şey "master" ağacıda bulunan yazılım daima hatasız şekilde çalışmalı. Develop üzerinde yarım kalmış işler olabilir, bu şekilde merge yapmamak lazım. Proje büyüklüğüne göre "develop" ve "master" ağacı arasında bir "test", "stage" gibi ara ağaçlar olabilir, merge işlemleri de şöyle işler develop -> test -> master.

Komut satırından "merge" işlemi olmakta, bunun püf noktası komutu doğru ağaç içinde iken vermek. Develop, master e merge edilirken komut master içinden verilmeli (yanlış hatırlamıyorsam). Bu konuda derin bilgim yok ancak "bitbucket" 'in kendi arayüzünden çok basit bir şekilde merge yapılabiliyor, pull request e bile gerek duymadan.

Şu andaki projemde bu üç ağaç mevcut (develop, test, master). Develop ağacı benim bilgisayarımda, diğer ağaçlar canlı sunucu üzerinde bulunmakta.

Birden fazla çalışan olduğunda merge işlemleri çoğu zaman işi batırmakta, çok kişi ile çok tecrübem yok ancak kendi kendime denemişliğim var. Özellikle aynı dosya üzerinde birden fazla kişi değişiklik yaptıysa büyük ihtimalle el ile merge yapmak gerektiriyor. Otomatik bunu yapmayı henüz başaramadım veya ben bilmiyorum. Bir tür diff dosyası yapıyor değişen dosyanın yanına ve el ile değiştirmemi öneriyor. Bununla fazla uğraşmamak için farklı kişileri farklı modüller üzerinde çalıştırmaya çalışıyoruz.

Canlı sunucudan "test" ağacından "git pull" ile değişiklikleri alıyoruz ancak biz biraz daha ileri gidip bir deploy.sh dosyası oluşturduk. "git pull", "composer update", "composer dump", "migrate:refresh --seed", işlemlerini de yapıyor. "master" ağacında da benzer bir işlem yapılıyor, ancak veritabanını sıfırlamadan, seed yapmadan.

Git yazılımı olarak Windows üzerinde "SourceTree" kullanıyorum. Komut satırından tüm işlemleri yapabilmeme rağmen, "Git flow" gibi birkaç extrası olduğu için kullanıyorum, bana daha rahat geliyor. "Git flow" git için ek bir araç temelde yaptığı iş yeni bir ağaç oluşturmak, bunu merge edip silmek. Kullanım alanı da özellik ve fix ler için. Mesela bir fix yaparken bitbucket açılan bilet numarı ise bir git flow başlatıp içinde hatayı giderip, bunu sonlandırıyorum, kendi merge ediyor. Ben bu git flow branchlarını siliyorum ancak dilersek tag olarak bitbucket üzerine de push edebiliyoruz. Bunun faydası nedir, develop ağacını kurcalamadan ayrı bir ağaç üzerinde çalışabiliyoruz, bunu yarım bırakıp develop üzerinde başka işlem yapabiliyoruz.
@angelside

Teşekkürler hocam. Beta - develop olayına dikkat etmemişim. Aslında neredeyde tüm github depolarında görüyordum.

Dediğiniz gibi branch ayarlamak en mantıklısı. "develop" > "master" şeklinde ayarlıyorum. En azından başlangıç olarak araya bir tane branch daha yerleştirmeyeyim. Biraz daha alışınca testler ve hatta versiyonlar için özel branchları açarım.

İş yerinde Windows üzerinde çalışıyorum ve SourceTree programını kullanıyorum ama evde ağırlıklı olarak Ubuntu'dayım ve konsol hep daha güzel geliyor. Dediğiniz gibi pull-request ve merge olaylarını web sayfası üzerinden test etmiştim ve gayet iyi çalışıyordu.

http://stackoverflow.com/questions/9069061/what-is-the-difference-between-git-merge-and-git-merge-no-ff Github üzerinde deneme yaparken farketmiştim. İster sayfadan yap ister git merge --no-ff gibi bir komut çalıştır diyordu ama internette araştırırken ingilizce konusunda tıkanmıştım.