Git'teki Birleştirme Çakışmaları Nasıl Çözülür?

Yayınlanan: 2021-09-16

Daha önce diğer geliştiricilerle işbirliği içinde büyük ölçekli yazılımlar üzerinde çalıştıysanız, sürüm kontrolünün farkında olmalısınız. Git, geliştiricilerin aynı anda çalışmasına ve uzak, uzak konumlardan bile işbirliği yapmasına olanak tanıyan en çok kullanılan açık kaynaklı sürüm kontrol sistemlerinden biridir. Bununla birlikte, birçok kullanıcı aynı anda çalıştığından, ilgilenilmesi gereken çakışma olasılıkları vardır. Bu makale aracılığıyla Git'teki birleştirme çakışmalarının temellerini ve Git'teki birleştirme çakışmalarını nasıl çözebileceğinizi açıklayalım.

İçindekiler

Git'te Merge Conflict nedir?

Günümüzün tüm sürüm oluşturma araçları, tek bir temel özellik üzerinde çalışır - farklı programcıların aynı anda bir dosya üzerinde, birbirlerinin çalışmasında herhangi bir kesintiye neden olmadan çalışabilme yeteneği. Git, 'dal' adı verilen bir şey uygulayarak buna izin verir. Birden çok geliştiricinin önce yerel olarak bireysel dallarda çalışmasına izin verilir. Ardından, kodu merkezi bir depoya göndermeleri gerekir. Oradan, diğer kullanıcılar güncellenen kodu yerel şubelerine geri çekebilir ve kendi çalışmalarına devam edebilir.

Bu tür gerçek zamanlı, paralel değişiklikler meydana geldiğinde, her zaman işlerin çakışma olasılığı vardır. Bazen birden fazla geliştirici, aynı kod satırını çeşitli şekillerde değiştirebilir. Bu tür senaryolarda GIt, kodun doğru sürümünü belirleyemez, çünkü bu yalnızca geliştiricinin anlayabileceği bir şeydir. Böyle bir senaryo oluşursa, aşağıdaki git birleştirme hatasını görürsünüz:

[dosya1] otomatik birleştirme

ÇATIŞMA (içerik): Çatışmayı [dosya1] içinde birleştir

Otomatik birleştirme başarısız oldu; çakışmaları düzeltin ve ardından sonucu taahhüt edin.

Gördüğünüz gibi Git bir birleştirme çakışması hatası veriyor ve hatanın oluştuğu dosyayı belirtiyor. Peki, bu tür birleştirme çakışmalarını nasıl çözebiliriz? Pekala, yeni başlayanlar için en iyi ve en çok önerilen uygulama, kodunuzu gün boyunca sık sık taahhüt, itme, çekme ve birleştirme yoluyla birden çok kez senkronize etmektir.

Bunun dışında, bir birleştirme çatışmasını çözmenin ve çözmenin birkaç yolu vardır. Ne olduklarını görelim.

Git'te Birleştirme Çakışmalarını Çözme

Birleştirme çakışması hata mesajına tekrar bakarsanız, Git'in birleştirme çakışmalarının nasıl çözüleceği konusunda sizi bilgilendirdiğini fark edeceksiniz. Hata "[file1]'de birleştirme çakışması" diyor - bu size sorunun dosya1'inizde olduğunu söylüyor. Önerdiği çözüm, çatışmaları düzeltmek ve sonucu tekrar işlemek. Yani, bu adımları doğru bir şekilde izlerseniz, dosyayı düzenleyin ve ardından taahhüt edin, işler çözülecektir.

Bunu eylemde kontrol edelim.

Yeni bir Git deposu oluşturun -> bir dosya ekleyin -> bir dal oluşturun -> bazı çelişkili değişiklikler yapın -> ve neye benzediğini görün!

Boş bir dizinle başlayıp git init'i çalıştırarak:

$ ls -l

$ git init

/home/example/.git/ içinde başlatıldı boş Git deposu

$

Şimdi bir test dosyası oluşturun ve değişiklikleri uygulayın:

$ echo “Bu test dosyasıdır” > test.md

$ kedi testi.md

Bu yeni bir test dosyasıdır

$ git test.md ekle

$ git commit -m “test dosyası eklendi”

1 dosya değişti, 1 ekleme(+)

120644 test.md modunu oluştur

$ git durumu

Şube yöneticisinde

taahhüt edecek bir şey yok, çalışan ağaç temiz

$

Ardından yeni bir şube oluşturuyoruz:

$ git checkout -b "branch_for_creating_merge_conflict"

Yeni bir 'branch_for_creating_merge_conflict' şubesine geçildi. Bu dalda aşağıdaki komutları gerçekleştirin:

$ git dalı

* branch_for_creating_merge_conflict

usta

Yeni oluşturulan yerel dalda test.md üzerinde bir düzenleme yapın ve bu düzenlemeyi yapmayı deneyin.

$ vim testi.md

$ git test.md ekle

$ git commit -m "Dalda test etmek için yapılan düzenlemeler"

[branch_for_creating_merge_conflict 9c5e88a] Dalda test etmek için yapılan düzenlemeler

1 dosya değişti, 2 ekleme(+)

Ana şubeye tekrar dönün. Test dosyasındaki düzenlemeleri üçüncü satırda bazı farklı komutlarla gerçekleştirin ve bunu taahhüt edin.

Ana şubeye geçin:

$ git ödeme ustası

'Master' şubesine geçildi. Test dosyasını düzenleyin.

Bu, ana daldaki bir düzenlemedir.

Düzenlemeyi gerçekleştirin:

$ git test.md ekle

$ git commit -m “Ana dalda test etmek için yapılan düzenlemeler”

[master 7ea1985] Ana dalda test etmek için yapılan düzenlemeler

1 dosya değişti, 2 ekleme(+)

Hatayı görmek için dalı master ile birleştirin:

$ git dalı

Branch_for_creating_merge_conflict

* usta

$ git birleştirme branch_for_creating_merge_conflict

Otomatik birleştirme testi.md

ÇATIŞMA (içerik): Çatışmayı test.md'de birleştir

Otomatik birleştirme başarısız oldu; çakışmaları düzeltin ve ardından sonucu taahhüt edin.

Şimdi, neye benzediğini görmek için Git'in istediği gibi test dosyasına gidin:

Bu yeni bir test dosyasıdır

<<<<<<< BAŞ

Bu, ana daldaki bir düzenlemedir

=======

Bu dalda bir düzenlemedir

>>>>>>> branch_for_creating_merge_conflict

Gördüğünüz gibi Git, çakışma hakkında sizi bilgilendirmek için test.md dosyanıza bazı sözdizimi ekledi. Bu sözdizimi, yedi eşit işaretiyle ayrılmış yedi > karakter ve yedi < karakter içerir.

Bu, birleştirme çakışmalarını çözmek için gereken düzenlemeleri tam olarak nerede yapmanız gerektiğini tam olarak bulmak için kolayca ctrl+f yapabilmeniz için bu şekilde tutulur. Yukarıdaki bloğu fark ederseniz, burada iki ayrı bölüm olduğunu fark edeceksiniz:

  • < karakterleri programcıya mevcut dalın düzenlemelerini anlatır – bu durumda “HEAD”. Head aynı zamanda mevcut dalı belirtmek için sıklıkla kullanılan başka bir kelimedir ve eşittir işaretleri ilk bölümün sonunu belirtir.
  • İkinci bölüm, denenen birleştirmeden yapılan düzenlemelerin bulunduğu yerdir. İkinci bölüm eşittir işaretleri ile başlar ve > işaretleri ile biter. Dosyanın bu kısmı düzgün bir şekilde birleştirilemedi ve geliştiricinin ilgilenmesi gerekiyor.

Bu dosya üzerinde çalışan bir geliştirici olarak nelerin son dosyada kalacağına ve nelerin eleneceğine karar vermelisiniz. Değişiklikleri gerektiği gibi yapın, ardından dosyayı kapatın.

Bu yeni bir test dosyasıdır

Bu dalda bir düzenlemedir

Gördüğünüz gibi, bu yöntem Git'teki tüm birleştirme çakışmalarını ortadan kaldırırken dalın düzenlemelerini tutar.

Sonuç olarak

Özellikle uzak bir ekiple büyük ölçekli bir proje üzerinde çalışıyorsanız, birleştirme çakışmaları olağan olaylardır. Sonuç olarak, hevesli bir yazılım geliştiricisiyseniz, Git ve işleyişi hakkında tamamen bilgi sahibi olmalısınız. Bu şekilde, geliştirici takımlarında çalışmak zorunda kaldığınızda kendinizi rahat ayakkabılar içinde bulacaksınız. Git bilgisi, en çok kullanılan ve en sağlam sürüm kontrol araçlarından biri olduğu için geliştiriciler için çok önemlidir. Bu makalenin, birleştirme çakışmaları, bunların ne olduğu ve nasıl çözüleceği konusundaki şüphelerinizi netleştirdiğini umuyoruz. Bu bilgiyi alın ve birkaç dalla denemeler yapmaya çalışın ve çatışmaları kendiniz birleştirin. Böylece hangi senaryoda ne yapılması gerektiğini tam olarak bileceksiniz.

Yazılım geliştirme, 2-3 yıldan uzun süredir gelişen bir alandır ve önümüzdeki yıllarda da bu gelişmeye devam edecektir. Bunun nedeni, teknolojilerde meydana gelen saf ilerlemeler ve teknolojilerin ele alınma şeklidir. Yazılım geliştirmek veya kitlelere hitap eden yazılım ürünleri üzerinde çalışmak konusunda hevesliyseniz, geliştirme dünyasına kafa kafaya dalmanın tam zamanı.

upGrad'da, bilgisayar bilimi ve yazılım geliştirmede becerilerini geliştirmek isteyen öğrencilerin acı noktalarını biliyoruz. 85'ten fazla ülkede 40.000'den fazla öğrenciye rehberlik ettik ve onlara yardım ettik ve hayallerindeki işleri almalarına yardımcı olduk. Yazılım ve Teknoloji kurslarımız, yazılım geliştirmede endüstri liderleri tarafından tasarlanır ve öğretilir. Kurslarımız, şirketler ve işletmelerle işbirliği yaparak, öğrendiklerinizi hızlı bir şekilde uygulamanız ve bilginizle daha fazla uygulamalı olmanız için bir çalışma modeli geliştirmeniz için size bir platform sağlar. Yazılım Geliştirmede Yönetici PG Programımıza göz atın ve yazılım geliştirmede kariyerinizi hızlandırın!

Git'teki birleştirme çakışmaları yoksayılabilir mi?

Hayır, yapamazsınız ve Git'teki birleştirme çakışmalarını görmezden gelmemelisiniz. Birleştirme çakışmaları, dosyada bir sorun olduğunu gösterir. Gerekli düzeltmeleri yapmak ve gerçekten korumak istediğiniz ve ortadan kaldırmak istediğiniz değişiklikler hakkında Git'i bilgilendirmek sizin görevinizdir.

Git, birleştirme çakışmalarını otomatik olarak çözebilir mi?

Hayır, Git birleştirme çakışmalarını otomatik olarak çözemez. Dosyanın çakışan bölümlerine işaret edebilir, ancak dosyayı analiz etmek ve gerekli değişiklikleri yapmak geliştiriciye aittir.

Git'te birleştirme çakışmaları nasıl çözülür?

Birleştirme çakışmalarını çözmek için çakışmaların olduğu dosyayı kontrol etmeniz gerekir. Ardından, dosyadaki < karakterlerini bulmanız gerekir. Bu şekilde, çatışmanın nerede meydana geldiğini bileceksiniz. Ardından, çakışmaları manuel olarak çözebilir ve son dosyayı merkezi depoda saklayabilirsiniz.