Git
Chapters ▾ 2nd Edition

7.2 Git Tools - Etkileşimli İzlemleme (Staging)

Etkileşimli İzlemleme (Staging)

Bu bölümde, belirli karmaları ve dosya parçalarını içerecek şekilde katkılarınızı hazırlamanıza yardımcı olabilecek birkaç etkileşimli Git komutunu göreceksiniz. Bu araçlar, birçok dosyayı büyük ölçüde değiştirip, daha sonra bu değişikliklerin kocaman ve karışık tek bir katkı yerine, her biri odaklanmış birkaç farklı katkıya bölünmesini istediğinizde yardımcı olur. Böylece, katkılarınızın mantıksal olarak ayrı değişiklik setleri olduğundan emin olabilirsiniz ve sizinle çalışan geliştiriciler tarafından kolayca incelenebilirler.

git add komutunu -i veya --interactive seçeneğiyle çalıştırırsanız, Git etkileşimli bir kabuk moduna girer ve şuna benzer bir şey görüntüler:

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now>

Bu komut, muhtemelen alışık olduğunuzdan çok farklı bir şekilde izlem alanınızı görüntüler: temelde, git status ile aynı bilgileri alırsınız, ancak biraz daha özlü ve bilgilendiricidir. Sol tarafta izleme aldığınız değişiklikleri, sağ tarafta ise izleme alınmamış değişiklikleri listeleyerek, size gösterir.

Bunun ardından bir "Commands" (Komutlar) bölümü gelir. Bu bölüm size; dosyaları izleme alma ve izlemden kaldırma, dosyanın parçalarını izleme alma, izlenmeyen dosyaları ekleme ve izlemdeki dosyaların ne olduğunu görüntüleme gibi birçok şey yapmanıza olanak tanır.

Dosyaları İzleme Alma ve İzlemden Çıkarma

What now> sorusunda (güncelleme için) u veya 2 yazarsanız, hangi dosyaları izlemlemek istediğinizi seçmeniz istenir:

What now> u
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

TODO ve index.html dosyalarını izleme almak için numaralarını yazabilirsiniz:

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Her dosyanın yanındaki *, dosyanın izleme konacağı anlamına gelir. Update>> sorusuna bir şey yazmadan Enter tuşuna bastığınızda, Git seçilen her şeyi alır ve sizin için izleme ekler:

Update>>
updated 2 paths

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Şimdi TODO ve index.html dosyalarının izleme alındığını ve simplegit.rb dosyasının hala izleme alınmadığını görebilirsiniz. Bu noktada TODO dosyasını izlemlemek istemiyorsanız, r veya geri almak için (revert) 3 seçeneğini kullanabilirsiniz:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path

Tekrar Git durumunuza baktığınızda, TODO dosyasını izleme alınmadığını görebilirsiniz:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

İzleme aldığınız değişikliklerin farkını (diff) görmek için d veya 6 (diff için) komutunu kullanabilirsiniz. Bu, izlemlediğiniz dosyaların bir listesini gösterir ve izlemlenenlerin farkını görmek istediğiniz dosyaları seçebilirsiniz. Bu, komut satırına git diff --cached yazmak gibidir:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> d
           staged     unstaged path
  1:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script type="text/javascript">

Bu temel komutlarla, etkileşimli ekleme modunu kullanarak izleme alanınızla biraz daha kolayca başa çıkabilirsiniz.

Yamaları İzlemlemek

Git’in belirli dosya parçalarını izlemlemesi ve geri kalanını izlemlememesi de mümkündür. Örneğin, simplegit.rb dosyanızda iki değişiklik yaparsanız ve bunlardan birini izlemlemek isteyip, diğerini istemezseniz, bunu Git’te çok kolayca yapabilirsiniz. Önceki bölümde açıklanan aynı etkileşimli komuttan, p veya yama için 5 tuşlarını yazın. Git, kısmen izlemlemek istediğiniz dosyaları soracaktır; ardından, seçilen dosyaların her bölümü için dosya farklarının parçalarını gösterecek ve bunları tek tek izlemlemek isteyip istemediğinizi soracaktır:

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?

Bu noktada birçok seçeneğiniz var. ? yazmak size yapabileceklerinizin bir listesini gösterir:

Bu parçayı izlemlemek ister misiniz? [y,n,a,d,/,j,J,g,e,?]
y - parçayı izleme al
n - parçayı izleme alma
a - bu parçayı ve klasördeki tüm diğer parçaları izleme al
d - du parçayı ve klasördeki hiçbir parçayı izleme alma
g - gitmek için bir parça seç
/ - verilen regex'e (düzenli ifade) uyan parçayı ara
j - bu parçayı karar verilmemiş olarak işaretleyip sıradaki karar verilmemiş parçaya geç
J - bu parçayı karar verilmemiş olarak işaretleyip sıradaki parçaya geç
k - bu parçayı karar verilmemiş olarak işaretleyip bir önceki karar verilmemiş parçaya dön
K - bu parçayı karar verilmemiş olarak işaretleyip bir önceki parçaya dön
s - bu parçayı daha küçük parçalara ayır
e - bu parçayı manuel olarak düzenle
? - yardım ekranını yazdır

Genellikle, her parçayı izleme almak istiyorsanız y veya n tuşlarına basarsınız, ancak belirli dosyalardaki tüm parçaları izlemlemek veya bir parça kararını daha sonra ertelemek de yardımcı olabilir. Dosyanın bir kısmını izlemleyip diğer kısmını izlemlememeniz durumunda, durum çıktınız şuna benzer olacaktır:

What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb

simplegit.rb dosyasının durumu ilginçtir. Size birkaç satırın izleme alındığını ve birkaçının izlemlenmediğini gösterir. Bu dosyayı kısmen izlemlediniz. Bu noktada, etkileşimli ekleme komutundan çıkış yapabilir ve kısmen izleme alınmış dosyaları katkı olarak işlemek için git commit komutunu çalıştırabilirsiniz.

Bunun yanında, kısmi dosya izlemlemesi yapmak için etkileşimli ekleme modunda olmanıza gerek yoktur - aynı betikte git add -p veya git add --patch komutunu kullanarak bu betiği başlatabilirsiniz.

Ayrıca, dosyaları kısmen sıfırlamak için git reset --patch komutunu, dosyaların parçalarını kontrol etmek için git checkout --patch komutunu ve dosyaların parçalarını gizlemek için git stash save --patch komutunu kullanabilirsiniz. Bu komutların daha gelişmiş kullanımlarına geçtiğimizde, her biri hakkında daha fazla ayrıntıya gireceğiz.

scroll-to-top