Projenizin Hangi Kısmı Kaynak Kodu Kontrolünde Olmalı?


54

Bir diğer geliştirici, yeni bir Drupal projesi üzerinde çalışmaya başladı ve sysadmin, siteleri / varsayılan alt dizini yalnızca kaynak denetime koymalarını önerdi, çünkü "güncellemeleri kolayca komut dosyası oluşturabilir." Biraz şüpheli iddiayı bir kenara bırakarak, başka bir soruyu gündeme getiriyor; kaynak kontrolü altında hangi dosyalar olmalı? Ve bazı büyük dosya parçalarının dışlanması gereken bir durum var mı?

Benim düşünceme göre, projenin tüm ağacı kontrol altında olmalı ve bu bir Drupal projesi, raylar veya başka herhangi bir şey için geçerli olacaktı. Bu bir beyin fırtınası gibi görünmüyor - açıkça yazdığınız herhangi bir özel kod için, çerçeveniz için versiyonlamaya ihtiyacınız var.

Bununla ilgili bu konuda başka görüşler edinmeyi çok isterdim. Her şeyin kontrol altında olmadığı için herhangi bir tartışma var mı?


2
Nihai temsili üreten herhangi bir şey (belgeler dahil), depolama uygun olması koşuluyla, sürüm kontrolü altında olmalıdır. Kod oluşturma gibi, burada sürüm oluşturma işlemiyle kolayca komut dosyası oluşturulduğunu, sürümlerini yazdıklarınızdan kolayca komut dosyası oluşturma (okuma: oluşturma) iddialarını kontrol edeceğim gibi geliyor.
MrGomez

Yanıtlar:


71

Kaynak kontrolünün içermesi gereken asgari projenin çalışmakta olan bir versiyonunu yeniden oluşturmak için gerekli tüm dosyalar olduğunu söyleyebilirim . Bu, herhangi bir veritabanı şemasını kurmak ve değiştirmek için ve doğru sırada da DDL dosyalarını içerir. Tabii ki, elbette, projeyi oluşturmak ve yürütmek için gerekli olan araçların yanı sıra, kaynak kontrolündeki diğer dosyalardan (kaynak kontrolündeki Java dosyalarından üretilen JavaDoc dosyaları gibi) otomatik olarak elde edilebilecek / üretilebilecek herhangi bir şey.


1
@EdWoodcock: Haklısın, sırayı doğru bir şekilde almak gerçekten acı verici olabilir, ancak bazen veritabanının belirli bir durumunu yeniden oluşturmak veya her şeyi bırakıp / yeniden oluşturmak yerine test ederken isteğe bağlı olarak belirli değişiklikleri uygulamak istersiniz. Projeye göre değişiyor.
SinirliFormsDesigner'la

1
Alınan nokta, bunun için gerekli bir seviye veya pragmatizm var.
Ed James

3
@JayBazuzi: İş istasyonu kurulum kılavuzları (kaynak kontrolünde) gerekli araçları ve bağımlılıkları, nasıl kurulacaklarını ve araçların nereden alınacağını ana hatlarıyla belirtmelidir . Kullanılabilir bir araç seti bakımı olan önemli, ancak kaynak kontrolünün amacı değil. Eğer varsa herhalde GERÇEKTEN , sen yükleyici dosyası / .msi ve bazı talimat dosyaları eklemek olabilir istedi ama o mayıs işyerlerinde uygulanabilir olmayabilir. Kaynak kontrol sisteminize VisualStudio Pro 2010 ya da IBM RAD, XMLSpy, vb. Sayfalarını gerçekten kontrol etmek ister misiniz ? Birçok işyeri, bu araçlar için dağıtımları kontrol etmiştir.
SinirliFormsDesigner'la

2
@ artistoex: Bu saçları bölmek. Genelde, derleme kutusunun, dev kutuları ile aynı kütüphanelere sahip olduğu varsayılır. İkisi farklıysa, BT yöneticisinde bir sorun var. İhtiyacınız olan tek şey (ideal olarak) sadece kaynak kod. Bazı projeler bu uygulanabilir değildir, ancak çoğu için olması gerekir.
Mike S

1
@mike demek istedim. Bence XP hakkında bir kitapta bunu öneren Kent Beck idi. Fena bir fikir değil. Tüm yapı faktörlerini yeniden yapılandırabileceğinizden neredeyse% 100 eminiz. Ve bir proje boyunca büyük olasılıkla değişim ortamları unutma.
artistoex

29

Güneşin altındaki her şeyi kaynak kontrolüne sokmak en iyisidir.

  • kod

  • Kütüphaneler

  • kaynaklar

  • Komut Dosyaları Oluşturma / Dağıtma

  • Veritabanı oluşturma ve güncelleme komut dosyaları

  • Belirli belgeler

  • Ortama Özel Yapılandırma Dosyaları

Kaynak kontrolüne dahil edilmemesi gereken tek şey projeniz için eserler oluşturmaktır.


5
"Belgeler" in belirli bir araca bağlı olmadığından emin olun. Dokümanlar yapmak için Frame'in SunOS sürümü gibi bir şey kullanan birkaç projeye rastladım, tüm ".mif" dosyalarını kontrol ettiler, ancak sonuçta .ps veya .pdf dosyalarını kontrol etmediler. Artık SunOS ve Frame tarihin çöp tenekesine düşmüş durumda, pek çok tasarım dokümanı yalnızca değerli kağıt kopyaları olarak var oluyor.
Bruce Ediger

2
@BruceEdiger Bu durumda şahsen hem çıktıya hem de araca özel bilgileri istiyorum. Alet kaybolursa, en azından hala statik bir elektronik kopyasınız olur :)
maple_shaft

Buradaki büyük bir işlem şirketinin avantajlarından biri, kaynak vcs'ye, üretilen malzemelerin konfigürasyon yönetim sistemine gitmesi gerekiyor, bu yüzden aletiniz geçersiz olsa bile hala kontrol edilen sonuçlara sahipsiniz
jk.

Kullandığınız derleyicinin belirli bir sürümüne ne dersiniz? Heck, neden bütün işletim sistemi değil?
24’te

18

Şunu söylemek isterim;

  • yapıyı gerçekleştirmek için gereken herhangi bir dosya sürüm kontrolüne girer
  • derleme tarafından oluşturulan herhangi bir dosya (olabilir)

Araç kurulum paketleri gibi büyük ikili dosyaları bagajın dışında bir yere koyma eğilimindeydim, ancak yine de sürüm kontrolü altında olmalılar.


15

Ayrıca tüm veritabanı kodlarını Kaynak Kontrolüne de koymayı unutmayın! Bu, orjinal oluşturma komut dosyalarını, tabloları değiştirmek için komut dosyalarını (yazılımın hangi sürümünün kullandığıyla işaretlidir, böylece uygulamaların herhangi bir sürümü için veritabanının herhangi bir sürümünü yeniden oluşturabilirsiniz) ve arama tablolarını doldurmak için komut dosyalarını içerir.


15

Zor kazanılmış deneyim bana hemen hemen her şeyin kaynak kontrolünde olduğunu öğretti . (Buradaki yorumlarım, patentli donanım üzerindeki gömülü / telekom sistemleri için özel ve bazen de bulmak zor araçlarla geliştirilen on yıl ve bir buçuk renkle renkli.)

Buradaki cevapların bazıları "ikili dosyaları kaynak kontrolüne alma" diyor. Bu yanlış. Çok sayıda üçüncü taraf koduna ve satıcılardan çok sayıda ikili kitaplığa sahip bir ürün üzerinde çalışırken, ikili kitaplıklara göz atın . Çünkü, yapmazsanız, o zaman bir noktada yükseltme yapacaksınız ve başınız belaya girecek: derleme kırılıyor çünkü derleme makinesi en son sürüme sahip değil; Birisi yeni adama eski CD'lerin kurulumunu yapar; wiki projesi, hangi versiyonun kurulacağı konusunda eski talimatlara sahiptir; Eğer satıcı ile yakın çalışma varsa vb Daha da kötüsü, belirli bir sorunu çözmek ve bir hafta içinde size kütüphanelerin beş takım göndermek için, sen gerekirHangi ikilik kümesinin hangi davranışı sergilediğini izleyebilme. Kaynak kontrol sistemi tam olarak bu sorunu çözen bir araçtır.

Buradaki cevapların bazıları "alet zincirini kaynak kontrolüne alma" diyor. Bunun yanlış olduğunu söylemeyeceğim, ancak bunun için sağlam bir konfigürasyon yönetimi (CM) sistemi yoksa , takım zincirini kaynak kontrolüne koymak en iyisidir . Yine, yükseltme sorununu yukarıda belirtildiği gibi düşünün. Daha da kötüsü, işe alındığımda etrafta dolanan alet zincirinin dört ayrı tadının olduğu bir proje üzerinde çalıştım - hepsi aktif kullanımda ! Yaptığım ilk şeylerden biri (çalışacak bir yapı elde etmeyi başardıktan sonra) takım zincirini kaynak kontrolü altına aldı. (Sağlam bir CM sistemi fikri umudun ötesindeydi.)

Ve farklı projeler farklı araç zincirleri gerektirdiğinde ne olur? Örnek olay: Birkaç yıl sonra, projelerden biri bir satıcıdan yükseltme aldı ve tüm Makefiles'ler kırıldı. GNU markasının daha yeni bir versiyonuna güvendikleri ortaya çıktı. Böylece hepimiz yükselttik. Vurmaca, başka bir projenin Makefiles'leri kırıldı Ders: GNU markasının her iki versiyonunu da uygulayın ve proje ödemenizle birlikte gelen versiyonu çalıştırın.

Veya, her şeyin çılgınca kontrolden çıktığı bir yerde çalışıyorsanız, "Hey, yeni adam bugün başlıyor, derleyicinin CD'si nerede?" "Dunno, Jack'in bıraktıklarından beri onları görmedim, o CD'lerin koruyucusuydu." “Ah, bu 2. kattan çıkmadan önce olmadı mı?” "Belki de bir kutu içindedirler." Araçlar üç yaşında olduğundan, bu eski CD'yi satıcıdan alma ümidi yoktur.

Derleme komut dosyalarınızın tümü kaynak kontrolüne aittir. Herşey! Çevre değişkenlerine kadar. Yapma makineniz, projenin kökünde tek bir komut dosyası çalıştırarak projelerinizden herhangi birini yapabilecek durumda olmalıdır. ( ./buildmakul bir standarttır; ./configure; makeneredeyse kadar iyidir.) Komut ortamı, ortamı gerektiği gibi ayarlamalı ve daha sonra ürünü oluşturan herhangi bir aracı (make, ant, vb.) başlatmalıdır.

Çok fazla iş olduğunu düşünüyorsanız, değil. Aslında bir ton iş tasarrufu sağlar. Dosyaları, bir kez başında ve sonra ne zaman yükseltme yaptığınıza bağlıyorsunuz. Hiçbir yalnız kurt kendi makinesini yükseltemez ve bazı araçların en son sürümlerine bağlı olarak bir takım kaynak kodunu işleyemez, bu da herkes için yapıyı bozar. Yeni geliştiriciler kiraladığınızda, onlara projeyi kontrol etmelerini ve çalıştırmalarını söyleyebilirsiniz ./build. 1.8 sürümü çok fazla performans ayarına sahipse ve kod, derleyici bayrakları ve ortam değişkenlerini ayarladıysanız, yeni derleyici bayraklarının yanlışlıkla kod 1.7 sürümüne uygulanmadığından emin olmak istersiniz, çünkü gerçekten de koda ihtiyaç duyarlar onlarla birlikte devam eden değişiklikleri veya bazı kıllı yarış koşullarını görürsünüz.

En iyisi, bir gün kıçınızı koruyacak: Ürününüzün 3.0.2 sürümünü bir Pazartesi günü gönderdiğinizi hayal edin. Yaşasın, kutla. Salı sabahı, bir VIP müşterisi, destek hattını arayarak, 18 ay önce gönderdiğiniz 2.2.6 sürümündeki bu kritik, acil hatadan şikayetçi . Ve hala sözleşmeye bağlı olarak desteklemelisiniz ve hatanın yeni kodda sabitlendiğinden emin oluncaya kadar yükseltme yapmayı reddediyorlar ve dans etmenizi sağlayacak kadar büyükler. İki paralel evren var:

  • Kaynak kontrolünde kitaplıkların, araç zincirinin ve komut dosyalarının olmadığı ve sağlam bir CM sisteminizin olmadığı evrende ... Kodun doğru sürümünü kontrol edebilirsiniz, ancak oluşturmaya çalıştığınızda her türlü hata size olur. Bakalım, Mayıs ayında araçları yükselttik mi? Hayır, o kütüphanelerdi. Tamam, eski kütüphanelere geri dön - bekle, iki yükseltme oldu mu? Ah evet, bu biraz daha iyi görünüyor. Ama şimdi bu garip linker kazasında tanıdık geliyor. Oh, çünkü eski kütüphaneler yeni araç zinciriyle çalışmadı, bu yüzden yükseltmek zorunda kaldık, değil mi? (Eforun geri kalanının acısını size bırakacağım. İki hafta sürüyor ve sonunda kimse mutlu değil, siz değil, yönetim değil, müşteri değil.)

  • Her şeyin kaynak kontrolünde olduğu evrende, 2.2.6 etiketini inceleyin, bir saat içinde bir hata ayıklama hazırlayın, bir veya iki gününü "VIP hatalarını" yeniden oluşturmak, nedenini bulmak, düzeltmek Mevcut sürüm ve müşteriyi yükseltmeye ikna etmek. Stresli, ancak saç çizginizin 3 cm yüksek olduğu diğer evren kadar kötü değil.

Bununla birlikte, çok ileri gidebilirsin:

  • Bir "altın kopyasına" sahip olduğunuz standart bir işletim sistemi kurulumuna sahip olmalısınız. Muhtemelen bir README, bunu belgelemek olduğunu gelecek nesillere o sürümü 2.2.6 biliyoruz ve önceki yalnızca RHEL 5.3 ve 2.3.0 üzerine kurulmuş ve daha sonra sadece Ubuntu 11.04 üzerine inşa böylece kaynak denetiminde. Takım zincirini bu şekilde yönetmeniz daha kolaysa, bunun için gidin, güvenilir bir sistem olduğundan emin olun.
  • Proje dokümantasyonu kaynak kontrol sisteminde saklamak zahmetlidir. Proje belgeleri her zaman kodun önündedir ve geçerli sürüm için kod üzerinde çalışırken bir sonraki sürümün dokümantasyonu üzerinde çalışmak nadir değildir. Özellikle, tüm proje belgeleriniz, farklılaştıramayacağınız veya birleştiremeyeceğiniz ikili belgelerse.
  • Derlemede kullanılan her şeyin sürümlerini kontrol eden bir sisteminiz varsa kullanın ! Sadece tüm ekipte senkronize etmenin kolay olduğundan emin olun, böylece herkes (inşaat makinesi dahil) aynı araç setinden çeker. (Debian'ın geliştiricisi ve python's virtualenv'in sorumlu kullanımı gibi sistemleri düşünüyorum.)

Değiştirilmesi zor bir donanımı kontrol etmeyi unutmayın. Bir şirket yapıyı kaybetti çünkü artık yapı araçlarının çalıştığı bir CPU'su (HPPA? 68040?) Yoktu.
hotpaw2

1
“CM sistemi” ne anlama geliyor?
bodo

1
Çoğu durumda, ikili dosyaları kendileri işlemek yerine ikili dosyaları ve sürümleri belgelemeyi tercih ederim. Evet - sizin durumunuzda ikili dosyalar zordu ve onları saklamak için başka iyi bir yönteminiz yoktu. Ancak genel olarak tüm bağımlılıkları belgelemenin yanı sıra , şeyleri nasıl ayarlayacağımı (dev VM gibi) daha hafif bir ağırlık eşdeğeri olarak çalıştığını hissediyorum . Scripting üreme geliştirir, ama sonunda hepimiz gemi zorundayız.
Iiridayn

Alet zincirini koyma ve kaynak kontrolünde eserler inşa etme tavsiyesi nedeniyle aşağı oylama. Evet, bunlar için kötü yönetim çözümleriniz varsa, bazen gerekli olabilir, ancak bu kesinlikle istenmez. PHP gibi popüler OSS araçları her zaman erişilebilir olacaktır (çünkü kaybolacak tek bir yayıncı yoktur), bu nedenle bu soru için kesinlikle gerekli değildir.
Marnen Laibow-Koser

13

Kaynak denetimine koymadığım tek şey, kolayca yeniden oluşturabileceğiniz veya geliştiriciye özgü olan dosyalardır. Bu, kaynak kodunuzdan, kaynak kontrolü altındaki dosyaları okumaktan / ayrıştırmaktan oluşturulan dokümantasyondan ve IDE'ye özgü dosyalardan oluşan çalıştırılabilir ve ikili dosyalar anlamına gelir. Geriye kalan her şey sürüm kontrolüne gider ve uygun şekilde yönetilir.


7

Kaynak kontrolü için kullanım durumu şudur: Tüm geliştiriciler makinelerimiz ve tüm dağıtım makinelerimiz bir meteor çarptıysa ne olur? Kurtarma işleminin ödeme işlemine en yakın olmasını ve mümkün olduğunca inşa edilmesini istiyorsunuz. (Çok saçma ise, "yeni bir geliştirici kirala" ile gidebilirsiniz.)

Başka bir deyişle, işletim sistemi, uygulamalar ve araçlar dışındaki her şey VCS'de ve belirli bir araç ikili sürümüne bağımlı olabilecek gömülü sistemlerde olmalıdır, VCS'de de tutulan araçları gördüm!

Eksik kaynak kontrolü, danışmanlık yaparken gördüğüm en yaygın risklerden biri - yeni bir geliştirici açmak veya yeni bir makine kurmakla ilgili her türlü sürtünme var. Sürekli Entegrasyon ve Sürekli Teslimat kavramlarıyla birlikte “Sürekli Gelişim” anlayışına sahip olmalısınız - bir BT çalışanı esasen otomatik olarak yeni bir geliştirme veya dağıtım makinesi kurabilir, böylece geliştirici bitmeden önce koda bakabilir ilk fincan kahve?


1
Bu aynı zamanda birden fazla makineden çalışmanın ağrısız olduğu anlamına gelir. Sadece depoyu çekin ve gitmeye hazırsınız.
Spencer Rathbun

Meteor referansı için +1, her şeyi güzelce özetler.
muffinista

Birisi revir kontrolü altında tam takım zinciri ile basit bir şekilde kontrol edilip kullanılabilecek bir örnek (örneğin) bir java projesine işaret edebilir mi?
andersoj

@andersoj boxen.github.com sitesini ziyaret edin
Larry OBrien

6

Projeye katkıda bulunan ve değişiklikleri izlemek istediğiniz herhangi bir şey.

İstisnalar, ikili verileri çok iyi işlemeyen bir scm kullanıyorsanız, görüntüler gibi büyük ikili bloklar içerebilir.


2

Drupal git'i kullanır, ben de git terminolojisini kullanırım. Her bir modül için alt raporları, bireysel dağıtımların yapısını koruyarak drupal'ın resmi depolarından modül güncellemelerini kaldırabilmek için kullanırdım. Bu şekilde, her şeyin kaynak kontrolü altında olmasının faydalarını kaybetmeden, kod yazabilirliği avantajlarından yararlanabilirsiniz.


1

Şunlar hariç her şey kaynak kontrolü altında olmalı:

  • Her geliştirici ve / veya her ortam için farklı olan yapılandırma seçeneklerini içeriyorsa, yapılandırma dosyaları (geliştirme, test, üretim)
  • Önbellek dosyaları, dosya sistemi önbelleğe alma kullanıyorsanız
  • Metin dosyalarına giriş yapıyorsanız, günlük dosyaları
  • Önbellek dosyaları ve günlük dosyaları gibi herhangi bir şey içerik oluşturulur
  • (Çok) Değişmesi muhtemel olmayan büyük ikili dosyalar (bazı sürüm kontrol sistemleri bunlardan hoşlanmaz, ancak hg veya git kullanıyorsanız çok da sakıncası yoktur)

Bunu şöyle düşünün: Ekibe her yeni üye, projenin çalışan bir kopyasını kontrol edebilmelidir (eksi yapılandırma öğeleri).

Ayrıca veritabanı şeması değişikliklerini (her şema değişikliğinin basit sql dökümleri) sürüm kontrolü altına almayı da unutmayın. Projeye mantıklı geliyorsa, kullanıcı ve api belgelerini ekleyebilirsiniz.


@maple_shaft, yorumlardaki ortam yapılandırma dosyaları ile ilgili ilk açıklamamla ilgili önemli bir sorunu gündeme getirdi. Cevabımın, Drupal veya jenerik CMS projeleriyle ilgili olan sorunun özniteliklerine ait olduğunu açıklığa kavuşturmak isterim. Bu tür senaryolarda, genellikle yerel ve üretim veritabanına sahip olursunuz ve bir ortam yapılandırma seçeneği, bu veritabanlarının (ve benzer kimlik bilgilerinin) kimlik bilgileridir. Birkaç güvenlik kaygısı yaratacağı için kaynakların kontrol altında OLMAMASI tavsiye edilir.

Ancak, daha tipik bir geliştirme iş akışında, herhangi bir ortamın tek adımda kurulmasını ve yayılmasını sağlamak için ortam yapılandırma seçeneklerinin kaynak kontrolü altında olması gerektiği maple_shaft ile aynı fikirdeyim.


3
-1 Kaynak kontrolüne ait olmayan konfigürasyon dosyaları ile ilgili ifadenize kesinlikle HAYIR KABUL ETMEMEKTEDİR. Belki geliştiriciye özel yapılandırma dosyaları evet, ancak herhangi bir ortamın tek adımlı oluşturma ve dağıtma özelliğini istiyorsanız, çevreye özgü yapılandırma dosyaları gerekir.
maple_shaft

2
@maple_shaft Soru bağlamında (drupal projesi veya gereric CMS web projesi) "herhangi bir ortamın tek adımlı oluşturulması ve dağıtılması" oldukça olası bir senaryo değildir (üretim veritabanı kimlik bilgilerini her şeye dahil edecek misiniz?). Bu soruya cevap veriyorum, sürüm kontrolü altında nelerin yapılması gerektiği konusunda genel yönergeler sağlamıyorum. - Ama senin oyuna açığız :)
yannis

Kaynak kod deposunun halka açık olduğu durumlarda, açık kaynakta olduğu gibi veya güvenliğin finansal kuruluşlarda olduğu gibi veritabanı kimlik bilgilerinin kaynak kontrolüne ait olmadığı gibi aşırı bir endişe kaynağı olduğunu görebiliyorum. Bu kaynak kontrolünün ötesinde parola korumalı ve belirli bir kullanıcı grubuyla sınırlı olmalıdır, bu nedenle kaynak kontrolündeki veritabanı kimlik bilgileri bu senaryoda birincil bir endişe olmamalıdır. Bana göre notun sert göründüğüne dikkat çekti, cevabınızı düzenlerseniz kaldırabilirim.
maple_shaft

@maple_shaft Olumsuz oy için endişelenmeyin (Soruyu düzelttim, ancak isterseniz terk etmekten çekinmeyin). Şifre korumalı sürüm kontrolü için: Geçtiğimiz günlerde yönetim ekibimizin bir üyesinden bir dizüstü bilgisayarın çalındığı, sürüm kontrol sistemimizin şifresini içeren bir durumla uğraşmamız gerekti. Bu, kendi bölümünden büyük bir snafu idi (dizüstü bilgisayar parola korumalı değildi ve gerçekten açıklayamadığım birkaç ayrıntı) ama yine de herkesin başına gelebilecek bir şeydi. Bu deneyime dayanarak her şeyi vcs'den çıkardık.
yannis

@maple_shaft ve paranoyayı savunuyormuş gibi görünmeme rağmen, şimdi benzer kimlik bilgilerinden kaynaklanan herhangi bir şeyi benzer snafustan korumak için aşırıya kaçıyoruz.
yannis

1

Otomatik yapınızın ürettiği herhangi bir şey kaynak kontrolüne girmez . Gerektirir bir şey yok inşa sırasında değişiklik yok kaynak denetiminde gidin. Bu kadar basit.

Örneğin, aşağıdakiler kaynak kontrolüne girmiyor:

  • oluşturulan kod
  • oluşturulan ikili dosyalar
  • yapınız tarafından oluşturulan herhangi bir şey
  • Çalışma zamanında servis, işlem, web uygulaması tarafından yaratılan her şey

Kaynak kontrolünde neler var:

  • bir insanın yarattığı her şey
  • başka bir kişi veya grup tarafından yaratılan herhangi bir şey (örneğin kaynak kontrolünün dağıtıldığı üçüncü taraf bir kurum içi kütüphane veya açık kaynaklı bir projenin ikili dosyaları).
  • komut dosyaları ve bir veritabanı gibi şeyler yaratan diğer kaynaklar (yani tüm DBA'lar AWOL'a giderse db'yi nasıl yeniden yaratırsınız).

Bu kurallar, kaynak kontrolünde bulunanın bir insan tarafından değiştirilebileceği ve neden orada olduğunu anlamak için birinin değerli zamanını alabileceği fikrine dayanmaktadır .


1

Çalışmanız gereken ve değiştirebileceğiniz her şeyin bir şekilde veya başka bir şekilde sürümlendirilmesi gerekir. Ancak, nadiren iki bağımsız sistemin izlemesini sağlama ihtiyacı vardır.

Güvenilir bir şekilde üretilen herhangi bir şey genellikle bir kaynak sürümüne eklenebilir - bu nedenle bağımsız olarak izlenmesine gerek yoktur: üretilen kaynak, bir sistemden diğerine geçirilmeyen ikili dosyalar vb.

Muhtemelen kimsenin umursamadığı (ama asla emin olamadığınız) günlükleri ve diğer şeyleri genellikle en iyi oluşturanı takip eder: jenkins, vb.

Bir sistemden diğerine geçirilen ürünlerin izlenmesi gerekir, ancak bir maven repo bunu yapmanın iyi bir yoludur - bir kaynak kontrolünün sağladığı kontrol seviyesine ihtiyacınız yoktur. Teslim edilebilir ürünler genellikle aynı kategoridedir.

Her ne kalırsa kalsın (ve bu noktada, kaynak dosyalardan ve sunucu yapılandırmasından biraz daha fazlası olmalı) kaynak kontrolüne girer.


0

Cevabım oldukça basit: ikili dosyalar değil. Sonuç olarak, hemen hemen her şey.

(Kesinlikle veritabanı yedeklemeleri veya şema geçişleri veya kullanıcı verileri olsa da.


Şema göçleri kesinlikle kaynak kontrolündedir. Bu şekilde kodun beklediği DB şemasını biliyorsunuzdur.
Marnen Laibow-Koser

0

Kaynak kontrolü bir değişiklik izleme mekanizmasıdır. Neyi ne zaman değiştirdiğini bilmek istediğinizde kullanın.

Kaynak kontrolü ücretsiz değil. İş akışınıza karmaşıklık katar ve yeni meslektaşlarınız için eğitim gerektirir. Avantajları maliyete karşı tartın.

Örneğin, veritabanlarını kontrol etmek zor olabilir. Tanımları bir metin dosyasına manuel olarak kaydetmeniz ve ardından bunları kaynak kontrolüne eklemeniz gereken bir sistem kullanıyorduk. Bu çok zaman aldı ve güvenilmezdi. Güvenilmez olduğundan, yeni bir veritabanı oluşturmak için veya bir değişikliğin ne zaman yapıldığını kontrol etmek için kullanamazsınız. Fakat yıllarca sakladık, sayısız saatler harcadık, çünkü yöneticimiz "her şey kaynak kontrolünde olmalı" diye düşündü.

Kaynak kontrolü sihir değil. Deneyin, ancak maliyeti dengelemek için yeterli bir değer eklemiyorsa, onu terk edin.


2
Ciddi misin? Kaynak kontrolü kötü çünkü yeni meslektaşlar için eğitim gerektiriyor? Aslında kaynak kontrolünü kullanmayı bilmeyen ve öğrenmeye istekli olmayan insanlarla uzun süreli çalışmayı tercih edeceğinizi mi söylüyorsunuz? Şahsen ben burger çevirmeyi tercih ederim.
Zach

Kaynak kontrolüne karşı, sadece kör bir şekilde her şey için kaynak kontrolünü kullanmaya karşı tartışmıyorum. Kaynak kontrolü çok karmaşık bir iş akışına sahipse ve bu değer katmıyorsa, kullanmamayı tercih ederim.
Andomar

2
Demek istediğim, onu yalnızca bazı şeyler için kullanıyor olsanız bile ( öksürük kaynak kodu öksürüğü ), iş arkadaşlarınız nasıl kullanılacağını zaten bilmeli, bu nedenle onları eğitmek, başka bir şey için kullanma konusunda genel olarak arttırılmamalıdır.
Zach

0

Kaynak kontrolüne almadığım şeyler:

  • Gizli anahtarlar ve şifreler
  • Aynı dizin olmasına rağmen SDK ve SDK'ye bir yama koyarsam, o zaman uygulama başına değil çerçeveye göre olacağı için bir başka proje yapmalı.
  • Gibi 3. taraf kütüphaneleri. Geçiş, yedeklemeler, derlenmiş kod, diğer lisans altındaki kodlardan kalanlar (belki de)

Bu yüzden hg addremove, örneğin SDK güncellendiğinde arada bir yeni bir klon oluşturduğundan beri yapmam . Bu ayrıca, SDk her güncellediğinde tam bir yedekleme yapmamı sağlıyor ve depodan klonlanmış yeni bir sürümün iyi olduğunu kontrol ediyor.


0

Endişelerinizi gideren aşağıdaki kitabı size şiddetle tavsiye ediyorum:

Sürekli Teslimat: Derleme, Test Etme ve Dağıtma Otomasyonu ile Güvenilir Yazılım Sürümleri . Spesifik olarak, Bölüm 2, kaynak kontrole yerleştirilecek öğeleri ele almaktadır; bunların çoğu, az sayıda kişinin söylediği gibi, bir derleme sonucunda çoğunlukla üretilen içerikler dışında pratik olarak her şeydir.

@FrustratedWithFormsDesigner tarafından daha az sağlanan kabul edilen cevabın bir parçası ile aynı fikirde değilim , çünkü projeyi oluşturmak için gerekli araçları sürüm kontrolüne koymadığını savunuyor. Kaynak denetimindeki bir yerde (oluşturulan koda bitişik), projeyi oluşturmak ve sadece bir komut satırından çalışan komut dosyalarını oluşturmak için build komut dosyaları olmalıdır. Araçlarla, IDE'ler ve editörler anlamına gelirse, projeyi ne olursa olsun inşa etmeleri gerekmemelidir. Bunlar, geliştiriciler için aktif / hızlı gelişim için iyidir ve bu tür ortamların kurulumu da kodlanabilir veya SCM'nin başka bir bölümünden veya bir tür ikili yönetim sunucusundan indirilebilir ve bu tür IDE'lerin mümkün olduğu kadar otomatikleştirilmesi gerekir.

Ayrıca, @Yannis Rizos'un kaynak kontrolündeki ortamlar için konfigürasyonlar yerleştirme konusunda ne ifade ettiği konusunda aynı fikirde değilim . Sebep, komut dosyası dışında hiçbir şey kullanmayacak şekilde herhangi bir ortamı yeniden kurabilmeniz gerektiği ve kaynak kontrolünde konfigürasyon ayarlarına sahip olmadan yönetilemez olmasıdır. Bu bilgiyi kaynak kontrolüne sokmadan çeşitli ortamlar için yapılandırmaların nasıl geliştiğine dair hiçbir geçmiş yoktur. Şimdi, üretim ortamı ayarları gizli olabilir veya şirketler bunları sürüm kontrolüne yerleştirmek istemeyebilirler, bu nedenle ikinci seçenek onları tarih kontrolüne yerleştirmek ve böylece geçmişe sahip olmalarını sağlamak ve bu depoya sınırlı erişim sağlamaktır.


-1

Tüm kodu sürüm kontrolünde ve tüm yapılandırmaları ve kullanıcı verilerini dışarıda tutun. Drupal'a özgü olmak için, dosyalar ve settings.php hariç her şeyi sürüm denetimine sokmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.