"Merhaba, Amigo!"

"MERHABA!"

"Bugün size sürüm kontrol sistemlerinden bahsedeceğim."

"Muhtemelen zaten bildiğiniz gibi, programlar genellikle çok büyüktür ve yazmaları çok uzun zaman alır. Bazen düzinelerce insan bir programı yazmak için yıllarını harcayabilir."

"Milyonlarca satır kod içeren projeler birer gerçektir."

"Vay."

"Her şey çok karmaşık. İnsanlar sık ​​sık birbirine karışıyor ve çoğu zaman aynı kodu değiştiriyor, vb."

"Bu karmaşaya düzen getirmek için programcılar, kodları için sürüm kontrol sistemlerini kullanmaya başladılar."

" Sürüm kontrol sistemi, bir istemci ve sunucudan oluşan bir programdır.

"Program, verileri (programcılar tarafından yazılan kod) bir sunucuda depolar ve programcılar, istemcileri kullanarak bunları ekler veya değiştirir."

"Bir sürüm kontrol sistemi ile belgeler üzerinde işbirliği içinde çalışmayı mümkün kılan programlar arasındaki temel fark, tüm belgelerin önceki sürümlerini (kod dosyaları) depolamasıdır."

"Bana daha fazla ayrıntı verebilir misin? Her şey nasıl çalışıyor?"

"Bir programcı olduğunuzu ve sunucudaki bir depoda saklanan bir programın kaynak kodunda küçük değişiklikler yapmak istediğinizi hayal edin."

"İşte yapmanız gerekenler:"

"1) Sunucuya giriş yapın."

"2) Checkout komutunu kullanarak tüm dosyaların en son sürümünü bilgisayarınıza kopyalayın."

"3) Gerekli dosyalarda değişiklik yapın."

"4) Derlendiğinden ve çalıştığından emin olmak için programı yerel olarak çalıştırın."

"5) Commit komutunu kullanarak 'değişikliklerinizi' sunucuya gönderin."

"Bu genellikle mantıklı."

"Ama dahası da var. Sabah işe geldiğinizi ve Hindistan'da öğle yemeği vakti olduğunu hayal edin. Yani Hintli meslektaşlarınız zaten değişiklikler yapmış ve değişikliklerini sunucudaki deponuza kaydetmiş."

"Kodun en son sürümüyle çalışmanız gerekiyor. Bu nedenle Güncelle komutunu gerçekleştiriyorsunuz."

"Bunun Checkout'tan ne farkı var ? "

" Checkout, havuzdaki tüm dosyaları kopyalamak için tasarlanmıştır, ancak Update yalnızca siz en son Checkout / Update komutunu çalıştırdığınızdan bu yana sunucuda güncellenen dosyaları günceller ."

"Yaklaşık olarak şu şekilde çalışır:"

ödeme :

Sürüm kontrol sistemleri - 1

"Şimdi diyelim ki B dosyasını değiştirdik ve onu sunucuya yüklemek istiyoruz. Bunun için Commit komutunu kullanmamız gerekiyor."

Sürüm kontrol sistemleri - 2

" Güncelle komutu şu şekilde çalışır:"

Sürüm kontrol sistemleri - 3

"Ne kadar ilginç! Başka komutlar var mı?"

"Evet, epeyce var. Ama hangi sürüm kontrol programını seçtiğinize bağlı olarak değişirler. O yüzden ben sadece genel ilkeleri açıklamaya çalışıyorum."

"Birleştirme adı verilen bir işlem de vardır - iki belgenin birleştirilmesi. İki programcının aynı anda aynı dosyayı değiştirdiğini varsayalım. O zaman sunucudaki program, her iki değişikliğin de işlenmesine izin vermeyecektir. ya da onun değişiklikleri."

"Peki diğer kişi ne yapıyor?"

" Sunucudan en son değişiklikleri almak için bir Güncelleme işlemi gerçekleştirmesi için davet edilecek . Bu arada, bu - taahhütte bulunmadan önce bir Güncelleme yapmak - iyi bir uygulamadır."

"Ardından, Güncelleme işlemi sırasında, istemci programı yerel değişiklikleri sunucudan alınan değişikliklerle birleştirmeye çalışacaktır."

"Programcılar dosyanın farklı bölümlerini değiştirmişlerse, sürüm kontrol programı muhtemelen bunları başarılı bir şekilde birleştirebilecektir.  Değişiklikler aynı yerdeyse, sürüm kontrol programı bir birleştirme çakışmasını bildirecek ve kullanıcıdan manuel olarak yapmasını isteyecektir. değişiklikleri birleştir."

"Örneğin, bu genellikle her iki programcı da bir dosyanın sonuna bir şey eklediğinde olur."

"Anlıyorum. Genel olarak, bu makul görünüyor."

"Ve bir şey daha var: dallar."

"Bir ekipten iki programcının aynı modülü yeniden yazmakla görevlendirildiğini hayal edin. Ya da daha iyisi sıfırdan yeniden yazmak. Bu modül tamamlanana kadar program çalışamayacak ve hatta derlenemeyecek."

"Peki ne yapmaları gerekiyor?"

"Depoya dallar ekleyerek ilerliyorlar. Kabaca söylemek gerekirse, bu, deponun iki bölüme ayrıldığı anlamına geliyor. Dosyalara veya dizinlere göre değil, sürümlere göre."

" Elektriğin hiç keşfedilmediğini ve robotların asla icat edilmediğini hayal edin. O zaman üç kurtuluş savaşı asla yaşanmaz ve tüm insanlık tarihi tamamen farklı bir yol izlerdi. "

"Bu yol, tarihin alternatif bir dalıdır."

"Ya da bir dalı deponun basit bir kopyası olarak hayal etmeyi deneyebilirsiniz. Başka bir deyişle, bir noktada, sunucuda deponun bir klonunu yaptık, böylece ana depoya ek olarak ( genellikle ana depo olarak adlandırılır ) ), bir şubemiz daha var ."

"Eh, bu daha anlaşılır görünüyor.

"Depoyu kopyaladığımızı neden söylemedin?"

"Bu basit bir kopyalama değil."

"Bu dallar sadece gövdeden ayrılamaz, aynı zamanda onunla birleştirilebilir."

"Başka bir deyişle, bir dalda bazı işler yapılabilir ve sonra bittiğinde depo dalını depo gövdesine ekleyebilir misiniz?"

"Evet."

"Peki dosyalara ne olacak?"

"Dosyalar birleştirilecek."

"Kulağa harika geliyor. Umarım eylemde de aynı derecede harikadır."

"Ve sonra biraz. Tamam, biraz ara verelim."

" Burada bir sürü yararlı bilgi var  "