Git Nedir ve Nasıl Kullanılır?

Ahmet Abdülmecit Özkaya
8 min readMay 17, 2024

--

Git, yazılım geliştirmede pratiklik odaklı bir kaynak kod yönetim sistemidir. Bu sistemlerden önce, kaynak kodlar manuel olarak taşınıyor ve değişen kısımlar seçilerek kod geliştirme işlemi gerçekleştiriliyordu. Ayrıca, bir kod değiştirildiğinde geri dönüş yapmak da oldukça zordu. Bu durumun geliştiriciler için büyük bir çileye dönüştüğü açıktır.

Git, bu sorunların üstesinden gelerek pek çok avantaj sunar. İnternete bağlı olmaksızın dosyaları takip etmemizi sağlar ve kod değişikliklerini kıyaslama, commit girerek yapılan değişiklikleri ve notları kaydetme imkanı tanır. Ana kodumuz “master” olarak adlandırılırken, bunun dışında “branch” adı verilen dallar oluşturarak, ana kodumuz üzerinde bozulmaktan korkmadan değişiklikler yapabiliriz. Ayrıca, branch’ler arasında geçiş yapabilir ve istediğimiz branch’leri master üzerine ekleyebiliriz.

Bunlara ek olarak, GitHub gibi uzak cloud depolama hizmetlerini kullanarak yazdığımız kodları depolayabilir ve diğer geliştiricilerle kolayca paylaşabiliriz. Bu sayede, ekip çalışması ve kodun farklı cihazlar arasında senkronize edilmesi de oldukça kolaylaşır.

Git Yüklemek

Git uygulamasını yüklemek oldukça basittir ve fazla araştırma yapmamıza gerek yoktur. Git’in resmi web sitesinden en güncel sürümü kolayca indirebilirsiniz. İndirme işlemi için aşağıdaki adımları takip edebilirsiniz:

  1. Git’in resmi web sitesine gidin.
  2. Ana sayfada yer alan ‘Download’ butonuna tıklayın.
  3. İşletim sisteminize uygun olan Git sürümünü seçin (Windows, macOS, Linux).
  4. İndirme tamamlandıktan sonra, indirilen dosyayı açarak kurulum sihirbazını takip edin.

Kurulum tamamlandığında, Git’in doğru bir şekilde yüklendiğini kontrol etmek için komut satırında git --version komutunu çalıştırabilirsiniz. Bu komut, yüklü Git sürümünü gösterir ve her şeyin doğru çalıştığını doğrulamanıza yardımcı olur.

https://git-scm.com/downloads

Yükleme tamamlandıktan sonra, gördüğünüz gibi üç farklı isimde program yüklenmiş olacak. Bu programlar, her biri belirli bir işlevi yerine getiren ve birlikte çalışarak sisteminizin performansını ve işlevselliğini artıran uygulamalardır.

Burada bizim için en gerekli olan uygulama, en üstte gördüğünüz Git Bash’tir. Git Bash, bizim için bir terminal açar ve bu terminal, hem Windows PowerShell komutlarını hem de Linux/Mac’te kullandığımız UNIX komutlarını çalıştırabilme yeteneğine sahiptir. Bu yüzden, bu terminali oldukça sık kullanacağız.

Git Bash’i çalıştırdığımızda karşımıza renkli bir pencere açılır. Pencerenin en üstünde, username@desktop_nameşeklinde bir adres görürüz. Bu, oturum açtığımız kullanıcı adı ve bilgisayarın adını gösterir. PUTTY programıyla uzak bilgisayar terminallerine bağlandığımızda da benzer bir adresle karşılaşırız.

Git Bash’in sağladığı terminal, komut satırı işlemlerini kolayca gerçekleştirebilmemizi sağlar. Örneğin, dosya ve dizinleri yönetebilir, Git komutlarını kullanarak kaynak kod depolarını yönetebiliriz. Aynı zamanda, UNIX tabanlı komutlar sayesinde daha güçlü ve esnek işlemler yapabiliriz. Bu özellikler, yazılım geliştirme sürecinde büyük kolaylık sağlar ve verimliliği artırır.

Bu terminalden ls, cd, ls -a, mkdir, rmdir ve touch gibi temel UNIX komutlarını deneyebilirsiniz. Bu komutlar, dosya ve dizin yönetimini kolaylaştırır:

  • ls: Bulunduğunuz dizindeki dosya ve dizinleri listelemek için kullanılır.
  • cd: Farklı bir dizine geçmek için kullanılır. Örneğin, cd Documents komutuyla Documents dizinine geçebilirsiniz.
  • ls -a: Gizli dosyalar da dahil olmak üzere, bulunduğunuz dizindeki tüm dosya ve dizinleri listelemek için kullanılır.
  • mkdir: Yeni bir dizin oluşturmak için kullanılır. Örneğin, mkdir yeni_klasor komutuyla 'yeni_klasor' adında bir dizin oluşturabilirsiniz.
  • rmdir: Boş bir dizini silmek için kullanılır. Örneğin, rmdir eski_klasor komutuyla 'eski_klasor' dizinini silebilirsiniz.
  • touch: Yeni, boş bir dosya oluşturmak veya mevcut bir dosyanın zaman damgasını güncellemek için kullanılır. Örneğin, touch yeni_dosya.txt komutuyla 'yeni_dosya.txt' adında bir dosya oluşturabilirsiniz.

Bu komutları kullanarak UNIX tabanlı sistemlerde dosya ve dizin yönetimi konusunda temel beceriler kazanabilirsiniz.

Git hakkında ve Git’i yükleme süreci hakkında yeterince konuştuk. Şimdi, temel Git komutlarına göz atalım ve bu komutların işlevlerini ayrıntılı olarak inceleyelim.

git init

Git sisteminin değişiklikleri algılayabilmesi ve bu sistemi kullanabilmemiz için, dosya deposunda .git adında gizli bir dizin bulunmalıdır. Bu dizin, Git'in proje içerisindeki tüm değişiklikleri takip edebilmesi için gerekli yapılandırma ve meta verileri barındırır.

.git dizinini oluşturmak için, öncelikle terminal veya komut satırını açarak proje klasörüne cd komutları ile girmeniz gerekir. Proje klasörüne girdikten sonra, git init komutunu çalıştırarak Git'i başlatabilirsiniz. Bu komut, proje dizininin kökünde .git adlı bir alt dizin oluşturur ve Git'i bu proje için başlatır.

git add <file>

Şimdi yapmamız gereken şey, kontrol edeceğimiz dosyayı takip edilenler listesine eklemektir. Bunun için git add <file> komutunu kullanmamız gerekecek. Örneğin, index.c dosyasını takip edilenler listesine eklemek için git add index.c komutunu kullanırız.

Eğer tüm dosyaların takibini yapmak istiyorsak, git add . komutunu kullanırız. Bu komut, bulunduğumuz dizindeki tüm dosyaları takip listesine ekler. Bu şekilde, dizin içindeki tüm dosyalar versiyon kontrolü altında olur ve yapılan değişiklikler kolayca izlenebilir hale gelir.

git add komutunu kullanırken dikkat edilmesi gereken bazı noktalar vardır:

  • Belirli dosyaları eklemek için git add <file> şeklinde dosya adını belirtiriz.
  • Belirli bir dizindeki tüm dosyaları eklemek için git add <directory> komutunu kullanabiliriz.
  • git add . komutu, mevcut dizindeki tüm değişiklikleri ekler, ancak istenmeyen dosyaların da eklenmesine neden olabilir. Bu yüzden, .gitignore dosyasını kullanarak hariç tutulacak dosyaları belirlemek önemlidir.

Bu adımlar sayesinde, kod değişikliklerimizi kolayca takip edebilir ve versiyon kontrol sisteminin tüm avantajlarından faydalanabiliriz.

git diff

Evet, değişiklik yaptık fakat bu değişikliği nereden görebiliriz, nasıl kontrol edebiliriz? diye sorular duyuyor gibiyim. Aradaki farkları görmek için, Git’in ‘diff’ (differences) komutunu kullanabiliriz. Bu komut, dosyalar arasındaki farkları görüntüler.

Örnek olarak, bir boş bir .c uzantılı dosya oluşturmak için 'touch' komutunu kullandım ve bu dosyayı 'index.c' adıyla takip listesine eklemek için 'git add index.c' komutunu kullandık. Daha sonra, 'echo' komutunu kullanarak 'index.c' dosyasına 'merhaba' metnini ekledik. Ardından, 'git diff' komutunu kullandığımızda, dosyanın takip listesine eklenme anı ile şu anki durumu arasındaki farkı gösterir. Bu sayede, neyin değiştiğini ve hangi satırlarda değişiklik olduğunu görebiliriz.

git commit -m “msg”

Commit kelimesi İngilizce’de ‘işlemek’ anlamına gelir. Peki biz neyi işliyoruz? Tabii ki değişiklikleri işliyor ve kaydediyoruz. ‘git commit’ dediğimizde, sadece işlemesini söylüyoruz ve ardından karşımıza garip bir ekran çıkıyor, işlerimiz uzuyor. Bu nedenle, kestirme bir yol olarak ‘-m “mesaj”’ şeklinde yazarak aslında ‘mesaj’ ismiyle işlemek istediğimizi belirtiyoruz ve bizi kestirme yola götürmüş oluyoruz.

Genellikle ilk commit gönderildiğinde ‘First Commit’ yazılır. Ancak commit için yazılan yorumlar çok önemlidir; çünkü zamanla değişikliklerin ne olduğunu açık ve net bir şekilde anlamamızı sağlar. Commit yaptığımızda, bir değişiklikleri onaylamış ve işlemiş oluruz.

git log

Bilgisayarlarda her işlem kaydına log denmektedir. Türkçemizde ise bu kayıtlara genellikle ‘kütük’ adı verilmektedir. Türk Dil Kurumu’na göre, bir arada işlenen ve birbirleriyle ilgili olan kayıtların tümüne verilen addır. Kütük bilgileri genellikle günlük dosyalarına yazılır.

Yazılım geliştirmede ise, Git adlı kaynak kod yönetim sisteminde, yaptığımız işlemleri ve değişiklikleri takip etmek için ‘git log’ komutunu kullanırız. Bu komutla, yapılan commit’leri ve bu commit’lerle ilgili detayları görüntüleyebiliriz. Git log çıktısı, her bir commit’in kim tarafından yapıldığını, ne zaman yapıldığını, yapılan değişiklikleri ve commit’e eklenebilecek notları içerebilir.

git status

Status” zaten İngilizce’de “durum” anlamını vermektedir. Bu komut, çalışma alanımızdaki mevcut durumu gösterir. Hangi branch’te olduğumuzu, hangi dosyaların değiştiğini, hangi dosyaların izlendiğini, hangilerinin takip edilmediğini, hangilerinin çakışma (conflict) durumunda olduğunu ve hangilerinin hazırlık aşamasında olduğunu detaylı bir şekilde gösterir. Bu sayede geliştiriciler, projenin mevcut durumu hakkında hızlı bir şekilde bilgi sahibi olabilir ve gerekli adımları atabilirler.

git push

Push işlemi, yerel bilgisayarımızdaki değişiklikleri, takip ettiğimiz belgeleri “git add” ile belirleyip, daha sonra bu değişiklikleri bir sunucuya, servera veya uzak bilgisayara göndermeyi ifade eder. Bu sistemde, GitHub gibi servisler, gönderim işlemi için kullanılır ve bizim serverımızdır. GitHub üzerinde oluşturduğumuz bir repository (depot) üzerinden çalışırız. Bu repository’nin URL’si, kullanıcı adı ve parolamızı tanımladıktan sonra, “git push” komutuyla yerel değişikliklerimizi GitHub sunucularına göndeririz.

GitHub’da repository oluşturmadan önce bir “destination” (varış noktası) belirtilmediği için, push işlemi gerçekleştirilemez ve hata alınır. Dolayısıyla, GitHub üzerinde bir repository oluşturmak, projemizin merkezi depolama ve işbirliği için bir varış noktası sağlar.

git clone <repository_link>

Bu kod sayesinde, verdiğimiz repository linki kullanılarak bulunduğumuz konuma klonlama işlemi gerçekleştirilir. Eğer daha önce hiç dosya pushlamamışsak, clone işlemi sonucunda boş bir klasör elde ederiz. Bu klasörün içinde “.git” adında bir klasör bulunur. İhtiyaca göre, .git in bulunduğu bu klasörün içine dosyalar atılabilir ve ardından push işlemi gerçekleştirilebilir. Bu şekilde, repository’deki kodlar lokal bilgisayarımıza klonlanarak, üzerlerinde değişiklik yapma ve yeniden gönderme işlemleri kolayca gerçekleştirilebilir.

git pull

Git pull komutu, projenin bulunduğu repository’de çalışan diğer geliştiricilerin yapmış olduğu değişiklikleri kendi projemize entegre etmek için kullanılır. “Pull” kelimesi zaten İngilizce’de “çekmek” anlamına gelir. Bu komut, projenin uzak repository’sinde yapılan değişiklikleri, yerel projemize “çeker” ve yerel projemizin güncel olmasını sağlar. Yani, eğer başka bir geliştirici proje üzerinde değişiklik yapmışsa, bu değişiklikleri kendi projemiz üzerinde uygulayarak senkronize etmemizi sağlar. Bu sayede, ekip içinde yapılan çalışmaların bütünlüğü korunur ve herkesin en son güncellemelere erişimi sağlanır.

git rm <file>

Bir dosyayı yerel depodan kaldırmak için kullanılan bir komuttur. Bu komut, belirtilen dosyayı yerel makinenizden siler ve aynı zamanda git deposundan da dosyanın geçmişiyle birlikte kaldırır.

git rm <dosya_adı> şeklinde kullanılır. Bu komut, dosyayı yerel depodan ve git deposundan kaldırır. Eğer dosyayı yalnızca yerel depodan kaldırmak istiyorsanız, --cached seçeneğini kullanabilirsiniz: git rm --cached <dosya_adı>. Bu sayede dosya yerel depodan silinirken, git deposundan silinmez ve geçmişi korunur.

Dosyayı silmeden önce, dosyanın git depolarındaki geçmişini koruyarak silmek istiyorsanız, git rm komutunu kullanabilirsiniz. Bu, git depolarında dosyanın silindiğini izlemeye devam ederken, yerel depodan dosyayı siler.

git branch

Git sisteminin mantığını bir ağaca benzetebiliriz. Bu ağaçta, gövdeyi temsil eden ana kodumuz “master” olarak adlandırılır. Bunun dışında, geliştirme sürecinde farklı yollar izlememizi sağlayan ve kendi üzerlerinde çalışabileceğimiz “branch” adı verilen dallar oluşturabiliriz.

Yeni bir branch oluşturmak için git branch <branch_ismi> komutunu kullanırız. Bu, mevcut kodu bozmadan yeni özellikler üzerinde çalışmamıza olanak tanır. Ardından, git checkout <branch_ismi> komutuyla oluşturduğumuz branch'e geçiş yapabiliriz. Bu sayede, master dışında farklı bir dalda çalışarak, ana koddaki değişikliklerden etkilenmeden geliştirmemizi sürdürebiliriz.

git chackout <branch_ismi>

Branch’ler arasında geçiş yapmamızı sağlayan komut git checkout <branch> şeklinde kullanılır. Aynı zamanda yeni bir branch oluşturup o branch'e geçiş yapmak için ise git checkout -b <branch_ismi> komutunu kullanırız. -b parametresi, yeni bir branch oluşturulmasını istediğimizi belirtir.

git merge

Branch’lerde çalıştık, tamam. Peki, bu branch’leri ana koda nasıl uygulayacağız? Tabii ki de git merge komutunu kullanarak. Bildiğiniz gibi, "merge" kelimesinin İngilizce'deki anlamı da birleştirmek. Branch'imizi ana koda uygulamak için öncelikle git checkout master komutu ile ana kodun olduğu branch'e geçiyoruz. Ardından git merge <branch_ismi> komutunu kullanarak, çalıştığımız branch'i ana koda entegre ediyoruz. Bu işlem, branch'teki değişikliklerin ana koda aktarılmasını sağlar. Ancak, merge işlemi yapmadan önce geliştirilen kodun test edilmesi ve olası çakışmaların çözülmesi önemlidir.

.gitignore dosyası nedir?

Son olarak .gitignore dosyasından bahsetmek istiyorum. Bu dosya, Git sistemine etki etmemesi gereken dosyaları içerir. Bu dosya genellikle .git klasörünün bulunduğu dizinde bulunmalıdır. .gitignore dosyasındaki kurallara göre, Git belirli dosyaları veya dizinleri görmezden gelir.

Her programlama dili için genellikle önceden hazırlanmış .gitignore şablonları bulunur. Bu şablonlar, o dilde genellikle kullanılan geçici dosyaları, derleme sonuçlarını, veya proje bağımlılıklarını gibi yaygın dosya ve dizinleri içerir. Ancak, ihtiyaçlarımıza göre .gitignore dosyasını özelleştirebilir ve projenin gereksinimlerine uygun hale getirebiliriz.

JavaScript projem için kullandığım hazır .gitignore belgesi

--

--