Yazılım Geliştiriciler için Git Terminoloji Sözlüğü
Merhaba! Codimis olarak yazılım öğrenmeye yeni başlayanlara yönelik içerik üretmeye devam ediyoruz.
Bu yazımızda Git versiyon kontrol sisteminde sık kullanılan komutlar ve kavramları açıklamaya çalışarak, kavramların daha iyi oturmasına yardımcı olmayı amaçladık. Umarız faydalı bir içerik olmuştur.
Terimlerin sıralamasını alfabetik olarak yaptık ve terimlerin açıklamalarında geçen terimleri eğer daha o terim açıklanmadıysa linkleyerek yönlendirmeler ekledik. İyi okumalar.
Git Versiyon Kontrol Sistemi Komutlar ve Kavramlar
Add: Git üzerinde yaptığımız değişiklikler commit edilmeden önce add komutu ile staging dediğimiz alana eklenir. Add komutunu kullanmadan, yapılan değişikliklerin commit için görünmesi mümkün değildir. git add . komutu üzerinde çalışılan klasördeki bütün dosyaları staging’e alırken, git add <file-name> sadece belirli bir dosyayı staging alanına almamızı sağlar.
Bitbucket: Git tabanlı kaynak kodu yönetimi yapabildiğiniz ücretsiz barındırma (hosting) servislerinden biridir. Atlassian firmasının ürünüdür.
Branch: Projenin kaynak kodunu kopyalayıp ayrı bir alanda tutulmasını sağlayan bir yapı olarak düşünülebilir. Projelerde ortamlar, yeni bir özellik, ya da sistemdeki bir hatanın çözümü gibi birbiri ile bağlantısı olmayan geliştirmeleri ayrı alanlarda tutmak için Git üzerinde açılan ayrı dallara branch denir. Branch sistemi ile farklı yazılımcılar farklı özellikler ve hatalar üzerinde çalışabilir ve birbirlerinin geliştirmelerinden etkilenmezler. git branch <branch-ismi> verilen isimde yeni bir branch oluşturulmasını sağlayan komuttur.
Branching Strategy: Projenizde sürümü oluşturduğunuz branch, test ortamı için branch, özellik ve hata branchlerinin hangi branch ile merge edileceği gibi konuların belirlenmesine branching strategy denir. Git Flow ve Github Flow, piyasadaki popüler branching stratejilerine örnek olarak gösterilebilir.
Checkout: Üzerinde çalıştığımız branchi değiştirmemize yarayan komuttur. git checkout <branch-ismi> şeklinde kullanımı vardır.
Cherry-Pick: Bir branchteki commiti başka bir branche kopyalamamızı sağlayan komuttur. Commiti kopyalamak istediğimiz branche geçeriz ve git cherry-pick <commit-hash> komutu ile ilgili commiti kopyalayabiliriz.
Clone: Online olarak bulunan bir Git repositorysini kendi bilgisayarımıza kopyalamamız anlamına gelir. git clone <git-repository-url> komutu ile kullanılır.
Commit: Working Directory’deki kaynak kod üzerinde yapılan değişiklikleri local repositorye kaydetmenize yarayan komuttur. git commit komutu ile kullanılır.
Commit Message: Yapılan değişiklikleri commit komutu ile local repositorye kaydederken değişikliklerin ne olduğu kısaca açıklayan yazıya commit message denir. git commit -m “commit yazınız” komutu ile commite kısa yoldan eklenebilir.
Fetch: Remote repositorydeki güncel branch ve commitleri local repositorynizde indirmenizi sağlayan komuttur. git fetch — all komutu ile tüm remotelardan kopyalama yapmak için kullanılır.
Git Bash: Windows işletim sisteminde terminal üzerinden Git versiyon kontrol sistemini kullanabilmenizi sağlayan uygulamadır.
Gitignore: Kaynak kodunun bulunduğu klasörlerde yer alması gereken, ancak Git repositorysinde bulunmamasını ve değişikliklerinin takip edilmemesini istediğimiz dosya türleri ya da klasörleri tanımladığımız dosyaya denir. İsmi olmayan .gitignore uzantılı bir dosya olarak repository içinde kaydedilir.
GitHub: Git ile yönetilen projeler için ücretsiz ve online kaynak kod yönetim sitelerinden birisidir. Açık kaynak kodlu projelerin çoğunun kodlarını bu platformda bulabilirsiniz.
GitLab: Bitbucket ve GitHub gibi, Git tabanlı online kaynak kod yönetimi yapmanızı sağlayan bir servistir.
GitKraken: Windows, Mac ve Linux işletim sistemlerinde kullanabileceğiniz, git versiyon kontrol sistemini bir arayüz üzerinden yönetmenizi sağlayan araçlardan biridir.
HEAD: Git üzerinde bulunulan commiti gösteren sembolik referansa verilen isimdir. Bir gölge misali yapılan her işlemde yapılan işlemleri takip eder ve referans aldığı yer güncellenir. Branch değiştirme, commit atma gibi işlemlerden sonra üzerinde bulunulan geçerli commite geçer.
Hooks: Commit, push gibi komutların öncesinde ve sonrasında çalıştırılabilecek özel komut dosyalarına denir.
Local Repository: Genel olarak kendi bilgisayarımızda bulunan Git repositorylerine verilen isimdir. Remote’da bulunan Git repositorysini bilgisayarımıza klonlayarak ya da bilgisayarımızda git init komutu ile direkt olarak oluşturulabilir.
Log: Commitler ile Git üzerinde yapılan değişiklikleri görmemizi sağlayan alan log olarak adlandırılır. git log komutu ile repositorynin tarihçesini listeletebiliriz.
Merge: Bir branch üzerinde yaptığımız değişikliklerin başka bir branch ile birleştirilmesi işlemine merge denir. Merge yaparken hangi branche merge yapmak istiyorsak önce git checkout komutu ile o branche geçiyoruz. Daha sonra git merge <branch-adı> komutu ile verdiğimiz branchi üzerinde çalıştığımız branche merge yapmış oluyoruz.
- Fast-Forward Merge: Merge yaparken, ana branchten oluşturduğumuz feature branch ile değişiklik yapıldıktan sonra, ana branchte bir değişiklik olmamışsa, feature branchdeki commit hashi ana branch commit hashine alınır. Bu senaryoda sanki değişiklik ana branchte yapılmış gibi gözükür. Bu işleme fast-forward merge denir ve işlem sonunda merge commit atılmaz.
- Regular Merge: Birleştirilmek istenen iki branchte de değişiklik varsa ve bu iki branch merge edilirse, bu durumda regular merge gerçekleşir. Bu merge işlemi sonunda mergelenen branche merge commiti atılır.
Merge Conflict: İki farklı branchte aynı dosyanın aynı satırında değişiklik yapıldığında ve bu iki branch merge edildiğinde ortaya çıkan durumdur. Git, hangi dosyadaki değişikliğin uygulanacağına karar veremez. Yazılımcı, conflict oluşturan satırları kontrol ederek değişikliğe karar verir.
Pull: Git fetch komutunun yaptığı işleme ek olarak, remote repositorydeki değişiklikleri local repositorye almanızı ve remote değişikliklerini local reponuza merge yapmanızı sağlayan komuttur. Fetch komutundan farklı olarak remote değişiklikleri working directorynize yansayacaktır.
Pull Request: Bir branchte yaptığınız değişikliklerin başka bir branche merge yapılmadan önce diğer geliştiriciler tarafından incelenmesi ve değişikliklerin kontrol edilmesi için yapılan isteğe pull request denir. Pull request sırasında diğer yazılımcılar değişiklikler hakkında yorum yapabilir ve eksiklerin düzeltilmesi için istekte bulunabilir. Örneğin açık kaynak kodlu projelerde yapılan değişiklikler için pull request açılır.
Push: Local repositorymizde yaptığımız değişiklikleri remote repositorye göndermeye push denir. git push komutu ile gerçekleştirilir.
Rebase: İki branchi birleştirmeye yarayan komutlardan birisidir. Diyelim ki bir feature branch ve bir master branch olsun. Feature branchte değişiklik yapılmış ve master branche rebase etmek istiyoruz. Featuredaki değişiklikler, master branchte yapılmış gibi gözükür, birleştirilmeye dair commit (merge commit) atılmaz.
Remote Repository: Git reposu barındırma hizmeti sunan servislerde (Github, Bitbucket) ya da herhangi bir sunucuda bulunan repositorye remote repository denir. Local repositoryde yaptığımız değişiklerin push komutu ile remote repositorye yansımasını sağlarız. Remote repository sayesinde herkes kendi bilgisayarındaki değişiklikleri ortak bir alanda toplayabilir.
Repository: Projedeki değişikliklerin ve dosyaların tutulduğu veri yapısına repository denir.
Reset: Local repositoryde yapılan commitlerin geri alınmasına verilen isimdir. Soft, hard ve mix şeklinde üç farklı tipi vardır.
- Soft, sadece commiti iptal edip yapılan değişikliklerin staging areaya geçmesini sağlar. git reset — soft ile kullanılır.
- Mix, commiti iptal edip değişiklikleri staging areadan da kaldırarak sadece working directoryde kalmasını sağlar. git reset ile kullanılır.
- Hard, commiti ve committeki tüm değişiklikleri siler. git reset — hard ile kullanılır.
Revert: Yaptığınız bir commiti geri almanızı sağlayan komuttur. Varolan committeki değişiklikler geri alınır ve bu geri alınan değişiklikler ile yeni bir commit oluşturulur. git revert <commit-id> formatı ile kullanılır.
SHA: Açılımı Simple Hashing Algorithm olan algoritma ile 40 karakterlik eşsiz bir değer üretilir. Bu değer, Git’teki tüm commitlerin birbirinden ayrışmasını sağlayan bir tanımlayıcı olarak kullanılır.
SourceTree: Atlassian firması tarafından geliştirilen, git versiyon kontrol sistemini bir arayüz üzerinden yönetmemizi sağlayan kullanışlı bir araçtır.
Staging Area: Local repository ve working directory arasında yer alan, commit ile repositorye kaydedilmek istenen değişikliklerin tutulmasını sağlayan alandır. Git add komutu ile commitlenmek için hazırlanan dosyalar bu alanda tutulur. Git commit komutu çalıştırıldığında bu alana eklenmiş değişiklikler repositorye kaydedilir.
Status: Local repositorynizin o anki durumunu görmenizi sağlayan komuttur. Burada dosyalarda yaptığınız değişiklikleri görürsünüz ve git add komutu ile değişiklikleri staging areaya alarak commit etmek için hazır hale getirebilirsiniz.
Stash: Bir branch üzerinde yaptığımız değişiklikleri commit etmeden geçici olarak kaydedilmesine stashlemek denir. Diyelim ki bir branch üzerinde değişiklik yapıyoruz ve acil bir iş geldi. Başka bir branch’e geçmemiz gerekiyor ve o an yaptığımız değişiklikleri commit etmek istemiyoruz. Stash komutu, burada yardımcı oluyor. Stash’e aldığımız değişiklikleri daha sonra unstash yaparak uygulayabiliyoruz.
Tagging: Commitlere bilgilendirici etiketler eklemeye tagging denir. git tag <tag-name> şeklinde kullanılır. Örneğin projenizde versiyonlama yapmak için kullanarak hangi commitin hangi versiyona ait olduğunu gösterebilirsiniz.
Version Control System: Yazılım projelerinde yapılan değişiklikleri kolay bir şekilde yönetmemizi sağlayan, projelerin geliştirilmesinden yayınlanmasına kadarki süreçte aktif olarak kullanılan yapıya denir. Git, en yaygın kullanılan versiyon kontrol sistemidir.
Working Directory: Local repositoryde kaynak kodun bulunduğu klasöre verilen isimdir.