2. Konular
• Sürüm Takip Sistemi Nedir?
• Git Nedir?
• Git'in Özellikleri
• Git'in Temelleri
• Git Sunucu
• Git Komutları
3. Sürüm Takip Sistemi Nedir?
Neden umursamalıyız?
● Sürüm takibi bir dosyada veya dosya kümesinde yapılan değişikliklerin
kaydını sürümler halide tutmak ve sonrasında bu geçmiş sürümlere
erişebilmek için kullanılan bir sistemdir.
● Sürüm takip sistemleri genellikle kaynak kodları n takibi icin kullanılıyor
ama siz bilgisayarda bulunan herhangi bir dosya için bunu yapabilirsiniz.
● Resim, belge, sunum vs.
● Sürüm kontrolü her şeyi bozduğunuzda belgelerinizi en son düzgün
haline geri alabilmenizi sağlar.
6. Merkezi Sürüm Kontrol Sistemi
● İnsanların genellikle karşılaştığı diğer bir sorun, aynı belge veya kod
üzerinde birden fazla kişinin aynı anda çalışması.
●
Bu problemi gidermek icin merkezi sürüm takip sistemleri
kullanılmaktadır.
●
Örn: CVS, Subversion, Perforce
●
Bu sistemlerde bir sunucu dosyaların bütün sürümlerinin bulunduğu
depoyu barındırır ve istemciler buraya bağlanarak dosyaların
versionlarini kendi yerel makinalarina ceker.
●
Avantajı: Yönetimi kolay.
●
Dezavantajı: Single Point of Failure. Sunucu kapandığında kimse
elindeki versiyonlanmış dosyayı hiç bir yere yazamaz.
8. Dağıtık Sürüm Takip Sistemi
● Örn: Git, Mercurial, Bazaar veya Darcs
● İstemciler sadece son sürümü yerel makinalarına indirmez, aynı
zamanda repo'nun bir aynasını kendi yerel makinalarında barındırmış
olurlar.
● Sunucu öldüğünde istemciler kendi makinalarında çalışmaya devam
eder sonra sunucu ayağa kalktığında istemci değişiklikleri sunucuya
uygular.
● Avantaj:
● Her istemci sunucunun kople yedeği olur.
● İstemcilerin kendi aralarında birlikte çalışmalarına ve tepedeki
hiyerarşiden bağımsız kendi aralarında farklı iş akışları
gerçeklemelerine yardımcı olur.
9. Git Nedir?
Git'in Özellikleri
● Git,GPLv2 lisanslı dağıtık sürüm takip sistemidir.
● Küçük veya büyük ölçekli her türlü projede kullanılabilir, hızlı ve sağlamdır.
● Tarihçesi: Linux Çekirdeğinin geliştiricileri önceleri ticari bir sürüm takip sistemi olan
BitKeeper'ı kullanıyorlardı. Ticari yazılım olan BitKeeper'ın Linux topluluğu tarafından
ücretsiz kullanımına son verilmesi üzerine topluluk tarafından yeni bir araç geliştirildi.
● Yeni sistemin amaclarından bazıları:
Hız
– Basit Tasarım
– Dogrusal olmayan geliştirim icin güçlü destek (Paralel dallanmalar (branch))
– Tamamen dağıtık
– Linux çekirdeği gibi büyük bir projenin verimli bir şekilde üstesinden gelebilmesi
Bu amaçlarla 2005 yılında Git sürüm takip sistemi oluşturuldu.
11. Git'in Temelleri
● Neredeyse her işlem yerel makinede gerçekleşir. Boylece
ağdan kaynaklanan yavasliktan kurtulur. Ornegin geçmisi
gormek için ağa bağlı olmaya gerek yoktur.
● Bütünlük Git'te önemlidir. Her şey kaydedilmeden önce
checksum'ı alınır. Böylece siz degisikligi yaparken Git'in
bundan haberdar olmasına gerek yoktur.
● Git'e geri alınması mümkün olmayan işler yaptırmak
neredeyse imkansızdır. Sadece veri ekleme işlemi
yapabilirsiniz.
13. ●
.git dizini: Git'in projeye ait üstbilgileri ve nesne veritabanını tuttuğu
dizindir. Bu dizin Git'in en önemli parçasıdır ve uzaktaki bir depodan
klonladığınız depolar buraya kopyalanır.
●
Çalışma dizini: projenin bir sürümünün tek bir kopyasıdır ve bu
dosyalar git dizini içerisindeki sıkıştırılmış veritabanının açılmış
halidir ve siz üzerinde çalışabilmeniz için diskte yerini alır.
●
Staging alanı: Git dizininde yer alan bir sonraki commit'te nelerin yer
alacağının bilgisini tutan dosyadır. Bazen index olarak adlandırılır
ama genellikle staging alanı denir.
15. Git Komutları
●
Yeni bir proje oluşturma
$ git init deneme_proje # bu sadece kendimizin erisecegi ve uzerinde calisacagimiz proje
$ git init --bare deneme_proje.git # Baskaları ile paylasilacak bir proje olusturmak icin –bare
komutunu kullaniyoruz ve bu tarz projeler .git ile bitmeli.
●
Olusturdugumuz veya daha önce mevcut bir projenin kopyasini alma:
$ git clone git@ip_address:/home/git/deneme_proje.git deneme_proje
● Yerel git kopyasındaki ayarlar
$ git config --global user.name "Ozge Barbaros"
$ git config --global user.email ozge@kripton.rocks
Not: Bu yapılan commit'lerde gorunecek isim ve e-mail adresini belirtir.
16. Git Komutları
● Proje içerisinde degisiklik yaptıktan sonra:
$ git status # projede yapılan son degisiklikleri gosterir hangi dosyaların
eklenip hangilerin silindigini, hangilerinde değişiklik yapıldığını.
$ git diff # bir önceki sürüm ile aradaki farkları gösterir.
$ git add dosya_adi # yeni olusturulan dosyaları ve dizinleri depoya ekler.
$ git commit -a -m “Commit mesaji” # yapılan degisikliklerin yerel repo'ya
eklenmesi
$ git push # son commitin uzaktaki repoya gonderilmesi.
17. Git Komutları
● Commit geçmişi:
$ git log
● Uzak repo'daki son degisikligi alma:
$ git pull
19. Git Komutları
● $ git status -s
● M README
● MM Rakefile
● A lib/git.rb
● M lib/simplegit.rb
● ?? LICENSE.txt
20. Git Komutları
● Gormezden gelinecek dosyalar: .gitignore
● # no .a files
● *.a
● # but do track lib.a, even though you're ignoring .a files above
● !lib.a
● # only ignore the TODO file in the current directory, not subdir/TODO
● /TODO
● # ignore all files in the build/ directory
● build/
● # ignore doc/notes.txt, but not doc/server/arch.txt
● doc/*.txt
● # ignore all .pdf files in the doc/ directory
● doc/**/*.pdf