Ana içeriğe geç

Kitap 06 · Özet sayfa

Sürüm Kontrolü

Kod değişikliklerini takip etmek ve ekip olarak birlikte çalışmak için Git kavramları.

01.gitignore
.gitignore, Git'in izlememesi gereken bağımlılık, derleme çıktısı, günlük ve gizli bilgi gibi dosya ve klasörlerin kalıplarını listeleyen düz metin dosyadır.
  • .gitignore, Git'in izlememesi gereken dosyaların kalıplarını listeler.
  • Tipik girdiler bağımlılıkları, derleme çıktılarını, günlükleri ve gizli bilgiler içeren .env dosyalarını kapsar.
  • Kalıplar joker karakterleri (*), dizin kurallarını (dist/), yorumları (#) ve istisnaları (!) destekler.
02Branch
Git'te branch, bir özellik ya da düzeltme üzerinde, birleştirene kadar ana kodu etkilemeden çalışmanızı sağlayan bağımsız bir geliştirme hattıdır.
  • Branch, bir depo içindeki yalıtılmış bir geliştirme hattıdır.
  • Git'te branch, bir commit'i gösteren hafif bir işaretçiden ibarettir.
  • Varsayılan branch genellikle main olarak adlandırılır.
03Cherry-pick
Git'te cherry-pick, belirli bir commit'in değişikliklerini geldiği branch'in geri kalanını birleştirmeden, mevcut branch'inize yeni bir commit olarak kopyalar.
  • git cherry-pick <hash> tek bir commit'in değişikliklerini mevcut branch'e uygular.
  • Orijinali taşımak yerine yeni hash'e sahip yeni bir commit oluşturur.
  • Düzeltmeleri release branch'lerine taşımak ya da yanlış yere yapılmış bir commit'i başka yere almak için yaygın olarak kullanılır.
04Code Review
Code review, kod değişikliklerinin birleştirilmeden önce başka geliştiricilerce incelenmesidir; hataları yakalar, kaliteyi artırır, bilgi paylaşımını sağlar.
  • Code review, kod değişikliklerinin birleştirilmeden önce meslektaşlar tarafından kontrol edilmesidir.
  • Genellikle bir pull request içinde, belirli satırlara yapılan yorumlarla gerçekleşir.
  • Otomatik denetimler biçimlendirmeyi ve testleri üstlenir; insanlar mantığa, tasarıma ve anlaşılırlığa odaklanır.
05Commit
Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
  • Commit, hazırlanmış değişikliklerin anlık görüntüsü ile yazar, tarih, mesaj ve üst commit gibi meta verilerden oluşur.
  • Her commit'i tanımlayan benzersiz bir hash vardır.
  • Commit'ler, uzak bir depoya push edilene kadar yerelde kalır.
06Conventional Commits
Conventional Commits, feat: add search gibi yapılandırılmış commit mesajları için bir şartnamedir; araçlar değişiklik günlüğü üretip sürümü otomatik seçer.
  • Conventional Commits, yapılandırılmış bir commit mesajı biçimi tanımlar.
  • Mesajlar tür(kapsam): açıklama biçimindedir, feat: ya da fix: gibi.
  • Bir ! ya da bir BREAKING CHANGE alt satırı kırıcı değişiklikleri işaretler.
07Detached HEAD
Detached HEAD, bir branch yerine belirli bir commit'i checkout ettiğiniz ve yaptığınız yeni commit'lerin hiçbir branch'e ait olmadığı bir Git durumudur.
  • HEAD normalde bir branch'i gösterir; detached HEAD durumunda doğrudan bir commit'i gösterir.
  • Bir commit hash'ini, bir tag'i ya da bir remote-tracking branch'i checkout etmek HEAD'i ayırır.
  • Eski sürümleri incelemek, test etmek veya derlemek için güvenlidir.
08Fast-Forward Mergeİleri Sarma Birleştirmesi
Fast-forward merge, hedef branch'te diğer branch ayrıldığından beri yeni commit yoksa olur; Git merge commit'i oluşturmaz, işaretçiyi yalnızca ileri taşır.
  • Fast-forward, merge commit'i oluşturmak yerine branch işaretçisini taşır.
  • Yalnızca hedef branch ayrışmamışsa mümkündür.
  • Bir branch'i en son main üzerine rebase etmek onu fast-forward yapılabilir kılar.
09Fork
Fork, başkasının deposunun bir barındırma platformundaki kişisel kopyasıdır; özgürce denemeler yapmanızı ve değişiklikleri özgün projeye geri önermenizi sağlar.
  • Fork, bir barındırma platformunda bir deponun kendi hesabınız altındaki kopyasıdır.
  • Fork'lar, doğrudan push edemediğiniz projelere pull request'ler aracılığıyla katkı vermenizi sağlar.
  • Özgün depoya upstream denir; güncel kalmak için onunla senkronize olun.
10Git
Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
  • Git dağıtık bir sürüm kontrol sistemidir: her klon, tüm geçmişi içerir.
  • Değişiklikler, geri yüklenebilir anlık görüntüler olan commit'ler olarak kaydedilir.
  • Branch'ler özellikleri ayrı bir hatta geliştirmenizi ve sonra birleştirmenizi sağlar.
11Git Bisect
Git bisect, commit geçmişinde ikili arama (binary search) yaparak hatayı getiren commit'i, yalnızca birkaç commit'i test ederek bulan Git komutudur.
  • Git bisect, bir hatayı ortaya çıkaran ilk commit'i bulur.
  • İkili arama kullanır; bu yüzden adım sayısı geçmiş boyutuyla çok yavaş artar.
  • Commit'leri git bisect good ve git bisect bad ile işaretlersiniz.
12Git Checkout
git checkout başka bir branch'e ya da commit'e geçer veya dosyaları önceki sürüme döndürür; yeni Git sürümleri bu işleri git switch ve git restore'a ayırır.
  • git checkout branch değiştirir ya da dosyaları geri yükler.
  • git checkout -b bir branch oluşturup ona geçer.
  • Git 2.23 onu git switch ve git restore olarak ikiye ayırdı.
13Git Clone
Git clone, mevcut bir deponun tüm geçmişiyle birlikte eksiksiz bir kopyasını indiren ve çalışmanız için bilgisayarınızda hazırlayan bir Git komutudur.
  • git clone <url> bir depoyu tüm geçmişiyle makinenize kopyalar.
  • Otomatik olarak origin adlı bir remote ekler ve varsayılan branch'i checkout eder.
  • Her klon, çevrimdışı kullanılabilen eksiksiz bir depodur.
14Git Diff
Git diff, çalışma dosyaları, stage edilmiş değişiklikler veya commit'ler gibi kodunuzun iki sürümü arasındaki tam satır satır farkları gösteren Git komutudur.
  • git diff satır satır değişiklikleri gösterir; kaldırılan satırlar için -, eklenen satırlar için + kullanılır.
  • Düz git diff stage edilmemiş değişiklikleri gösterir; git diff --staged commit edilecekleri gösterir.
  • Branch'leri, commit'leri ya da tek dosyaları karşılaştırabilirsiniz; --stat her dosyanın değişikliklerini özetler.
15Git Fetch
git fetch, uzak depodan yeni commit, branch ve etiketleri indirip origin/main gibi uzak izleme branch'lerini günceller; sizin branch ve dosyalarınız değişmez.
  • git fetch uzak bir depodan yeni commit'leri ve referansları indirir.
  • origin/main gibi uzak izleme branch'lerini günceller.
  • Branch'leriniz, staging alanınız ve dosyalarınız değişmez.
16Git Hooks
Git hook'ları, commit ya da push öncesi gibi anlarda Git'in otomatik çalıştırdığı; kodu denetleyen, kural uygulayan ve işleri otomatikleştiren betiklerdir.
  • Hook'lar, commit, merge veya push gibi olaylarda Git'in otomatik çalıştırdığı betiklerdir.
  • pre-commit gibi bir hook'un sıfırdan farklı çıkış kodu, işlemi iptal eder.
  • .git/hooks içindeki hook'lar klonlamayla paylaşılmaz; bu yüzden ekipler core.hooksPath ya da bir hook yöneticisi kullanır.
17Git Pull
Git pull, uzak bir depodan yeni commit'leri indiren ve bunları hemen mevcut yerel branch'inize entegre eden bir Git komutudur.
  • git pull önce git fetch çalıştırır, ardından sonucu mevcut branch'inize merge eder ya da rebase eder.
  • Kendi yerel commit'leriniz yoksa fast-forward yapar.
  • git pull --rebase, merge commit oluşturmak yerine yerel commit'lerinizi uzak olanların üzerine yeniden uygular.
18Git Push
Git push, yerel commit'lerinizi uzak bir depoya yükleyip oradaki ilgili branch'i güncelleyen Git komutudur; böylece başkaları çalışmanızı görüp kullanabilir.
  • git push yerel commit'leri uzak bir depodaki bir branch'e yükler.
  • git push -u origin <branch> yeni bir branch'i yayımlar ve sonraki push ve pull'lar için upstream'ini ayarlar.
  • Git, fast-forward olmayan push'ları reddeder; önce pull yapın, sonra yeniden push edin.
19Git Remote
Git remote, deponuzun genellikle bir sunucudaki başka bir kopyasına verilen, origin gibi bir kısa addır; commit'leri oraya push eder, oradan pull edersiniz.
  • Remote, origin gibi kısa bir ad ile deponun başka bir kopyasının URL'sinin eşleşmesidir.
  • git clone, origin remote'unu otomatik olarak oluşturur.
  • git remote -v remote'ları listeler, git remote add yenisini oluşturur.
20Git Reset
Git reset, mevcut branch'i daha eski bir commit'e geri taşıyan ve moduna göre staging area'yı ile dosyalarınızı da sıfırlayabilen bir Git komutudur.
  • git reset <commit> mevcut branch'i başka bir commit'e taşır ve sonraki commit'leri ondan kaldırır.
  • --soft geri alınan değişiklikleri stage edilmiş tutar, --mixed (varsayılan) stage edilmemiş tutar, --hard ise atar.
  • git reset <file> içeriğini değiştirmeden bir dosyayı staging'den çıkarır.
21Git Revert
Git revert, önceki bir commit'i, tersi değişiklikleri içeren yeni bir commit oluşturarak geri alan, mevcut proje geçmişini olduğu gibi bırakan Git komutudur.
  • git revert <hash>, önceki bir commit'in değişikliklerini tersine çeviren yeni bir commit oluşturur.
  • Geçmiş yeniden yazılmaz; bu yüzden main gibi paylaşılan branch'lerde kullanmak güvenlidir.
  • Bir merge commit'i geri almak için hangi ebeveynin korunacağını seçen -m 1 gerekir.
22Git Stash
Git stash, commit edilmemiş değişiklikleri geçici olarak saklayıp çalışma dizinini temizleyen komuttur; başka işe geçip çalışmanıza sonra dönmenizi sağlar.
  • git stash commit edilmemiş değişiklikleri kaydeder ve çalışma dizinini temizler.
  • Stash'ler bir yığında tutulur ve stash@{0} her zaman en yenisidir.
  • pop bir stash'i geri yükler ve kaldırır, apply ise geri yükler ve tutar.
23Git Tag
Git tag, belirli bir commit'i gösteren adlandırılmış kalıcı bir işaretçidir; çoğunlukla deponun geçmişinde v1.0.0 gibi sürümleri işaretlemek için kullanılır.
  • Tag, tek bir commit'i gösteren sabit ve adlandırılmış bir işaretçidir.
  • Annotated tag'ler yazar, tarih ve mesaj saklar ve sürümler için önerilir.
  • Lightweight tag'ler, ek veri içermeyen basit ad-commit işaretçileridir.
24Gitflow
Gitflow, planlı sürümleri yönetmek için uzun ömürlü main ve develop branch'lerini feature, release ve hotfix branch'leriyle kullanan bir Git branch modelidir.
  • Gitflow iki kalıcı branch kullanır: yayımlanmış kod için main ve yaklaşan işler için develop.
  • Feature branch'leri develop'tan çıkar, release branch'leri bir sürümü hazırlar, hotfix branch'leri canlıyı yamalar.
  • Release ve hotfix branch'leri hem main'e hem de develop'a birleştirilir ve her sürüm etiketlenir.
25GitHub
GitHub, Git depolarını barındırıp birlikte kod yazmaya yarayan; pull request, kod incelemesi, issue ve en büyük açık kaynak topluluğunu sunan platformdur.
  • GitHub, Git depolarını internette barındırır ve Microsoft'a aittir.
  • Pull request'ler, ekiplerin değişiklikleri birleştirmeden önce inceleyip tartışmasını sağlar.
  • Issue'lar, projeler ve GitHub Actions planlamayı ve otomasyonu kapsar.
26GitLab
GitLab, kod inceleme, iş takibi, CI/CD ve güvenlik taramasını tek uygulamada toplayan, bulutta ya da kendi sunucunuzda çalışan Git barındırma platformudur.
  • GitLab, Git depolarını inceleme, iş takibi ve CI/CD ile tek bir yerde barındırır.
  • 2011'de başladı ve 2021'de halka açık bir şirket oldu.
  • Merge request'ler onun pull request'leridir; hatlar .gitlab-ci.yml'de yaşar.
27HEAD
HEAD, Git'te checkout edilmiş olanı, normalde bulunduğunuz branch'i gösteren işaretçidir; o branch da son commit'ini gösterir, yeni commit'ler oraya eklenir.
  • HEAD, checkout edilmiş olanı, normalde mevcut branch'i gösterir.
  • Yeni commit'ler HEAD'in gösterdiği yere eklenir ve branch'i ilerletir.
  • HEAD~1, HEAD~3 ve HEAD^2 ona göre commit'leri gösterir.
28HotfixAcil Düzeltme
Hotfix, çökme ya da güvenlik açığı gibi production'daki ciddi bir sorun için hızla ve olağan sürüm takviminin dışında yayımlanan acil bir düzeltmedir.
  • Hotfix, ciddi bir production sorununu acilen düzeltir.
  • Production'da çalışan koddan başlar ve olabildiğince küçük kalır.
  • Gitflow'da hotfix branch'leri hem main'e hem develop'a birleştirilir.
29Merge
Git'te merge, bir branch'teki değişiklikleri başka bir branch'e katarak ayrı geliştirme hatlarını tek ve ortak bir geçmişte yeniden birleştirir.
  • Merge, bir branch'teki değişiklikleri başka bir branch'e entegre eder.
  • Fast-forward merge yalnızca işaretçiyi ilerletir; three-way merge ise bir merge commit oluşturur.
  • İki branch aynı satırları değiştirdiğinde çakışma oluşur ve elle çözülmesi gerekir.
30Merge Conflict
Merge çakışması, iki branch bir dosyanın aynı satırlarını değiştirdiği için Git'in otomatik birleştiremediği, sonuca birinin karar vermesi gereken durumdur.
  • Merge çakışması, iki branch aynı satırları değiştirdiğinde ya da biri diğerinin sildiği bir dosyayı düzenlediğinde oluşur.
  • Git, çakışmaları dosyada <<<<<<<, ======= ve >>>>>>> işaretleriyle belirtir.
  • Dosyayı düzenleyip işaretleri kaldırarak, git add çalıştırıp ardından commit ederek çözün.
31Monorepo
Monorepo, uygulamalar, servisler ve paylaşılan kütüphaneler gibi birçok projenin kodunu birlikte yönetilen tek bir sürüm kontrol deposunda tutma yaklaşımıdır.
  • Monorepo, birçok projeyi ve paylaşılan kütüphaneyi tek bir depoda tutar.
  • Projeler arası değişiklikler tek bir atomik commit'te yapılabilir.
  • Workspace'ler ve Nx, Turborepo, Bazel gibi derleme araçları yalnızca etkilenen görevleri çalıştırarak derlemeleri hızlı tutar.
32Pull Request
Pull request, bir branch'teki değişiklikleri başka bir branch'e birleştirme önerisidir; kod birleşmeden önce ekibe inceleme, tartışma ve test alanı sunar.
  • Pull request, bir branch'in başka bir branch'e birleştirilmesini önerir.
  • Kod incelemesi, tartışma ve onay için ana yerdir.
  • Otomatik testler genellikle birleştirmeden önce her pull request'te çalışır.
33Rebase
Git'te rebase, bir branch'in commit'lerini başka bir commit'in üzerine yeniden uygular; geçmişi yeniden yazıp merge commit'siz, temiz ve doğrusal kılar.
  • Rebase, commit'lerinizi başka bir branch ya da commit'in üzerine yeniden uygular.
  • Merge commit içermeyen doğrusal bir geçmiş oluşturur.
  • Rebase edilen commit'ler, yeni hash'lere sahip yeni commit'lerdir.
34Repository
Repository, bir projenin tüm dosyalarını ve sürüm kontrol sisteminin kaydettiği her değişikliğin eksiksiz geçmişini barındıran depolama alanıdır.
  • Repository, bir projenin dosyalarını tüm değişiklik geçmişiyle birlikte saklar.
  • Git bu geçmişi gizli bir .git dizininde tutar.
  • Yerel depolar makinenizde bulunur; uzak depolar paylaşım için barındırılır.
35Semantic Versioning
Semantic versioning, her bölümün bir sürümün uyumluluğu bozduğunu, özellik eklediğini ya da hata düzelttiğini belirttiği MAJOR.MINOR.PATCH şemasıdır.
  • Sürümler 2.4.1 gibi MAJOR.MINOR.PATCH biçimini izler.
  • Uyumsuz değişiklikler için MAJOR, uyumlu yeni özellikler için MINOR, hata düzeltmeleri için PATCH artırılır.
  • Üst numara arttığında alt numaralar sıfırlanır.
36Squash Merge
Squash merge, bir branch'teki tüm commit'leri hedef branch üzerinde tek bir yeni commit'te birleştirir; böylece ana geçmiş kısa ve okunması kolay kalır.
  • Squash merge, bir branch'teki tüm commit'leri hedef branch üzerinde tek bir commit'e dönüştürür.
  • Ana branch geçmişini, özellik ya da pull request başına tek commit ile temiz tutar.
  • Ortaya çıkan commit'in tek ebeveyni olduğundan Git, branch'i merge edilmiş olarak kaydetmez.
37Staging Area
Git'teki staging area, dosyalarınız ile bir sonraki commit arasındaki bekleme alanıdır; o commit'e girecek değişiklikleri tam olarak buraya koyarsınız.
  • Staging area, bir sonraki commit'e girecek değişiklikleri tutar.
  • git add değişiklikleri stage eder, git commit ise yalnızca stage edilenleri kaydeder.
  • Git staging area'yı .git/index dosyasında saklar; bu yüzden ona index de denir.
38Sürüm Kontrolü
Sürüm kontrolü, dosyalardaki her değişikliği kaydeden; kimin neyi değiştirdiğini görmeyi, eski sürümlere dönmeyi ve paralel çalışmayı sağlayan sistemdir.
  • Sürüm kontrolü, bir projenin dosyalarındaki her değişikliği yazarı, tarihi ve nedeniyle kaydeder.
  • Klasörleri kopyalamak yerine sürümleri karşılaştırabilir, geri getirebilir ve birleştirebilirsiniz.
  • Git gibi dağıtık sistemlerde her geliştiricide bütün geçmiş bulunur.
39Trunk-Based Development
Trunk-based development, geliştiricilerin küçük değişiklikleri en az günde bir kez ortak ana branch'e birleştirip onu hep yayımlanabilir tuttuğu stratejidir.
  • Herkes, genellikle main olan tek bir ortak branch'e entegre eder.
  • Branch'ler kullanılıyorsa en fazla bir iki gün yaşar.
  • Her değişiklikteki otomatik testler trunk'ı yayımlanabilir tutar.
Software Dictionary'den 39 terim. Ayrıntılı açıklamalar, örnekler ve sık sorulan sorular için: softwaredictionary.org/tr/kutuphane/version-control

Kitaba dönİpucu: Bir kopyasını saklamak için yazdırma penceresinde “PDF olarak kaydet”i seçin.

Daha fazla

Ayarlar