top of page
  • Yazarın fotoğrafıberilcankutlu

Git ile Versiyon Kontrolü - 2

Bu yazımda repository nasıl oluşturulur bundan kısaca bahsedeceğim. Yazımı Ali Özgür'ün Git101 adlı kitabından ve Scott Chacon ve Ben Straub tarafından yazılan ProGit adlı kitaptan çıkardığım notlarımı toparlayarak yazdım.


Git projesini iki yaklaşımla alabilirsiniz. İlki, var olan bir projeyi ya da dizini alarak Git'e import edebilirsiniz. Yani Şu anda sürüm kontrolü altında olmayan yerel bir dizini alıp Git repository'sine dönüştürebilirsiniz. Ya da başka bir serverdaki var olan Git repository'sini klonlayabilirsiniz.

Her iki durumda da yerel makinenizde çalışmaya hazır bir Git deposuna sahip olursunuz.


Peki repository nedir?

Repository dosyalarınızdaki değişiklikleri ve değişiklikler hakkındaki bilgileri ayrı birer versiyon olarak kayıt eden veri tabanıdır. Bu bilgiler için .git isimli gizli klasöre bakabilirsiniz.


Repository nasıl oluşturulur?

Sürüm kontrolü altında olmayan bir proje dizininiz varsa ve onu Git ile kontrol etmeye başlamak istiyorsanız, önce o projenin dizinine gitmeniz gerekir. Dizine gittiğinizde git init komutunu kullanmalısınız.

*git init komutu ile dosyalarınızı versiyon kontrolüne alarak repository oluşturabiliriz. Bu komut gerekli olan repository dosyalarını içeren bir .git adlı alt dizin oluşturur. Bu noktada projenizde hiçbir şey sürüm kontrolüne girmiş değildir.

Boş bir dizinin aksine mevcut dosyaların sürüm kontrolüne başlamak istiyorsanız dosyaları belirleyip kayıt altına almamızı sağlayan birkaç git komutu yazmamız gerekmektedir.

git add *.c
git add LICENSE
git commit -m 'initial project version'

Var olan bir Git repository'sinin kopyasını almak istiyorsanız git clone kullanmalısınız. Dosyanın bütün versiyonlarını almanızı sağlar.

git clone [url] komutu ile uzaktaki projeyi kendi bilgisayarınıza indirebiliriz. Eğer projenin kopyasını alırken adını değiştirmek istiyorsanız git clone [url] yeniad komutunu yazmanız gerekir. Bu komut hedef dizinin adını istediğini ad yapmanıza olanak sağlar.

Projenin repository'sini oluşturduk ve projede değişiklikler yapmaya başladık.

proje kaydetmek istediğiniz bir duruma her ulaştığında değişiklik yapmaya ve bu değişikliklerin anlık görüntülerini deponuza kaydetmeye başlayacaksınız. Çalışma dizininizdeki her dosya iki durumdan birinde olacak, tracked veya

untracked. Tracked dosyalar modife edilemez, modife edilebilir veya stage edilebilir. Yani tracked dosyalar Git'in bildiği dosyalardır. Untracked dosyalar ise diğer herşeydir. Bir depoyu ilk kez klonladığınızda, Git onları kontrol ettiği ve hiçbir şeyi düzenlemediğiniz için tüm dosyalarınız track edilir ve modife edilemez. Dosyaları düzenlerken Git onları modife edilmiş olarak görür, çünkü onları son commitinizden bu yana değiştirmişsinizdir. Çalışırken bu modife edilmiş dosyaları seçerek stage edersiniz ve bu stage edilmiş değişiklikleri commit edersiniz ve döngü tekrar eder.


Hangi dosyaların hangi durumda olduğunu görmek için git status komutu kullanılır. Bu komut hangi dosyalar silindi/değiştirildi/eklendi bunları gösterir.

Clone komutunun ardından git status kullanırsanız muhtemelen şuna benzer bir çıktı alırsınız.


git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Temiz çalışma dizini track edilmiş ve modife edilmiş dosya olmadığı anlamına gelir. Son olarak komut size hangi dalda olduğunuzu söyler ve sunucu üzerinde aynı daldan ayrılmadığını bildirir.

Daha önce mevcut olmayan yeni bir dosya eklediniz ve git status'u tekrar çalıştırdınız diyelim.

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    yenidosya

nothing added to commit but untracked files present (use "git add" to track)

Yeni eklenen dosya untracked olarak geçti. Untracked basitçe Git'in önceki anlık görüntüde sahip olmadığınız bir dosyayı gördüğü anlamına gelir. Yani commit etmedikçe Git onu untracked file olarak görecektir. Bunu, oluşturulan binary dosyaları veya dahil etmek istemediğiniz diğer dosyaları yanlışlıkla dahil etmeye başlamamanız için yapar. yenidosya'yı dahil etmek için track etmeye başlamamız lazım. Yeni dosyayı tracking'e başlamak için git add komutunu kullanmalıyız. git add komutu, bir dosya veya dizin için bir yol adı alır; bu bir dizinse, komut o dizindeki tüm dosyaları tekrar tekrar ekler.

git add yenidosya

Şimdi git statusu tekrar çalıştıralım:


git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   yenidosya

Artık yenidosya stage edildi.

Halihazırda track edilmiş eskidosya.md adlı dosyayı değiştirir ve git status komutunu yeniden çalıştırırsak:

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   yenidosya

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   eskidosya.md

eskidosya.md dosyası "Changes not staged for commit" adlı bölümün altında görünür. Bu track edilen bir dosyanın çalışılan dizinde modife edildiğini ama stage edilmediğini ifade eder. Stage etmek için git add komutunu çalıştırmalıyız. git add komutu çok amaçlı bir komuttur. Yeni dosyaları track etmek, dosyaları stage etmek ve merge-conflicted dosyaları çözüldü olarak işaretlemek gibi başka şeyler yapmak için kullanılır.


git add eskidosya.md
git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   yenidosya
    modified:   eskidosya.md 

Diyelim ki eskidosya.md adlı dosyaya bir şey daha eklediniz ve commite hazırsınız. git status komutunu tekrar çalıştırdığınızda:


git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   yenidosya
    modified:   eskidosya.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   eskidosya.md 

eskidosya.md hem stage hem de unstage olarak listelendi. Bu Git'in bir dosyayı tam olarak git add komutunu çalıştırdığında stage ediyor demek. Şimdi commit ederseniz eskidosya.md'nin git add komutunu en son çalıştırdığımız zamanki sürümünü commit edecek, çalıştığınız dizinde ekleme yaptığınız son halini değil. Bir dosyayı git add çalıştırdıktan sonra değiştirirseniz, dosyanın en son sürümünü oluşturmak için git add komutunu yeniden çalıştırmanız gerekir


git status oldukça kapsamlı bir çıktı veriyor, daha kompakt bir çıktı görmek isterseniz git status --short veya git status -s komutunu çalıştırmalısınız. Track dilmeyen yeni dosyaların ?? , staging area'ya eklenen yeni dosyaların A harfi, modife edilen dosyaların M harfi vb. vardır. Çıktıda iki sütun vardır — soldaki sütun staging area'nın durumunu, sağdaki sütun ise çalışma ağacının durumunu gösterir.





Comments


bottom of page