-
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.5 Git Temelleri - Uzak Repo ile Çalışmak
Uzak Repo ile Çalışmak
Herhangi bir Git projesinde işbirliği yapabilmek için uzak repolarınızı nasıl yöneteceğinizi bilmeniz gerekir. Uzak repolar, projenizin İnternette veya ağda bir yerde barındırılan sürümleridir. Bunlardan birkaçına sahip olabilirsiniz. Bunların her biri genellikle sizin için salt okunur veya okuma/yazma erişimlidir. Başkalarıyla işbirliği yapmak, bu uzak repoları yönetmeyi ve işlerinizi paylaşmanız gerektiğinde verileri bu havuzlara gönderip almayı içerir. Uzak repoların yönetilmesi; uzak repoların nasıl ekleneceğini, artık geçerli olmayan uzak sunucuların nasıl kaldırılacağını, çeşitli uzak dalların nasıl yönetileceğini, bunların izlenip izlenmediğini nasıl tanımlayacağınızı ve daha fazlasını bilmeyi gerektirir. Bu bölümde bu uzaktan yönetim becerilerinden bazılarını ele alacağız.
Not
|
Uzak repolar yerel makinenizde olabilir.
Aslında sizinle aynı ana bilgisayar üzerinde olan bir ``uzak`` repoyla çalışıyor olmanız tamamen mümkündür. Uzak kelimesi, veri deposunun ağda veya internette başka bir yerde olduğu anlamına gelmez, yalnızca başka bir yerde olduğu anlamına gelir. Böyle bir uzak repoyla çalışmak, diğer uzaktan sunucularda olduğu gibi yine de tüm standart itme (push), çekme (pull) ve getirme (fetch) işlemlerini içerecektir. |
Uzak Sunucuları Görme
Hangi uzak sunucuları yapılandırdığınızı görmek için git remote
komutunu çalıştırabilirsiniz.
Bu belirttiğiniz her uzak sunucunun kısa adlarını listeler.
Reponuzu kopyaladıysanız en azından ``Origin`’i görmelisiniz (Git’in kopyaladığınız sunucuya verdiği varsayılan isim budur):
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
Ayrıca Git’in o uzak sunucuya okuma ve yazma sırasında kullanılacak kısa ad için sakladığı URL’leri gösteren -v
bayrağını da belirtebilirsiniz:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
Birden fazla uzak sunucunuz varsa, bu komut hepsini listeler. Örneğin, birden fazla geliştiricinin beraber çalışmak için oluşturduğu birden fazla uzak sunucuya sahip bir repo şöyle görünebilir.
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)
Bu, diğer geliştiricilerden kolaylıkla katkı alabileceğimiz anlamına gelir. Ayrıca bunlardan bir veya daha fazlasını zorlama iznimiz olabilir, ancak bu ekrandan bu çıkarımda bulunmak mümkün değil.
Bu uzak sunucuların çeşitli protokoller kullandığına dikkat edin (Bu konu hakkında daha fazla bilgiyi Bir Sunucuda Git Kurma bölümünde ele alacağız).
Uzak Sunucuları Görme
git clone
komutunun sizin için ``Origin`` uzak sunucusunu nasıl eklediğinden üstü kapalı bahsettik ve bazı gösterimler verdik.
Yeni bir uzak sunucunun nasıl ekleneceği aşağıda daha açıkça anlatılmıştır.
Kısa adını kullanarak yeni bir uzak Git reposu eklemek için git remote add <shortname> <url>
komutunu çalıştırın:
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
Artık komut satırında URL’nin tamamı yerine pb
dizesini kullanabilirsiniz.
Örneğin, Paul’un sahip olduğu ancak henüz sizin reponuzda bulunmayan tüm kodları getirmek istiyorsanız, git fetch pb
komutunu çalıştırabilirsiniz:
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
Paul’un ana-dalına (master branch) artık yerelde pb/master
olarak erişilebilmektedir.
Onu kendi dallarınızdan biriyle birleştirebilirsiniz veya incelemek isterseniz herhangi bir dala geçerek göz atabilirsiniz.
(Dalların ne olduğunu ve bunların nasıl kullanılacağını Git Dalları bölümünde çok daha ayrıntılı olarak ele alacağız.)
Uzak Sunucudan Getirme ve Çekme
Az önce gördüğünüz gibi uzak projelerinizden veri almak için aşağıdaki komutu çalıştırabilirsiniz:
$ git fetch <remote>
Komut o uzak projeye gider ve o uzak projeden henüz sahip olmadığınız tüm verileri çeker. Bunu yaptığınız takdirde, o uzak sunucudaki tüm dallara erişim için gerekli referanslara sahip olacaksınız. Böylece istediğiniz zaman kodları inceleyebilir veya kendi kodunuzla birleştirebilirsiniz.
Eğer bir repoyu kopyalarsanız, komut o uzak repoyu otomatik olarak ``Origin`` adı altına ekler.
Yani, git fetch origin
, kopyalamanızdan (veya sunucudan son getirmenizden) bu yana sunucuya gönderilen tüm yeni çalışmaları getirir.
git fetch
komutunun verileri yalnızca yerel reponuza indirdiğini unutmamalısınız.
Verileri herhangi bir çalışmanızla otomatik olarak birleştirmez veya üzerinde çalışmakta olduğunuz kodu değiştirmez.
Hazır olduğunuzda bunu manuel olarak kendi kodunuzla birleştirmeniz gerekir.
Geçerli dalınız uzak bir dalı izleyecek şekilde ayarlanmışsa (daha fazla bilgi için sonraki bölüme ve Git Dalları'e bakın), bu değişiklikleri otomatik olarak getirmek için git pull
komutunu kullanabilirsiniz.
Daha sonra bu uzak dalı mevcut dalınızla birleştirin.
Bu size daha kolay veya daha rahat bir iş akışı sağlar.
Varsayılan olarak git clone
komutu, yerel ana dalınızı (genellikle main veya master olarak adlandırılır), kopyaladığınız uzak sunucudaki uzak ana dalı (veya varsayılan dalın adı her neyse) izleyecek şekilde otomatik olarak ayarlar.
git pull
komutunu çalıştırmak genellikle verileri kopyaladığınız asıl sunucudan getirir ve otomatik olarak bu verileri üzerinde çalışmakta olduğunuz kodla birleştirmeye çalışır.
Kodlarınızı Uzak Sunucuya İtmek
Projeniz belli bir aşamaya ulaştıktan sonra paylaşmak isteyebilirsiniz.
Bunun için geliştirilmiş kodunuzu uzak repoya itmeniz gerekmektedir.
Bunun için kullanmanız gereken komut basittir: git Push <remote> <branch>
.
Ana dalınızı Origin
sunucunuza göndermek istiyorsanız (yine kopyalama genellikle bu adların her ikisini de sizin için otomatik olarak ayarlar), o zaman işlediğiniz katkıları sunucuya geri göndermek için şunu çalıştırabilirsiniz:
$ git push origin master
Bu komut yalnızca yazma erişiminizin olduğu bir sunucudan kopyalama yapmışsanız ve bu arada hiç kimse başka bir itme yapmamışsa çalışır. Siz ve başkaları projeyi aynı anda kopyalarsanız ve diğerleri sizden da önce değiştirilmiş kodlarını uzak sunucuya gönderirse, doğal olarak sizin itmeniz reddedilecektir. Değiştirilmiş kodunuzu itmenize izin verilmeden önce, diğerleri tarafından güncellenmiş kodları uzak repodan getirmeniz ve kendi işinize dahil etmeniz gerekecek. Güncel çalışmanızı uzak sunuculara nasıl gönderebileceğiniz hakkında daha ayrıntılı bilgi için Git Dalları konusuna bakın.
Uzak Sunucunun İncelenmesi
Belirli bir uzak sunucu hakkında daha fazla bilgi görmek istiyorsanız git remote show <remote>
komutunu kullanabilirsiniz.
Bu komutu origin
gibi belirli bir kısa adla çalıştırırsanız şöyle bir sonuç elde edersiniz:
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Bu komut uzak repo URL’si yanında izlenen dal bilgilerini de listeler.
Bununla birlikte size, eğer ana daldaysanız (main veya master) ve git pull
çalıştırırsanız, tüm uzak referansları getirdikten sonra otomatik olarak uzak repodaki ana dalla birleşeceğini söyler.
Ayrıca çekme yaptığı tüm uzak referansları da listeler.
Bu karşılaşacağınız basit bir örnektir.
Ancak Git’i daha yoğun kullandığınızda, git remote show
komutuyla çok daha fazla bilgi görebilirsiniz:
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)
Bu komut belirli bir daldayken git Push
komutunu çalıştırdığınızda, otomatik olarak hangi dalın uzak repoya aktarılacağını gösterir.
Ayrıca; sunucudaki hangi uzak dallara henüz sahip olmadığınızı, yerelde sahip olduğunuz hangi dalların uzak sunucudan kaldırılmış olduğunu ve git pull
çalıştırdığınızda otomatik olarak uzak-izleme dallarıyla birleşecek çoklu yerel dallarınızı da gösterir.
Uzak Sunucuları Yeniden Adlandırma ve Kaldırma
Bir uzaktan sunucunun kısa adını değiştirmek için git remote rename
komutunu çalıştırabilirsiniz.
Örneğin pb`yi `paul
olarak yeniden adlandırmak istiyorsanız, bunu git remote rename
komutu ile yapabilirsiniz:
$ git remote rename pb paul
$ git remote
origin
paul
Bunun tüm uzaktan izleme dal adlarınızı değiştirdiğini belirtmekte fayda var.
Önceden pb/master
olarak adlandırılan (referans) uzak sunucunun yeni adı artık `paul/master`dır.
Herhangi bir nedenden dolayı uzak sunucuyu kaldırmak isterseniz (ör: sunucuyu taşımışsanız veya artık belirli bir aynayı (mirror: bir repodaki tüm verileri ve geçmişi eksiksiz olarak başka bir repoya kopyalayan bir repo) kullanmıyorsanız veya geliştiricilerden biri artık projeye katkıda bulunmuyorsa git remote remove
veya git remote rm
komutlarından birini kullanabilirsiniz:
$ git remote remove paul
$ git remote
origin
Bir uzaktan sunucunun referansını bu şekilde sildiğinizde, o sunucuyla ilişkili tüm uzaktan izleme dalları ve yapılandırma ayarları da silinir.