-
1. Başlangıç
- 1.1 Sürüm Denetimi
- 1.2 Git’in Kısa Tarihçesi
- 1.3 Git Nedir?
- 1.4 Komut Satırı
- 1.5 Git’i Yüklemek
- 1.6 Git’i İlk Defa Kurmak
- 1.7 Yardım Almak
- 1.8 Özet
-
2. Git Temelleri
-
3. Git Dalları
- 3.1 Dallar
- 3.2 Kısaca Dallandırma ve Birleştirme Temelleri
- 3.3 Dal Yönetimi
- 3.4 İş Akışı Dallandırması
- 3.5 Uzak Dallar
- 3.6 Yeniden Temelleme (rebase)
- 3.7 Özet
-
4. Bir Sunucuda Git Kurma
- 4.1 İletişim Kuralları (Protocols)
- 4.2 Bir Sunucuda Git Kurma
- 4.3 SSH Ortak Anahtarınızı Oluşturma
- 4.4 Sunucu Kurma
- 4.5 Git Cini (Daemon)
- 4.6 Akıllı HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Taraf Barındırma (Hosting) Seçenekleri
- 4.10 Özet
-
5. Dağıtık Git
- 5.1 Dağıtık İş Akışları
- 5.2 Projenin Gelişiminde Rol Almak
- 5.3 Bir Projeyi Yürütme
- 5.4 Özet
-
6. GitHub
- 6.1 Bir Projeye Katkıda Bulunmak
- 6.2 Proje Bakımı
- 6.3 Kurumsal Yönetim
- 6.4 GitHub’ı otomatikleştirme
- 6.5 Özet
-
7. Git Araçları
- 7.1 Düzeltme Seçimi
- 7.2 Etkileşimli İzlemleme (Staging)
- 7.3 Saklama ve Silme
- 7.4 Çalışmanızı İmzalama
- 7.5 Arama
- 7.6 Geçmişi Yeniden Yazma
- 7.7 Reset Komutunun Gizemleri
- 7.8 İleri Seviye Birleştirme
- 7.9 Rerere
- 7.10 Git’le Hata Ayıklama
- 7.11 Alt Modüller
- 7.12 Demetleme (Bundling)
- 7.13 Git Nesnesini Değiştirme
- 7.14 Kimlik Bilgisi Depolama
- 7.15 Özet
-
8. Git’i Özelleştirmek
- 8.1 Git Yapılandırması
- 8.2 Git Nitelikleri
- 8.3 Git Kancaları (Hooks)
- 8.4 Bir Örnek: Mecburi Git Politikası
- 8.5 Özet
-
9. Git ve Diğer Sistemler
- 9.1 İstemci Olarak Git
- 9.2 Git’e Geçiş
- 9.3 Özet
-
10. Dahili Git Ögeleri
- 10.1 Tesisat ve Döşeme (Plumbing ve Porcelain)
- 10.2 Git Nesneleri
- 10.3 Git Referansları
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protokolleri
- 10.7 Bakım ve Veri Kurtarma
- 10.8 Ortam Değişkenleri
- 10.9 Özet
-
A1. Ek bölüm A: Diğer Ortamlarda Git
- A1.1 Görsel Arayüzler
- A1.2 Visual Studio ile Git
- A1.3 Visual Studio Code ile Git
- A1.4 Eclipse ile Git
- A1.5 Sublime Text ile Git
- A1.6 Bash ile Git
- A1.7 Zsh ile Git
- A1.8 PowerShell ile Git
- A1.9 Özet
-
A2. Ek bölüm B: Git’i Uygulamalarınıza Gömmek
- A2.1 Git Komut Satırı
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Komutları
- A3.1 Kurulum ve Yapılandırma Komutları
- A3.2 Proje Oluşturma Komutları
- A3.3 Kısaca Poz (Snapshot) Alma
- A3.4 Dallandırma ve Birleştirme Komutları
- A3.5 Projeleri Paylaşma ve Güncelleme Komutları
- A3.6 İnceleme ve Karşılaştırma Komutları
- A3.7 Hata Ayıklama (Debugging) Komutları
- A3.8 Yamalama (Patching)
- A3.9 E-Posta Komutları
- A3.10 Harici Sistemler
- A3.11 Yönetim
- A3.12 Tesisat (Plumbing) Komutları
2.3 Git Temelleri - Katkı Geçmişini Görüntüleme
Katkı Geçmişini Görüntüleme
Birkaç katkı işledikten veya halihazırda katkı geçmişine sahip bir repoyu kopyaladıktan sonra muhtemelen neler olup bittiğini görmek için kod geçmişine bakmak isteyeceksiniz.
Bunu yapmanın en temel ve güçlü aracı git log
komutudur.
Bu örneklerde ``simplegit`` adı verilen çok basit bir proje kullanılmaktadır. Projenin bir kopyasını elde etmek için aşağıdaki komutu çalıştırın:
$ git clone https://github.com/schacon/simplegit-progit
Bu projede git log
komutunu çalıştırdığınızda, şuna benzer bir çıktı almanız beklenir:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
Hiçbir argüman almadan kullanılan git log
komutu, varsayılan olarak bu repoda yapılan katkıları ters kronolojik sırayla listeler (Yani en son katkı en üstte görünür).
Gördüğünüz gibi, bu komut her bir işlemi SHA-1 kimliği, geliştiricinin adı ve e-postası, katkı tarihi ve mesajıyla birlikte listeler.
Tam olarak aradığınızı bulabilmeniz için git log
komutuna ilişkin çok sayıda ve çeşitli seçenekler mevcuttur.
Burada size en popüler olanlardan bazılarını göstereceğiz.
Kullanışlı seçeneklerden biri, her bir katkıda ortaya çıkan farkı (the patch output) gösteren -p
veya `--patch`tir.
Ayrıca yalnızca en son 5 katkıyı görmek için -5 kullanmak gibi.
Görüntülenecek günlük katkı sayısını da sınırlayabilirsiniz.
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
Bu seçenek aynı bilgileri ancak her bir katkıyla yapılan değişikliklerle birlikte görüntüler.
Bu yöntem, kod incelemesi veya bir ortak çalışanın eklediği bir dizi katkı sırasında neler olduğuna hızlı bir şekilde göz atmak için oldukça faydalıdır.
Ayrıca git log
ile bir dizi özetleme seçeneğini de kullanabilirsiniz.
Örneğin, her bir katkı işlemine ilişkin bazı kısaltılmış istatistikleri görmek istiyorsanız --stat
seçeneğini kullanabilirsiniz:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Gördüğünüz gibi, --stat
seçeneği her bir katkı girişinin altında değiştirilen dosyaların listesini, kaç dosyanın değiştirildiğini ve bu dosyalara kaç satırın eklendiğini ve kaldırıldığını yazdırır.
Ayrıca en sona bilgilerin bir özetini de koyar.
Bir diğer kullanışlı seçenek ise --pretty`dir.
Bu seçenek, günlük çıktısını varsayılanın dışındaki formatlara çevirir.
Kullanmanız için önceden oluşturulmuş birkaç seçenek mevcuttur.
`oneline
seçeneği her bir katkıyı tek bir satıra yazdırır (eğer çok sayıda katkıya bakıyorsanız özellikle kullanışlıdır).
Ek olarak, short
(kısa), full
(tam), ve fuller
(tastamam) seçenekleri çıktıyı aşağı yukarı aynı şekilde ancak daha az veya daha fazla bilgiyle gösterir.
Sırasıyla:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
En ilginç seçenek, kendi günlük çıktı formatınızı belirlemenize olanak tanıyan format
'tır.
Bu, özellikle makine ayrıştırması için çıktı oluşturduğunuzda kullanışlıdır.
Biçimi açıkça belirttiğiniz için Git’teki güncellemelerle değişmeyeceğini bilirsiniz.
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
Kullanışlı git log --pretty=format
seçenekleri format
'ın gerektirdiği daha kullanışlı seçeneklerden bazılarını listeler.
Seçenek | Çıktı Tanımı |
---|---|
|
katkı hash kimliği |
|
katkı hash kimliği (kısa) |
|
Çalışma ağacı hash kimliği |
|
Çalışma ağacı hash kimliği (kısa) |
|
Ana hashler |
|
Ana hashler (kısa) |
|
Yazar adı |
|
Yazar e-posta adresi |
|
Yazım tarihi (--date=option) |
|
Yazım tarihi, göreli |
|
Geliştirici adı |
|
Geliştirici e-posta adresi |
|
Geliştirme tarihi |
|
Geliştirme tarihi, göreli |
|
Konu |
yazar ve geliştirici arasındaki farkın ne olduğunu merak ediyor olabilirsiniz. Yazar, kodu ilk yazan kişi, geliştirici ise kodu son değiştiren yani katkılayan kişidir. Yani, bir projeye bir yama gönderirseniz ve çekirdek üyelerden biri yamayı uygularsa, her ikiniz de kredi alırsınız (yazar olarak siz ve katkılayan olarak çekirdek üye). Bu ayrımı Dağıtık Git bölümünde biraz daha ele alacağız.
Bu, oneline
ve format
seçenekleri --graph
adı verilen başka bir log
seçeneğiyle birlikte kullanıldığında özellikle kullanışlıdır.
Bu seçenek çıktıya, dallanma ve birleştirme geçmişinizi gösteren küçük bir ASCII grafiği ekler:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Bir sonraki bölümde dallanma ve birleştirme işlemlerine geçtikçe bu tür çıktılar daha ilginç hale gelecektir.
Bunlar git log
için yalnızca bazı basit çıktı biçimlendirme seçenekleridir fakat çok daha fazlası vardır.
Yaygın git log
seçenekleri şu ana kadar ele aldığımız seçeneklerin yanı sıra faydalı olabilecek diğer bazı yaygın biçimlendirme seçeneklerini ve bunların log
komutunun çıktısını nasıl değiştirdiklerini listeler.
Seçenek | Tanım |
---|---|
|
Her bir katkıda tanıtılan yamayı göster |
|
Her katkıda değiştirilen dosyalara ilişkin istatistikleri göster |
|
--stat komutundan yalnızca değiştirilen/eklenenler/silenler satırını göster |
|
katkı bilgisinden sonra değiştirilen dosyaların listesini göster |
|
Eklenen/değiştirilen/silinmiş bilgilerle birlikte değiştirilen dosyaların listesini de göster |
|
SHA-1 kimliğinin tüm 40 karakteri yerine sadece ilk bir kaç karakterini göster |
|
Tarihi, tam tarih biçimini kullanmak yerine göreli bir biçimde göster (ör. ``2 hafta önce``) |
|
Günlük (log) çıktısının yanında dal ve birleştirme geçmişinin ASCII grafiğini de göster |
|
Katkıları alternatif bir formatta göster. Seçenekler arasında tek satırlı (oneline), kısa (short), tam (full), daha kapsamlı (fuller) ve kendi oluşturduğunuz format da yer alır. |
|
|
Günlük (Log) Çıktısını Sınırlama
git log
çıktı biçimlendirme seçeneklerine ek olarak, bir dizi yararlı sınırlama seçeneğini de beraberinde getirir.
Bu katkıların yalnızca belli bir alt kümesini göstermenize izin veren seçeneklerdir.
Böyle bir seçeneği zaten gördünüz: yalnızca son iki işlemi görüntüleyen -2 seçeneği.
Aslında, -<n>
işlemini yapabilirsiniz, buradaki -n
, en son yapılan n
sayıdaki katkıyı gösteren herhangi bir tam sayıdır.
Gerçekte, bunu sık kullanmanız pek mümkün değildir, çünkü Git varsayılan olarak tüm çıktıları bir "pager" (sayfa düzenleyici) üzerinden yönlendirir ve böylece bir kerede yalnızca bir sayfalık günlük çıktısı görürsünüz.
Yine de, --since
ve --until
gibi zaman sınırlayıcı seçenekler çok kullanışlıdır.
Örneğin, aşağıdaki komut son iki hafta içinde yapılan katkıların listesini yazdırır:
$ git log --since=2.weeks
Bu komut birçok formatla çalışır: "2008-01-15" gibi belirli bir tarih veya "2 yıl 1 gün 3 dakika önce" gibi göreli bir tarih belirtebilirsiniz.
Listeyi, bazı arama kriterleriyle eşleşen katkılara göre de süzebilirsiniz.
--author
seçeneği belirli bir yazara göre süzmenizi sağlar ve --grep
seçeneği katkı mesajlarındaki anahtar kelimeleri aramanızı sağlar.
Not
|
Hem |
Gerçekten faydalı bir diğer süzgeç (filter) ise bir dize (string) alan ve yalnızca o dizenin oluşum sayısını değiştiren katkıları gösteren -S
seçeneğidir (yazılımcılar arasında Git’in "kazma" seçeneği olarak anılır).
Örneğin, belirli bir işleve referans ekleyen veya kaldıran son katkıyı bulmak istiyorsanız şunu arayabilirsiniz:
$ git log -S function_name
git log
komutuna süzme argümanı olarak yazabileceğimiz son faydalı seçenek ise dosya yoludur (path).
Eğer bir dizin veya dosya adı belirtirseniz günlük çıktısını, bu dosyalarda değişiklik yapan katkılarla sınırlayabilirsiniz.
Bu her zaman son seçenektir ve dosya yollarını seçeneklerden (bayraklardan) ayırmak için genellikle önünde çift çizgi (--
) bulunur.
git log
komutunun çıktılarını sınırlama seçeneği bölümünde bunları ve diğer birkaç genel seçeneği örnek olması açısından listeleyeceğiz.
Seçenek | Tanım |
---|---|
|
Sadece en son n sayıdaki katkıyı göster |
|
Katkı listesini belirli bir tarihten sonra yapılan katkılarla sınırla |
|
Katkı listesini belirli bir tarihe kadar yapılan katkılarla sınırla |
|
Sadece yazar (author) kısmı, verilen dizeyle eşleşen katkıları göster |
|
Sadece geliştirici (committer) kısmı, verilen dizeyle eşleşen katkıları göster |
|
Sadece katkı mesajında, girilen dize bulunan katkıları göster |
|
Sadece kodda verilen dizeyi ekleyen veya çıkaran katkıları göster |
Örneğin, Git kaynak kodu geçmişindeki test dosyalarını değiştiren hangi katkıların Ekim 2008 ayında Junio Hamano tarafından işlendiğini ve birleştirme katkıları olmadığını görmek istiyorsanız, şöyle bir komut çalıştırabilirsiniz:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Bu komutla, Git kaynak kodu geçmişindeki yaklaşık 40.000 katkıdan, bu kıstaslara uyan sadece 6’sını görebilirsiniz.
İpucu
|
Birleştirme katkılarının gösterilmesini engelleme
Reponuzda kullanılan iş akışına bağlı olarak, günlük geçmişinizdeki katkıların büyük bir yüzdesinin yalnızca birleştirme katkıları olması mümkündür ve bunlar genellikle pek bilgilendirici değildir.
Birleştirme işlemlerinin görüntülenmesinin, günlük geçmişinizi karmaşık hale getirmesini önlemek için, |