Sürüm kontrolü, uygulamayı oluşturmak için gereken kodu ve yapılandırmayı içermelidir.
Bu şu demek:
Kısa bir süre için tanıtılan geçici şeyler (örneğin, bir hatanın yerini belirlemek için veya örneğin bir dilin özelliğini denemek için gereken süre) sürüm kontrolünde olmamalıdır: ihtiyacınız olana kadar saklamalısınız bu, sonra sadece taahhütte bulunurken onu kaldırın .
Belirli bir makineye uygun yerel dosyalar bir dalda tutulabilir.
Dizüstü bilgisayar çalındığında ya da bir virüs sizi işletim sistemini yeniden yüklemeye zorladığından, bunların hepsini yerel olarak tutmaktan kaçınırdım (ve bu arada, son yedeklemenizin iki yıl önce yapıldığını görüyorsunuz) .
Öte yandan, dosya yapısına dikkat edin: yerel yapılandırma tamam, ezici oluncaya kadar ve sizi projeye katılan 42 geliştiricinin her dosyasında tek bir değişiklik yapmaya zorlar.
Makineler arasındaki özellikleri kaldırma fırsatını izleyin. Bu demek olabilir:
Geliştiricilerin makinelerindeki yerel örnekleri değiştirmek için dev SQL sunucusuna erişim vermek,
Kamu paketleri için Pypi veya npm gibi paket dağıtım hizmetlerini ve kurum içi paketler için özel muadillerini kullanmak,
Ekip üyelerinden aynı yazılım sürümlerini kurmalarını isteyin,
Yazılım güncellemelerini olabildiğince şeffaf yapın,
Veya işletim sistemini ve gerekli yazılımı bir tıklamayla bir makineye yerleştirmeyi mümkün kılar (ayrıca her geliştiricinin tercih ettiği Vim vs. Emacs, Chrome vs. Firefox vb.
Yani:
Proje dosyaları Mevcut PC'deki düzeni yansıtabilmek için yolların düzenlenmesi gerekebilir.
Neden her bilgisayarda aynı düzeni kullanmıyorsunuz? Proje içerisindeki yollar proje dosyasına göre olmalıdır; bu, projenin bulunduğu yerin önemli olmadığı anlamına gelir. Yazılımın ve kitaplıkların sürümleri, yalnızca bazı makinelerde görünen şifreli hataları önlemek için aynı olmaktan daha iyidir ve ekibin diğer üyeleri için çoğaltılması imkansızdır.
Örnek:
Visual Studio ile oluşturulan bir projede şunları bulabilirsiniz:
Dosyaların kendileri. Yolların göreceli olması, ekibimin H:\Development\Hello World Project\
diğer üyeleri projeyi kontrol ederken makinemde, projenin içinde olup olmadığı önemli değil C:\Work\HelloWorld\
.
Bağımlılıklar, yani üçüncü taraf ve kurum içi kütüphaneler. Her iki tür de çatışmalarla ilgili tüm tartışmaları modası geçmiş kılan NuGet tarafından ele alınmalıdır. Kütüphanemin aynı sürümüne sahip değilseniz, bağımlılıkları güncellemesini NuGet'ten isteyin. Bu kadar basit (iyi çalıştığında, her zaman durum böyle değil).
Kurum içi kütüphaneleri özel bir NuGet'te tutmanın çok önemli olduğunu unutmayın. Paylaşılan bir klasörde depolanan veya bir takımın e-posta yoluyla gönderilen bir sürü kütüphaneye sahip olmak anarşi ve depresif CI sunucularına yol açar.
Ayarlar. Takımın aynı ayarları paylaşması çok önemli. Takımın yarısı uyarılara hata gibi davranmaya karar verirse ve takımın yarısı olduğu gibi uyarılar tutmaya devam ederse, takımın ilk bölümünün üyeleri, geliştiricilerin oluşturduğu uyarıları takımın ikinci bölümünden kaldırarak zamanlarını harcarlar.
Yardımcı programlar ile ilgili ayarlar. Bunlar aldatıcı, çünkü ekibin bazı üyeleri bazı programları kurmuş olabilir, bazıları ise yüklememiştir.
Aynı araç setinin kurulu olması şiddetle tavsiye edilir. Bazı programcılar StyleCop kullanmak ister ancak diğerleri kullanmazsa, takım işi yapmaz. Bazıları Kod sözleşmeleri kullanıyorsa, ancak diğerleri kullanmıyorsa, aynı sorunları yaşarlar.
Makefile'lar. Örneğin, optimizasyonun hata ayıklama sırasında kapatılması gerekebilir, ancak CI sunucusu için gerekli olmayabilir.
Sürüm kontrolünde birkaç makefile dosyası bulundurun. CI sunucusunda hata ayıklama sürümü oluşturmak ve onu zor bir hatayla karşılaşan bir müşteriye zorlamak alışılmadık bir durum değil.
Kirli çirkin hackler. Örneğin, bir işlevi test etmek için bir işlevin ortasına 7 geri dönün, işleve bağlı olarak ve 7 değerinde kırıldığından şüphelenilir.
İlk başta böyle bir koddan kaçınırdım. Bir şeyi test etmek için, birim testleri kullanın. Hata ayıklama amacıyla bazı kodları değiştirmek gerçekten birkaç saniye sürerse , o zaman bunu yapın, ancak bu kodu yine de birkaç dakika içinde kaldıracaksınız, bu yüzden bunu onaylamanız gerekmez.
Tanımladığınız gibi bir test yazmalısınız. Örneğin, şunlardan emin olmak istiyorsanız:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
değişmezden temperature
düşük olduğunda bir istisna atar AbsoluteZero
, kodun kendisi ile oynamamanız gerekir. Bunun yerine, şunları yapacak bir birim testi oluşturun:
- kodunuzu kendiniz belgeleyin,
- Kodunuzun güvenilirliğini artırmak,
- yukarıdaki yöntemde değişiklik yaparken, bakıcıların regresyon testine güvenebilmelerini sağlamak,
- aynı testi yapmanız gerekebilecek ekibinizin diğer geliştiricilerine hizmet etmek.