Birleştirme stratejileri ve squash merge

Azure Repos | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2017

Bir çekme isteğini tamamlarken,konu dalını varsayılan dalınıza (genellikle ) birleştirebilirsiniz. Bu birleştirme, konu dalı işlemelerini ana dalınıza ekler ve varsayılan ve konu dalı arasındaki çakışmaları mu mutabakata varmak için bir birleştirme işlemesi oluşturur. Çekme isteğinde yer alan açıklamalar ve tartışma, konu dalı üzerinde yapılan değişiklikler için ek bağlam sağlar.

Çekme isteğinden normal birleştirme örneği.

Dal(veya diğer varsayılan dal) üzerinde işleme geçmişi, ilgili konu dal geçmişi nedeniyle düz bir çizgi izlemez. Bir proje büyüdükçe, aynı anda üzerinde çalışıp konu dallarının sayısı artar ve varsayılan dal geçmişini takip etmek giderek daha zorlaşır.

Varsayılan dal, her konu dalını geçmişinin doğru bir gösterimidir, ancak projenizin geliştirmesi hakkında daha geniş kapsamlı soruları yanıtlamak için kullanmak zordur.

Squash merge

Squash birleştirme, çekme isteğini tamamlarken konu dallarının Git geçmişini yoğun hale alamanız için bir birleştirme seçeneğidir. Varsayılan dal geçmişine eklenen konu dalı işlemelerinin her biri yerine, bir squash birleştirmesi tüm dosya değişikliklerini varsayılan dalda tek bir yeni işlemeye ekler.

Veri akışında çekme isteklerinde squash birleştirme Azure Repos.

Bunu düşünmenin basit bir yolu, sık sık birleştirmenin size yalnızca dosya değişikliklerini, normal bir birleştirmenin ise dosya değişikliklerini ve işleme geçmişini size verdiğidir.

Bir squash birleştirme nasıl yararlı olur?

Hızlı birleştirme, varsayılan dal tarihlerinizi, takımınız üzerinde herhangi bir iş akışı değişikliğine gerek kalmadan temiz ve kolayca takip edebilirsiniz. Konu dallarına katkıda bulunanlar, konu dallarında nasıl olduklarını işler ve varsayılan dallar, squash birleştirmeleri kullanarak doğrusal bir geçmiş sağlar. Bir dalda, sık sık main birleştirmelerle güncelleştirilen işleme geçmişi, birleştirilen her dal için bir işlemeye sahip olur. Tam olarak ne zaman iş yaptığını bulmak için bu geçmişi adım adım takip edin.

Squash birleştirmede dikkat edilmesi gerekenler

Squash birleştirme, varsayılan dalda yapılan değişikliklerin geçmişini yoğun hale geldiğinden, ne zaman squash birleştirmeniz gerektiğine veya bir konu dalını tam işleme geçmişini tutmak istediğinize karar vermek için takımınız ile birlikte çalışmak önemlidir. Birleştirmede, kaynak dalı silmek iyi bir uygulamadır. Kaynak dalın silinmesi, konu dalın kendisini varsayılan dala birleştirmeye sahip bir işlemeye sahip olmadığını için karışıklığı önlemektedir.

Çekme isteklerini squash merge ile tamamlama

Bir çekme isteğini tamamladıktan sonra bu çekme isteğini Azure Repos.

Konu dallarını birleştirmekiçin Çekme isteğini tamamlailetişim kutusundaki Birleştir türü'nin altında Yer aç işleme'yi seçin.

Çekme isteğini, çekme isteğinde bir çekme birleştirme ile kapatmanın ekran Azure Repos.

Çekme isteklerini squash merge ile tamamlama

Bir çekme isteğini tamamladıktan sonra bu çekme isteğini Azure Repos.

Konu dallarını birleştirmek için Çekme isteğini tamamlailetişim kutusunda Birleştirme değişiklikleri'ne seçin.

Çekme isteğini, çekme isteğinde bir çekme birleştirme ile kapatmanın ekran Azure Repos.

Birden çok birleştirme tabanı

Çekme isteğinde Dosyalar sekmesi, üç taraflı bir karşılaştırmayla farkları algılar. Algoritma, hedef dalda son işlemeyi, kaynak dalda son işlemeyi ve bunların ortak birleştirme tabanını dikkate alır. Algoritma, değişiklikleri algılamak için hızlı, uygun maliyetli ve güvenilir bir yöntemdir. Ne yazık ki bazı durumlarda birden fazla gerçek temel vardır. Çoğu depoda bu durum nadirdir, ancak çok sayıda etkin kullanıcısı olan büyük depolarda bu yaygın olabilir.

Aşağıdaki senaryolar birden çok temele neden olabilir:

  • Farklı dallar arasında çapraz birleştirmeler
  • Özellik dallarının etkin yeniden kullanımı
  • Ana dalın sonralarını işleme geri döner
  • Geri dönüşler, tek tek seçmeler ve birleştirmeler ile diğer sezgisel olmayan ve konvolutlu işlemeler

Birden çok birleştirme temel algılaması, güvenlik farkındalığının bir parçası. Birden çok birleştirme tabanı varsa, kullanıcı arabirimi için dosya-fark algoritması, hangi birleştirme tabanını seçerse ona bağlı olarak dosya değişikliklerini düzgün algılamayebilir. Çekme isteğinde yer alan dosyaların birleştirme tabanları arasında farklı sürümleri varsa, birden çok birleştirme temel uyarısı oluşur.

Birden çok temelden birleştirmenin olası güvenlik riskleri

  • Kötü amaçlı bir kullanıcı, PR'de mevcut olmayan kötü amaçlı değişiklikleri işlemek için kullanıcı arabirimi algoritmasını kötüye kullanabilir.
  • Pr'de önerilen değişiklikler zaten hedef dalda yer alan değişiklikler Dosyalar sekmesinde görüntülenir, ancak klasör değişiklikleriyle eşlenen dal ilkelerini tetiklemeyebilirsiniz.
  • Birden çok birleştirme tabanından aynı dosyalarda yapılan iki değişiklik kümesi PR'de mevcut olabilir. Bu durum, mantıksal boşluklar oluşturabilir.

Birden çok birleştirme tabanı sorununu çözme

Birden çok birleştirme tabanına sahip olmak her zaman kötü olmayabilir, ancak her şeyin yolunda olup olmadığını bir kez daha kontrol edin. Birden çok birleştirme tabanından kurtulmak için dalları tek bir ortak üst düğüme bağlayın. Dalını hedefte yeniden temel alın veya hedefi ana dala birleştirin. Bu eylemler uyarı iletisinden kurtularak gerçek değişikliklerin uygun olup olamay olduğunu denetlemeye yardımcı olur.

Yaklaşımlardan biri, yenidenbasing veya birleştirmeden önce yazılım sıfırlama ve ilerlemenizi saklamaktır. Daha sonra yeni bir dal oluşturabilir veya boş bir dalı yeniden temeli oluşturabilir ve değişikliklerinizi net bir noktadan uygulayabilirsiniz. Değişiklikleriniz zaten orada ise, bu işlem uzak sunucuya zorla itme işlemi gerektirir.

Birden çok birleştirme tabanı sorunundan kaçınma

Birden çok birleştirme temel sorunundan kaçınmaya ilişkin genel ipuçları:

  • Çekme isteği hazırlarken ana veya yayın dallarının en son sürümlerinden özellik dalları oluşturun.
  • Gerekli olmadıkça doğrudan deponun kararlı dallarından kaynak oluşturmaya gerek yoktur.

Birden çok birleştirme tabanı yeniden ortaya çıkarsa ne olur?

Çok sayıda etkin katkıda bulunanın olduğu büyük reposlarda bu sorun özellikle sorun olabilir. Birleştirme aracılığıyla birden çok temelden kurtulsanız bile durum yeniden ortaya çıkar. Birisi uzun süredir devam eden bir çekme isteğini kapatırsa bu durum yeniden oluşturabilir. Derleme ilkeleri ve testleri çalışıyor olsa da çekme isteğini tamamlamanın bir anlamı yoktur. Yeni bir dalı sıfırlamak ve yeniden başlatmanıza yardımcı olabilir. Hiçbir şey değişmemişse, durum tekrar etse bile değişiklikleriniz büyük olasılıkla açıktır.

Sonraki adımlar