-
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ı
7.4 Git Araçları - Çalışmanızı İmzalama
Çalışmanızı İmzalama
Git şifresel olarak güvenlidir, ancak kusursuz değildir. İnternetten başkalarının çalışmasını alıyorsanız ve katkıların gerçekten güvenilir bir kaynaktan geldiğini doğrulamak istiyorsanız, Git’in GPG kullanarak çalışmaları imzalama ve doğrulama için birkaç yöntemi vardır.
GPG (GNU Privacy Guard) Tanıtımı
Öncelikle, herhangi bir şeyi imzalamak istiyorsanız, GPG’yi yapılandırmanız ve kişisel anahtarınızı kurmanız gerekir.
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 2048R/0A46826A 2014-06-04
uid Scott Chacon (Git signing key) <schacon@gmail.com>
sub 2048R/874529A9 2014-06-04
Eğer kurulu bir anahtarınız yoksa, gpg --gen-key
komutuyla bunu oluşturabilirsiniz.
$ gpg --gen-key
Bir şeyleri imzalamak için bir özel anahtarınız olduğunda, bunu kullanması için Git’i user.signingkey
yapılandırma ayarıyla yapılandırabilirsiniz.
$ git config --global user.signingkey 0A46826A
Artık Git, isterseniz etiketleri ve katkıları imzalamak için varsayılan olarak anahtarınızı kullanacaktır.
Etiketleri İmzalama
Eğer bir GPG özel anahtarınız kuruluysa, şimdi bunu yeni etiketleri imzalamak için kullanabilirsiniz.
Yapmanız gereken tek şey -a
yerine -s
kullanmaktır:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
Eğer bu etiket üzerinde git show
komutunu çalıştırırsanız, GPG imzanızın ekli olduğunu görebilirsiniz:
$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:29:41 2014 -0700
my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
=EFTF
-----END PGP SIGNATURE-----
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Etiketleri Doğrulama
İmzalı bir etiketi doğrulamak için, git tag -v <etiket-adı>
komutunu kullanırsınız.
Bu komut, imzayı doğrulamak için GPG kullanır.
Bu işlemi düzgün çalıştırabilmek için imzalayanın genel anahtarını, anahtar halkanızda bulundurmanız gerekir:
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
Eğer imzalayanın genel anahtarına sahip değilseniz, bunun yerine şuna benzer bir çıktı alırsınız:
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
Katkıları İmzalama
Daha yeni Git sürümlerinde (v1.7.9 ve üzeri), artık bireysel katkıları da imzalayabilirsiniz.
Sadece etiketleri değil, katkıları da doğrudan imzalamak istiyorsanız, yapmanız gereken tek şey git commit
komutunuza bir -S
eklemektir.
$ git commit -a -S -m 'signed commit'
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
[master 5c3386c] signed commit
4 files changed, 4 insertions(+), 24 deletions(-)
rewrite Rakefile (100%)
create mode 100644 lib/git.rb
Bu imzaları görmek ve doğrulamak için git log
komutunun --show-signature
seçeneği de bulunmaktadır.
$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun 4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Jun 4 19:49:17 2014 -0700
signed commit
Ayrıca, bulduğu tüm imzaları kontrol etmek ve çıktısında listelemek için`git log` komutunu %G?
formatını kullanarak yapılandırabilirsiniz.
$ git log --pretty="format:%h %G? %aN %s"
5c3386c G Scott Chacon signed commit
ca82a6d N Scott Chacon changed the version number
085bb3b N Scott Chacon removed unnecessary test code
a11bef0 N Scott Chacon first commit
Burada yalnızca en son katkının imzalandığını ve geçerli olduğunu; önceki katkıların imzalanmadığını görebiliyoruz.
Git 1.8.3 ve sonrasında, git merge
ve git pull
komutlarına --verify-signatures
eklenerek, bir katkıyı birleştirirken incelemesi ve güvenilir bir GPG imzası taşımayanları reddetmesi emredilebilir.
Bir dalı birleştirirken bu seçeneği kullanırsanız ve geçerli bir şekilde imzalanmamış taahhütler içeriyorsa, birleştirme işlemi çalışmayacaktır.
$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
Eğer birleştirme yalnızca geçerli imzalanmış katkılar içeriyorsa, birleştirme komutu kontrol ettiği tüm imzaları size gösterecek ve ardından birleştirmeye devam edecektir.
$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
Updating 5c3386c..13ad65e
Fast-forward
README | 2 ++
1 file changed, 2 insertions(+)
git merge
komutuyla sonucunda oluşan bir birleştirme katkısını imzalamak için -S
seçeneğini kullanabilirsiniz.
Aşağıdaki örnek, birleştirilecek dalın her katkısının imzalandığını doğrulamanın yanı sıra, sonuçta oluşan birleştirme katkısını da imzalar.
$ git merge --verify-signatures -S signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
Merge made by the 'recursive' strategy.
README | 2 ++
1 file changed, 2 insertions(+)
Herkesin İmzalaması Gereklidir
Etiket ve katkıları imzalamak harika olsa da, bunu normal iş akışınızda kullanmaya karar verirseniz, ekibinizdeki herkesin bunu nasıl yapacağını anladığından emin olmalısınız. Aksi takdirde, insanların imzalı sürümlerle katkılarını nasıl yeniden yazacaklarını çözmelerine yardımcı olmak için çok zaman harcarsınız. Bu uygulamayı standart iş akışınızın bir parçası olarak benimsemeden önce GPG’yi ve imzanın faydalarını anladığınızdan emin olun.