Kurs
Depolar, projelerinizin saklandığı dijital alanlardır. Dosyaları saklar, değişiklikleri izler ve başkalarıyla iş birliği yapmayı kolaylaştırır. Neyin değiştiğini, değişikliği kimin ve neden yaptığını görebilirsiniz.
Bu yazıda depoların ne olduğunu, karşılaşacağınız başlıca türleri ve neden önemli olduklarını ele alacağız.
Bir Depo Fikrinin Arkasındaki Düşünce
Depo (ya da repo), bir projenin tüm dosyalarının, kodlarının, belgelerinin ve kaynaklarının saklandığı merkezi bir yerdir. Ekibiniz için her şeyi düzenli ve erişilebilir tutan bir merkez gibidir.
Depoyu faydalı kılan şey, sürüm kontrolünü desteklemesidir. Bu, her değişikliğin kaydedildiği anlamına gelir: kimin yaptığı, ne zaman yapıldığı ve neden yapıldığı. Bir şey bozulursa ya da gözden geçirilmesi gerekirse, her zaman önceki bir sürüme geri dönebilirsiniz.
Örneğin, bir depoyu buluttaki bir proje klasörü gibi düşünebilirsiniz. Bilgisayarınızdaki bir klasör gibi tüm dosyalarınızı tek bir yerde tutar. Ancak sıradan bir klasörden farklı olarak, bir depo her düzenlemeyi izler, değişikliği kimin yaptığını not eder ve tüm geçmişi kaydeder.

Bu sayede siz ve ekibiniz dosyaları özgürce ekleyebilir, güncelleyebilir veya yeniden düzenleyebilir; emek kaybı endişesi yaşamazsınız.
Temel Depo Özellikleri ve İşlevleri
Bir deponun temel özelliklerine ve nasıl çalıştıklarına bakalım:
Depolama
Bir depo tüm proje dosyalarınızı tek bir yerde tutar. Kodu bir dizüstü bilgisayarda, görselleri bir sohbet dizisinde, notları bir e-postada bulundurmak yerine, her şey tek bir noktada bir aradadır. Böylece önemli olanı asla gözden kaçırmazsınız ve tüm ekibiniz ilgili verileri nerede bulacağını bilir.
Örneğin bir web sitesi geliştiriyorsanız, HTML, CSS, görseller ve notlarınızın tümü aynı repoda saklanır. Böylece karışıklık olmaz, hiçbir dosya kaybolmaz.
Sürüm kontrolü
Bir depoda değişiklikleri her kaydettiğinizde, depo bunları hatırlar. Kimin düzenleme yaptığını, ne zaman yaptığını ve neyin değiştiğini görebilirsiniz. Olağan dışı bir şey olursa stres yapmanıza gerek yoktur. Her zaman önceki bir sürüme dönebilirsiniz. Bu da hiçbir şeyin kalıcı olarak kaybolmayacağına dair içinize su serper.
Diyelim ki ekip arkadaşınız yanlışlıkla ana sayfa kodunun bir kısmını sildi. (Evet, olabiliyor!) Her şeyi baştan yazmak yerine, dünkü sürüme geri dönersiniz ve sorun saniyeler içinde çözülür.
İş birliği
Bir depoda çalıştığınızda siz ve ekip arkadaşlarınız aynı anda katkı sağlayabilirsiniz. Birinin işini bitirmesini beklemenize gerek kalmaz ve birbirinizin çalışmalarının üzerine yazma konusunda endişe etmezsiniz. Herkes kendi işine odaklanır ve depo her şeyi senkronize tutar.
Diyelim ki bir projede ekip arkadaşınızla çalışıyorsunuz. Siz bir hatayı düzeltirken, diğer kişi aynı anda ana sayfayı tasarlıyor olabilir. Böylece paralel çalışır, yine de her şey genel projeye sorunsuz şekilde akar.
Organizasyon
Bir depo ile dosyalarınız dağınık ya da bulunması zor olmaz. Açık bir klasör yapısı kurabilir, böylece her şeyin nereye ait olduğunu her zaman bilirsiniz. Bu, işinizi derli toplu tutar ve ihtiyacınız olan tek bir dosyayı ararken vakit kaybetmenizi önler.
Diyelim ki “styles.css” dosyanızı arıyorsunuz. Düzensiz, rastgele klasörlerde dolaşmak yerine, repodaki “assets” klasörünü açarsınız ve dosya tam oradadır.
Erişim kontrolü
Bazen projenizi özel tutmak, bazen de paylaşmak istersiniz. Bir depo, çalışmanızı kimin görüntüleyebileceğini veya düzenleyebileceğini kontrol etmenizi sağlar. Özel, herkese açık ya da özel izinlerle ikisinin arasında bir yerde olmasına siz karar verirsiniz.
Örneğin, geliştirme aşamasındayken reponuzu özel tutup, lansmandan sonra herkese açık yaparak diğerlerinin bitmiş projenizi keşfetmesini sağlayabilirsiniz.
Entegrasyon
Depolar ayrıca kullandığınız diğer araçlarla da bağlanabilir. Bu, kodunuzu otomatik test eden, güncellemeleri dağıtan veya proje yönetimi görevlerinizi siz müdahale etmeden güncelleyen iş akışları kurabileceğiniz anlamına gelir.
Diyelim ki repoya yeni kod gönderdiniz. Hemen otomatik testler çalışır ve hatalar işaretlenir. Aynı anda, proje panonuzda görev tamamlandı olarak işaretlenir. Böylece her şey birlikte çalışır.
Yaygın Depo Türleri
Birden fazla depo türü vardır. Projenize bağlı olarak, her birinin kendi amacı ve faydası olan farklı türlerle karşılaşırsınız. Şimdi en yaygın olanlarına bakalım.
Sürüm kontrol sistemi depoları
Bir sürüm kontrol deposu, proje dosyalarınızda yapılan her değişikliği takip eder. Böylece sürümleri karşılaştırabilir, gerekirse geri dönebilir ve ekip arkadaşlarınızla birbirinizin çalışmalarının üzerine yazmadan güvenle çalışabilirsiniz.
Farklı sürüm kontrol sistemleri vardır ve en sık görecekleriniz şunlardır:
- Git her geliştiricinin deponun tam bir kopyasını kendi bilgisayarında tutmasına olanak tanır (dağıtık bir sistem). Bu, iş birliğini hızlandırır ve daha güvenli hale getirir çünkü tek bir sunucu arızası projenin tamamını silemez.
- Mercurial da dağıtık bir sürüm kontrol sistemidir. Günümüzde daha az yaygın olsa da, bazı ekipler sadeliği nedeniyle hâlâ kullanır.
- Subversion (SVN) daha eski, merkezî bir sürüm kontrol sistemidir. Her kişinin tam bir kopyaya sahip olması yerine, depoyu barındıran tek bir ana sunucu vardır. Geliştiriciler dosyalara erişmek veya güncellemek için o sunucuya bağlanır.
Paket yöneticisi depoları
Bir paket yöneticisi deposu, kod kütüphanelerini (paketler olarak adlandırılır) saklar. Her şeyi sıfırdan yazmak yerine, geliştirmeyi hızlandırmak için hazır kodları içe aktarabilirsiniz. Kendi projenizi paketleyip başkalarıyla da paylaşabilirsiniz.
Bu, giriş sistemleri, grafikler veya butonlar gibi yaygın özelliklere her ihtiyaç duyduğunuzda tekerleği yeniden icat etmek zorunda kalmadığınız için zaman kazandırır ve tutarlılık sağlar.
İşte bazı popüler paket yöneticisi depoları:
- npm, JavaScript için başlıca paket yöneticisidir. React, Angular ve Bootstrap gibi binlerce kütüphaneye ev sahipliği yapar.
- PyPI (Python Package Index), Python paketleri için merkezi bir merkezdir. Bu kütüphaneleri pip ile kurabilirsiniz.
- apt çoğunlukla Linux sistemlerinde, işletim sistemi düzeyinde yazılım kurmak ve güncellemek için kullanılır.
Veri depoları
Veri deposu, veri kümelerinin saklandığı, yönetildiği ve paylaşıldığı merkezi bir yerdir. Büyük dosyaları farklı bilgisayarlara dağınık halde tutmak yerine, bir veri deposu bunları güvenilir tek bir konumda toplar.
Başlıca avantajlarından biri, veri depolarının genellikle meta veri (yazar, tarih, sürüm ve lisans gibi ayrıntılar) içermesidir. Bu da veriyi anlamayı, yeniden kullanmayı ve atıf yapmayı kolaylaştırır. Yani bir araştırmacı ya da veri bilimciyseniz, verinin nereden geldiğini ve kullanıp kullanamayacağınızı bilirsiniz.
Bilinen bir veri deposu örneği Kaggle’dır; burada insanlar veri kümelerini yükler, başkaları indirip analiz eder ve hatta bir şekilde iyileştirebilir.
Kod Olarak Altyapı (IaC) depoları
Bir Kod Olarak Altyapı (IaC) deposu, sunucular, ağlar veya bulut kaynakları gibi altyapınızı tanımlayan yapılandırma dosyalarını sakladığınız yerdir. Bunları elle kurmak yerine, kod olarak yazarsınız.
Çünkü altyapınız kod haline geldiğinde, yazılım gibi sürümlenebilir, gözden geçirilebilir, yeniden kullanılabilir ve otomatikleştirilebilir. Bu da DevOps ekiplerini daha hızlı ve insan hatasına daha az açık hale getirir.
Örneğin, Terraform ile ihtiyaç duyduğunuz altyapıyı belirten basit yapılandırma dosyaları yazarsınız. Terraform ardından bunu otomatik olarak kurar veya günceller. Bu yapılandırma repoda kalır; böylece tüm ekip görebilir, değişiklikleri takip edebilir ve gelecekteki projeler için yeniden kullanabilir.
Depo Kavramları ve Terminolojisi
Depolarla çalışmaya başladığınızda bazı standart terimlerle karşılaşırsınız.
Bunların anlamı şöyledir:

Herkese Açık ve Özel Depolar
Bir depo kurduğunuzda, kimin erişebileceğine de karar verirsiniz. Bazıları herkese açıktır, bazıları davet edilen iş birlikçileriyle sınırlıdır, bazıları ise bir şirket içinde tutulur.
Üç ana türe bakalım.
Herkese açık depolar
Herkese açık bir repo, herkes tarafından erişilebilir. İsteyen görüntüleyebilir, indirebilir veya izin verirseniz katkıda bulunabilir. Bu, çalışmaları paylaşmanın ve topluluktan yardım davet etmenin amaçlandığı açık kaynak projeleri için standarttır.
Ücretsiz bir kod kütüphanesi yayımlarsanız, herkese açık yapmak diğer geliştiricilerin kullanmasına, iyileştirme önermesine ve hataları düzeltmesine olanak tanır.
Tüm dünya bir herkese açık repoyu görebildiği için, hassas verileri eklememeye dikkat edin. Güvenlik açıklarını taramak için Dependabot gibi araçlar kullanabilirsiniz.
Özel depolar
Özel bir repo yalnızca sizin seçtiğiniz kişilere açıktır. Paylaşmaya hazır olmayan ya da hassas veya mülkiyete tabi kod içeren projelerde yaygındır.
Ekip olarak bir müşterinin web sitesini geliştiriyorsanız, lansmana kadar özel bir repoda tutarsınız ki rakipler ya da halk erişemesin.
Ancak özel repolarda bile rehavete kapılmayın. Güçlü izinler, çok faktörlü kimlik doğrulama kullanın ve sorunları önlemek için erişimi düzenli olarak gözden geçirin.
Dahili depolar
Dahili bir repo yalnızca kuruluşunuz içindeki kişilere açıktır. Şirketteki herkes görebilir, ancak dışarıdakiler göremez. Şirket genelinde paylaşılması gereken, ancak dışarı çıkmaması gereken projeler için idealdir.
Örneğin, bir şirket İK araçlarını dahili bir repoda barındırabilir; böylece her çalışan kullanabilir, ancak şirket dışından kimse kodu göremez.
Ancak bir dahili repo kullanıyorsanız, izinleri ve çatallama (fork) politikalarını göz önünde bulundurun ki kod duvarlarınızın dışına sızmasın.
Depolar Neden Önemlidir?
Depolar, projeleri yönetmeyi ve paylaşmayı kolaylaştıran araçlar sunar. Ancak bundan çok daha fazlasını yaparlar—işte size sağladıkları:
- Ekip arkadaşlarınızla aynı anda, birbirinizin değişikliklerinin üzerine yazmadan birlikte çalışın.
- Her değişikliği takip edin, kimin yaptığını görün ve bir şeyler ters giderse geri dönün.
- Yeni özellikleri veya hata düzeltmelerini dallarda deneyin; ana projeye dokunmadan hazırlanınca geri birleştirin.
- Proje nasıl çalışıyor herkes anlasın diye
README.mdgibi dosyalar veya vikilerle dokümantasyonu tek yerde tutun. - Projeleri GitHub gibi platformlarda sergileyerek becerilerinizi öne çıkaran bir portföy olarak kullanın.
- Projeleri otomatik test ve dağıtım için GitHub Actions, GitLab CI veya Jenkins gibi araçlarla depolara bağlayın.
Popüler Depo Barındırma Hizmetleri
Depolarınızı barındırabileceğiniz çeşitli platformlar vardır ve her birinin güçlü yönleri bulunur. En yaygın olanlardan bazılarına bakalım:
GitHub
İlk 500 web sitesi arasında 32. sırada yer alan GitHub, halihazırda milyonlarca geliştirici ve projenin bulunduğu, depo barındırmada en popüler platformdur. Kod paylaşımından söz edildiğinde varsayılan tercih haline gelmiştir.
GitHub kendi özellik karmasıyla gelir.
- Açık kaynak topluluğuyla paylaşmak için herkese açık repolar veya yalnızca ekibiniz için özel repolar oluşturabilirsiniz.
- Proje yönetimini ve iş birliğini kolaylaştıran, sorun izleme, kod incelemeleri, proje panoları ve vikiler gibi yerleşik araçlara sahiptir.
- GitHub Pages kullanarak repodan doğrudan statik web siteleri ve bloglar barındırabilirsiniz.
GitHub’ın fiyatlandırma kademesi şöyledir:
|
Plan |
Fiyat |
En Uygun |
|
Free |
$0 |
|
|
Team |
$4/ay |
|
|
Enterprise |
$21/ay |
|
Bitbucket
Bitbucket, Atlassian’ın repo barındırma hizmetidir ve Jira veya Trello gibi araçları zaten kullanıyorsanız oldukça iyi çalışır. Hepsi entegre olduğundan, görevlerinizi Jira’da takip edip Bitbucket’taki koda doğrudan bağlayabilirsiniz; bu da ekip çalışmasını çok daha akıcı hale getirir.
Hatta yerleşik çekme istekleri (pull request), kod incelemeleri ve CI/CD hatlarıyla birlikte gelir; böylece kodunuzu doğrudan platformdan test edip dağıtabilirsiniz.
İşte fiyatlandırma kademeleri şu şekildedir:
|
Plan |
Fiyat |
Ayrıntılar |
|
Free |
$0 |
|
|
Standard |
$3/ay |
|
|
Premium |
$6/ay |
|
GitLab
GitLab, depo barındırmada bir diğer büyük isimdir. Kodlama, test etme ve projeleri dağıtma için hepsi bir arada bir platformdur. GitHub veya Bitbucket’tan farklı olarak, birçok şirketin gizlilik ve kontrol nedeniyle tercih ettiği şekilde, kendi sunucularınıza kendiniz de barındırabilirsiniz.
Yerleşik CI/CD hatlarıyla birlikte gelir; böylece kodunuzu otomatik olarak test edip dağıtabilirsiniz.
Onların fiyatlandırma kademesi şu şekildedir:
|
Plan |
Fiyat |
Ayrıntılar |
|
Free |
$0 |
|
|
Premium |
$29/ay |
|
|
Ultimate |
$99/ay |
|
SourceForge
SourceForge, açık kaynak projeleri barındırmak için en eski platformlardan biridir. Günümüzde GitHub veya GitLab kadar popüler olmayabilir, ancak ücretsiz yazılım dağıtımı için hâlâ yaygın olarak kullanılır.
Ağırlıklı olarak özel değil, açık kaynak projelere odaklanır; dolayısıyla herkesin kullanabileceği kamuya açık yazılımlar üzerinde çalışıyorsanız, SourceForge hâlâ sağlam bir seçenektir.
Açık kaynak projeler için ücretsizdir.
AWS CodeCommit
AWS CodeCommit, Amazon’un Git tabanlı depo hizmetidir. Tamamen yönetilen bir hizmettir; dolayısıyla sunucu kurup bakım yapmak zorunda kalmazsınız, altyapı ve ölçekleme ile AWS ilgilenir.
Depolar varsayılan olarak özeldir ve kimlik bilgilerini ifşa etmeden AWS hesapları arasında paylaşılabilir.
Şu şekilde bir fiyatlandırma kademesine sahiptir:
|
Plan |
Fiyat |
Ayrıntılar |
|
Free |
$0 |
|
|
Paid |
Ücretsiz katman ötesinde $1/kullanıcı/ay |
|
Son Düşünceler
Depolar her şeyi bir araya getirir. Kodu güvende tutar, değişiklikleri izler ve iş birliğini çok daha kolay hale getirir. Modern yazılım geliştirme onlarsız neredeyse imkânsız olurdu.
Öyleyse, yeni başlıyorsanız, Introduction to Git kursumuza göz atın. Temelleri—commit, push ve branch’leri—öğrenin ve depoların neden her projenin vazgeçilmez bir parçası olduğunu hızla göreceksiniz.
Karmaşık konuları basitleştirmeyi seven bir içerik stratejistiyim. Splunk, Hackernoon ve Tiiny Host gibi şirketlerin hedef kitleleri için ilgi çekici ve bilgilendirici içerikler üretmelerine yardımcı oldum.
SSS
Yerel depo ile uzak depo arasındaki fark nedir?
Yerel bir depo bilgisayarınızda bulunur ve kişisel çalışmalarınız için proje dosyalarınızı saklar. Uzak bir depo ise bir sunucuda (GitHub veya GitLab gibi) barındırılır ve iş birliği, paylaşım ve yedeklemeye olanak tanır.
Depo ile veritabanı arasındaki fark nedir?
Bir depo, sürüm geçmişiyle birlikte kodu ve ilgili proje dosyalarını saklar. Geliştirmeyi yönetir.
Veritabanı ise yapılandırılmış verileri (müşteri kayıtları gibi) saklar ve canlı veriyi yönetir.
Her proje için bir depoya ihtiyacım var mı?
Her zaman değil. Sadece tek seferlik hızlı bir dosya ise, bir repo gereğinden fazla olabilir. Ancak güncellemeyi, paylaşmayı veya iş birliği yapmayı planladığınız her şey için bir depo hayatı çok kolaylaştırır.
Git ile GitHub arasındaki fark nedir?
Git bir sürüm kontrol sistemidir. Değişiklikleri izler ve dalları yönetir. GitHub ise Git depolarını çevrimiçi barındıran ve çekme istekleri, sorunlar ve entegrasyonlar gibi iş birliği özellikleri ekleyen bir platformdur.
Başkasının reposuna nasıl katkıda bulunurum?
Çoğu herkese açık proje, çekme istekleri (pull request) üzerinden katkıyı kabul eder. Genellikle repoyu çatallarsınız (fork), değişikliklerinizi yaparsınız ve ardından proje sahibinin incelemesi için bir çekme isteği gönderirsiniz.
Bir repoyu herkese açıktan özele çevirebilir miyim?
Evet. Çoğu platform (GitHub, GitLab, Bitbucket gibi) bir deponun görünürlüğünü istediğiniz zaman değiştirmeye izin verir. Ancak bir şey bir kez herkese açık olduysa, kopyalarının başka yerlerde çoktan bulunabileceğini unutmayın.

