GİT Notları 101
GIT Bash ile GIT Temel Komutları
GIT temel komutlarını kullanabilmek için Mac OS X'de Terminal uygulamasını, Windows'da ise GIT Bash'i açarak aşağıdaki komutları çalıştırmanız gerekir.
GIT Temel Komutları
Başlıca bilmemiz gereken bazı terimler;
- untracked (izlenmeyen): GIT tarafından henüz takip edilmeyen, yani yeni oluşturulmuş dosyaları ifade eder.
- unstaged (hazırlanmamış): Güncellenmiş ancak commit’lenmek için hazırlanmamış dosyaları ifade eder.
- staged (hazırlanmış): Commit’lenmeye hazır olan dosyaları ifade eder.
- deleted (silinmiş): Projeden silinmiş ama GIT üzerinden kaldırılmamış dosyaları ifade eder.
git init
Henüz versiyon kontrolü altında olmayan bir projenin dizininde, boş bir git deposu oluşturmak için kullanılır.
$ git init
git config
GIT’in bir çok konfigürasyon ve ayarı vardır, bunlardan ikisi user.name ve user.email olanıdır. Bu ayarları yapılandırmak için aşağıdaki komutları kullanırız. GIT'i ilk kurduğumuzda genellikle aldığımız ilk hata bu configurasyon ayarlarını yapmadığımız için gelir. Burada yazdığınız isim ve email ileride GitHub benzeri bir plat forma commit attığınızda da görüneceği için bunu bilerek isimlendirme yapmak yararlı olur. Ayrıca görüldüğü gibi bu ayarlar --global
yani sistem genelinde geçerli ayarlardır. Proje bazlı bu ayarları değiştirebiliriz.
$ git config --global user.name "Name Surname"
$ git config --global user.email "test@email.com"
Bu ayarların bütününü görüntülemek için:
$ git config --list
Not: Eğer windows işletim sistemi kullanıyorsanız, böyle bir hata ile karşılaşabilirsiniz.
warning: LF will be replaced by CRLF in kaynak/dosya/yolu
Bu hatanın çözümü için aşağıdaki komutu kullanabilirsiniz.
$ git config core.autocrlf true
git add
Yeni eklenen veya üzerinde değişiklik yapılan dosyaları staged ortamına göndermek için kullanılır.
$ git add <dosya veya klasor_name>
Tek seferde bütün dosyaları eklemek için ise:
$ git add . veya $ git add * veya $ git add -A .
Buradaki -A
(all) tümü anlamındadır. .
ise tüm dosya uzantılarını ifade eder.
git rm
Staged ortamına eklenmiş bir dosyanın takibinin bırakılması yani untracked (izlenmeyen) hale getirilmesi sağlayan komuttur.
$ git rm --cached <dosya veya klasor_name>
Dosyayı klasörden silmek istiyorsak eğer, aşağıdaki komutu kullanılırız.
$ git rm <dosya veya klasor_name>
git status
Üzerinde çalışılan projenin o anki durumu hakkında bilgi verir. Yapılan değişiklikler, eklenen ve silinen dosyalar gibi bilgiler listelenir.
$ git status
- On branch main -> Main branch'ınde olduğumuzu,
- Changes to be commited -> Commit'lenmeye hazır değişiklikler olduğunu,
- Modified: index.html -> Index.html dosyasında değişiklik yaptığımızı,
- Deleted: styles.css -> styles.css dosyasını sildiğimizi,
- Changes not staged for commit -> Üzerinde değişiklik yapılan ama staged ortamına gönderilmemiş dosyaları ifade eder.
- Untracked files -> takibi yapılmayan dosyaları ifade eder.
git commit
Commit, staged ortamına alınan dosyaların Local Repository’e gönderilmesidir. En iyi uygulama yöntemi her kayıt sırasında yapılan değişiklikleri açıklayıcı bir mesaj eklemektir. Ayrıca her commit benzersiz bir kimliğe (unique ID) sahip olur. Bu sayede eski bir commit'e geri dönebilirsiniz ve herhangi bir kayıp yaşama ihtimaliniz kalmaz.
$ git commit -m "ilk commit mesajı"
- Buradaki -m (message) mesaj anlamındadır.
git log
Projedeki commit geçmişini görüntülememizi sağlar. Bütün commit'ler, id'si, yazarı, tarihi ve mesajı ile beraber listelenir.
$ git log
git branch
Local veya remote repository üzerinde yeni bir branch (dal) eklemek, silmek veya listelemek için kullanılır.
Projenize yeni bir branch eklemek için;
$ git branch <branch_name>
*Tüm uzak ve yerel branch'lari listelemek için;
$ git branch -a
Bir branch'ı silmek için;
$ git branch -d <branch_name>
git checkout
Branch’ler arası veya commit'ler arası geçiş yapmak istediğimizde kullanılır.
Mevcutta var olan branch'a geçiş yapmak için;
$ git checkout <branch_name>
Yeni bir branch oluşturup, bu branch'a geçiş yapmak için;
$ git checkout -b <branch_name>
Commitler arası geçiş yapmak için: (Eski bir versiyona dönmek istediğimiz zaman)
$ git checkout <commit_ID>
git merge
Başka bir branch'da olan değişiklikleri, bulunduğumuz branch ile birleştirmek istediğimizde kullanılır.
$ git merge <branch_name>
git clone
Mevcut bir Remote Repository'de bulunan dosyaların bilgisayarımızda bir kopyasının oluşturulmasını sağlar.
$ git clone <remote_URL>
git push
Projemizde aldığımız commit'leri, remote repository'e gönderir.
$ git push origin master
Burada bahsi geçen origin
remote repository’nin kök dizinini belirtir ve sabit bir isimdir. master
ise sizin çalıştığınız branch (dal)’ı belirtir.
Henüz remote repository’niz yoksa aşağıdaki komut ile local deponuzu uzak sunucudaki depoya bağlayabilirsiniz.
$ git remote add origin http://uzak_deponun_adresi.git
git diff
Repository üzerinde yapılan değişikliklerden sonra dosyalar arasında oluşan farklılıkları göterir.
Çalışma dizini ile repository (HEAD) arasındaki farklılıkları görmek için:
$ git diff HEAD
**İki commit arasındaki farklılıkları görmek için:
$ git diff <commit_id_1>..<commit_id_2>
Çalışma dizini ve staged ortamı arasındaki farkları görmek için:
$ git diff --staged
Kaynaklar
- https://medium.com/fedeveloper/git-bash-ile-komut-komut-versiyonlama-a354efd3063f
- https://www.jrebel.com/blog/git-cheat-sheet
- http://guides.beanstalkapp.com/version-control/common-git-commands.html
.gitignore Dosyası Ne İşe Yarar? Nasıl Kullanırız?
.gitignore
dosyası projemizin kök dizinine oluşturulan düz bir metin dosyasıdır. Adından anlaşıldığı gibi diyor ki beni göz ardı et. Daha doğrusu göz ardı etmek istediğin, local çalışma alanındaki takip edilmesini istemediğin, takım arkadaşların için gerekmeyen dosyaların varsa veya bu dosyaların boyutu reponuza atmanıza gerek olmayacak kadar büyük ölçekli ise buyur beni kullan diyor.
Gel bu dosyaları .gitignore
dosyasına koy ki GIT de senin bu dosyalarını artık takip etmesin. Üstelik bu işlemler yapılırken senin halihazırdaki dosyalarını da hiç bir şekilde etkilemesin. Daha ne olsun!
Peki nedir bu tür dosyalar ?
- Paket yöneticisinden indirilen bağımlılıklar,
- image ve video dosyalarınız(dosya boyutları çok fazla olabilir)
- IDE eklentileri( örneğin
.vscode
) - Sadece kendi çalışma alanınızda olması gereken başkaları tarafından görülmemesi gereken dosyalarınız (veritabanınıza ilişkin konfigürasyonlar)
- API anahtarları, kimlik bilgileri veya hassas bilgiler içeren dosyalar(.env)
- Çalışma dizinizdeki geçici dosyalar
- Log dosyaları
- Yararsız sistem dosyaları (örneğin MacOS işletim sisteminin
.DS_Store
dosyası ) dist
gibi oluşturulan dosyalar- Veya herhangi bir dosyanız da olabilir.
Nasıl oluşturulur?
Reponuzu oluştururken verilen seçeneklerde add gitignore file dosyasına tıklayarak reponuzla beraber oluşturabilirsiniz. Aynı şekilde editörünüzde .gitignore
şeklinde de oluşturabilirsiniz.
Yok ben terminal aşığıyım diyorsanız da buyrun :)
Proje dizininize cd komutu ile gelerek **MacOS /Unix için; **
$ touch .gitignore
Windows için;
$ echo some-text or nothing > .gitignore
şeklindeki komutlarla dosyanızı komut satırından oluşturabilirsiniz. Buradaki some-text or nothing
kısmı .gitignore
dosyasına yazılmasını istediğiniz metini ekler. Hiçbir şey de yazmayabilirsiniz.
Nasıl çalışır, nasıl kullanılmalı?
.gitignore
dosyasının her satırına takip edilmesini istemediğimiz dosyaları veya dizinleri yazarak göz ardı edebiliriz.
Tabii bu dosyaları yazarken bize kolaylık sağlayan bazı formatlar var. İşte onlar:
.env
- Dizinleri ise klasörün sonuna `/` işareti ekleyerek belirtiriz.
node-modules/ dist/ logs/
- `*` yıldız karakteriyle ise belirtilen ilk örnekte `.log` uzantısına sahip dosyaların tümünü, ikinci örnekte ise `files` klasör içerisindeki bütün dosyaları izlemeyi bırakacaktır.
.log files/
- Eğer ki bir klasörümüzü içerisindeki bir dosya haricinde izlenmesini istemiyorsak `!` işareti ile bunu sağlayabiliriz. Bu örnekte `files` klasörü içerisindeki `example.txt` haricindeki dosyalar izlenmeyecektir. Files klasörü içerisindeki sadece **example.txt** git akışında görülecektir.
!files/example.txt
- Yukarıdaki örnekte dikkat edilmesi gereken önemli bir ayrıntıyı açıklayacak olursak eğer ki daha öncesinde `files` klasörü `.gitignore` dosyasına eklenmişse sonrasında ise `!` içerisindeki dosya ile işlem yapmak işe **yaramayacaktır.**
files/ !files/example.txt
- `.gitignore` dosyasında yorum satırı oluşturmak için ise `#` karakteri kullanılır.
production
/build
dependencies
/node_modules
Kullanımından da bahsettiğimize göre gelelim dikkat edilmesi gereken hususlara...
## Neye dikkat etmeliyim?
- Eğer projenizi `git add .` veya `git commit ` etmişseniz sonrasında `.gitignore` dosyasına eklemek istediğiniz dosyayı ekleseniz de bu işlem gerçekleşmeyecektir ve o dosyanız reponuzda hala GIT ile takip edilecektir. Tabi her şeyin bir çözümü olduğu gibi bu sorunu da çözmenin bir yolu var. İşte o çözüm .
```bash
$ git rm --cached FILENAME
- Hani olur da derseniz ben belli dosyalarımı her seferinde
.gitignore
dosyasına eklemek istemiyorum bunu tek seferde halledebilir miyim ? Tabii ki buna da bir çözüm bulmuş GIT babamız :)
Burada kastımız başka başka projeler için her seferinde eklememek.
- Windows kullanıcısı iseniz
C:\Users\{myusername}\
adresine giderek.gitignore_global
dosyası oluşturup içerisine global olmasını istediğiniz dosyaları ekledikten sonra git bash terminalinizi açarak aşağıdakı komut ile konfigürasyon sağlayabilirsiniz.
$ git config --global core.excludesfile "%USERPROFILE%\.gitignore"
- Dosyanızın doğru çalıştığını kontrol etmek için ise aşağıdaki komutu çalıştırarak aşağıdaki çıktıyı aldığınızda sorunsuz çalıştırabilmişsinizdir. (Aşağıdaki kodu kopyala yapıştır yapmadan önce kullanıcı adını değiştirin.)
$ git config --global core.excludesfile
> C:/Users/user-name/.gitignore_global
- Son olarak hangi
.gitignore
dosyalarını eklemeliyim derseniz buradan hangi dil, framework vs kullanıyorsanız ona ait.gitignore
dosyalarını bulabilirsiniz. Global olarak düzenlemek istediğiniz.gitignore
dosyalarına da buradan erişebilirsiniz.
Yorumlar