• 15-03-2015, 15:58:41
    #1
    Merhaba,

    Xcode işe uygulama geliştirmeye başladık iki kişi. Düzenlemelerimiz anında birbirimize ulaşsın diyede github kullanıyoruz fakat eğer ikimizde aynı anda düzenleme yaparsak sıkıntı çıkıyor. Şöyleki github repoda bulunan Sürümü pull ediyoruz. Ben düzenlemeyi bitirip push yapıyorum ve proje güncelleniyor fakat arkadaşımda push yapmak isterse, önce güncel dosyayı pull yapın diyor. Dolayısıyla düzenlemeleri çöp oluyor arkadaşımın. Bunu nasıl alabiliriz ne yapmamız gerekiyor?

    Umarım konuyla ilgili birileri vardır forumda
  • 15-03-2015, 22:00:28
    #2
    Anlatmak ve anlamak zor, tamamen tecrübe gerekiyor.

    En mantıklı yöntemlerden biri ayrı branch larda çalışma yapmak ve bu iş bitiminde bu branchların master branch üzerinde birleştirilmesi. Her özellik, bug, güncellleme, modül gibi ayrık yapılar için master üzerinden branch açılır ve yeni branch üzerinde çalışma yapılır.

    İşin basit açıklaması aynı dosya üzerinde, aynı özellikler, aynı modül üzerinde çalışma yapmayın, görev dağılımı yapın. Basitlik açısından "git flow" kullanıyorum, 3. parti bir yazılım ile gelen komuttur.

    Git ile branch birleştirildiğinde aynı dosyalarda değişiklik varsa her zaman "conflict" ile birleştirme tamamlanır ve manuel bir çözüm istenir. Çakışan dosyaların içinde çakışan kodlar diff biçiminde kalır ve manuel olarak bakıp tek tek düzeltmeniz istenir. Bunun yazılımsal olarak bir çözümü aklıma gelmiyor, yani yazılım hangi kodların doğru olduğunu, hangilerinin çalıştığını nasıl bilecek.

    İş bölümü yapılıp ayrı dosyalar, ayrı modüller üzerinde çalışıldığında bu çakışmalar en aza iner ve göz ile bakıp anlaşılabilir durumda olurlar. Ayar dosyaları gibi ortak dosyalarda olmaya başlarlar sadece.

    Şu adreste bir örnek var, çok uzun anlatmış ancak çakışma README dosyasında iki farklı satırdan ibaret.
    http://www.gitguys.com/topics/mergin...ut-a-conflict/

    Biraz tecrübe gerekiyor, git mantığını ve komutlarını da iyice anlamak gerekiyor, deneme yapmadan anlamak zor olabilir. Deneme için yeni bir repo açın ve çözüm bulana kadar kendiniz çakışma yaratın. Arkadaş lazım değil, aynı repoyu iki ayrı dizine çekip arkadaşınızı simule edebilirsiniz.

    Not olarak merge komutu ile rebase komutu arasında ciddi bir fark onları anlamak lazım.


    Türkçe yazılar

    http://aliozgur.gitbooks.io/git101/c...me/README.html

    http://aliozgur.gitbooks.io/git101/c..._gidermek.html
    https://github.com/aliozgur/git101_b...tegre_etmek.md