-
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 Basics
-
3. Git Branching
- 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 Summary
-
4. Git on the Server
- 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 Summary
-
5. Distributed Git
- 5.1 Dağıtık İş Akışları
- 5.2 Projenin Gelişiminde Rol Almak
- 5.3 Bir Projeyi Yürütme
- 5.4 Summary
-
6. GitHub
-
7. Git Tools
- 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 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Ek bölüm A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Summary
-
A2. Ek bölüm B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
4.4 Git on the Server - Sunucu Kurma
Sunucu Kurma
Sunucu tarafında SSH erişimini kurma işlemine geçelim.
Bu örnekte, kullanıcılarınızı kimlik doğrulamak için authorized_keys
(yetkili anahtar) yöntemini kullanacaksınız.
Ayrıca, Ubuntu gibi standart bir Linux dağıtımını kullandığınızı varsayıyoruz.
Burada açıklanan birçok işlem, ortak anahtarları manuel olarak kopyalamak ve yüklemek yerine ssh-copy-id
komutunu kullanarak otomatikleştirilebilir.
İlk olarak, bir git
kullanıcı hesabı oluşturmalısınız ve bu kullanıcı için bir .ssh
dizini oluşturmalısınız.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Sonraki adım, güvenilir bazı geliştirici SSH ortak anahtarlarını git
kullanıcısı için authorized_keys
dosyasına eklemektir.
Varsayalım ki güvenilir ortak anahtarlarınız var ve bunları geçici dosyalara kaydettiniz.
Tekrar belirtmek gerekirse, ortak anahtarlar şu şekilde görünür:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Onları sadece git
kullanıcısının .ssh
dizinindeki authorized_keys
dosyasına eklersiniz:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Şimdi, onlar için boş bir repo kurabilirsiniz.
Bunun için --bare
seçeneği ile git init
komutunu çalıştırın, böylece bir çalışma dizini olmadan repo başlatılır:
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
Sonra, John, Josie veya Jessica, ona bir uzak repo olarak bağlanıp, bir dalı yukarı iterek, projelerinin ilk sürümünü bu repoya ekleyebilir.
Unutmayın ki bir proje eklemek istediğinizde birisi makinaya giriş yapmalı ve bir yalın repo oluşturmalıdır.
git
kullanıcınızı ve repoyu kurduğunuz sunucunun ana bilgisayar adını gitserver
olarak kullanalım.
Eğer bunu içsel (internal) olarak çalıştırıyorsanız ve gitserver
için DNS kurulumu yaptıysanız, o zaman komutları neredeyse olduğu gibi kullanabilirsiniz (`myproject`i dosyalar içeren mevcut bir proje olarak varsayalım):
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
Artık, diğerleri bunu kolayca kopyalayabilir ve değişiklikleri itebilir:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
Bu yöntemle, birkaç geliştirici için hızlıca okuma/yazma erişimli bir Git sunucusu kurabilirsiniz.
Dikkat etmeniz gereken bir husus, şu anda tüm bu kullanıcıların sunucuya giriş yapıp, bir git
kullanıcısı olarak bir kabuk (shell) alabilmesidir.
Bunu sınırlamak istiyorsanız, /etc/passwd
dosyasında kabuğu başka bir şeye değiştirmeniz gerekecektir.
git
kullanıcı hesabını sadece Git ile ilgili faaliyetlerle kısıtlamak için, Git ile birlikte gelen sınırlı bir kabuk aracı olan git-shell`i kullanabilirsiniz.
Eğer `git
kullanıcı hesabının giriş kabuğu olarak bunu ayarlarsanız, o hesap sunucunuzda normal kabuk erişimine sahip olamaz.
Bunu kullanmak için, o hesabın giriş kabuğu olarak bash veya csh yerine git-shell
'i belirtmelisiniz.
Bunun için, eğer hali hazırda yoksa, /etc/shells
dosyasına git-shell
komutunun tam yolunu eklemeniz gerekmektedir:
$ cat /etc/shells # see if `git-shell` is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
Şimdi bir kullanıcının kabuğunu chsh <kullanıcıadı> -s <kabuk>
komutunu kullanarak düzenleyebilirsiniz:
$ sudo chsh git -s $(which git-shell)
Şimdi, git
kullanıcısı SSH bağlantısını kullanarak yalnızca Git depolarını itme ve çekme işlemlerini gerçekleştirebilir ama makineye kabuk alamaz.
Yine de denerseniz, şunun gibi bir giriş reddi görürsünüz:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
Şimdi Git ağ komutları hala düzgün çalışacak ancak kullanıcılar bir kabuk alamayacaktır.
Çıktıda belirtildiği gibi, git
kullanıcısının ana dizininde git-shell
komutunu bir miktar özelleştiren bir dizin de kurabilirsiniz.
Örneğin, sunucunun kabul edeceği Git komutlarını sınırlayabilir veya kullanıcıların SSH ile giriş yapmaya çalıştıklarında görecekleri iletileri özelleştirebilirsiniz.
Kabuğu özelleştirmekle ilgili daha fazla bilgi için git help shell
komutunu çalıştırın.