Created
October 20, 2010 14:02
-
-
Save sayz/636466 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bu rehber, yeni bir projenin bir git deposuna nasıl aktarılacağını, değişikliklerin nasıl yapılacağını ve | |
değişikliklerin diğer geliştiricilerle nasıl paylaştırılacağını açıklar. | |
Öncelikle, bir komut için yazılmış belgeyi her zaman aşağıdaki komut ile görüntüleyebilirsiniz: Örneğin git | |
log --graph belgesini görüntülemek için: | |
$ man git-log | |
Başlamadan önce git'e adınız ve e-posta adresinizi vermeniz önerilir. Bunu yapmanın en kolay yolu: | |
$ git config --global user.name "Adınız ve Soyadınız Buraya" | |
$ git config --global user.email [email protected] | |
Komutlarını çalıştırmaktır. | |
Yeni Bir Projeyi Aktarmak | |
Varsayalım, proje klasöründe başladığınız bir iş var. Projenizi git sürüm kontrolüne vermek için için: | |
$ cd proje | |
$ git init | |
Git'in cevabı aşağıdaki gibi olacaktır: | |
Initialized empty Git repository in .git/ | |
Yeni bir çalışma dizini başlattınız. -- .git adında yeni bir dizin yaratıldığını farketmişsinizdir. | |
Şimdi, git'e geçerli dizindeki bütün dosyaların bir görüntüsünü almasını söyleyin (git-add komutundaki . | |
işaretine dikkat edin): | |
$ git add . | |
Bu görüntü, git'in "index" adını verdiği geçici bir alanda saklanır. Index'in içeriğini kalıcı olarak saklamak | |
için git-commit komutunu kullanın: | |
$ git commit | |
Bu komut sizden bir teslim mesajı isteyecektir. Şimdi, projenizin ilk sürümünü git içinde sakladınız. | |
Değişiklikler Yapmak | |
Birkaç dosyayı değiştirin ve sonra güncellenmiş içeriği index'e ekleyin: | |
$ git add dosya1 dosya2 dosya3 | |
Teslim için hazırsınız, Nelerin teslim edilmek üzere olduğunu git-diff komutunu --cached seçeneği ile | |
kullanarak görebilirsiniz: | |
$ git diff --cached | |
(--cached olmadan, git-diff size, index'e eklenmemiş değişikliklerinizi gösterir.) Ayrıca, durumunuzun kısa | |
bir özeti için git-status komutunu kullanabilirsiniz: | |
$ git status | |
# On branch master | |
# Changes to be committed: | |
# (use "git reset HEAD ..." to unstage) | |
# | |
# modified: dosya1 | |
# modified: dosya2 | |
# modified: dosya3 | |
# | |
Yapacağınız başka değişiklikler varsa, bu aşamada yapın ve değişen dosyaları index'e ekleyin. Sonunda, | |
yaptığınız değişiklikleri teslim etmek için: | |
$ git commit | |
Sizden tekrar yaptığınız değişiklikleri açıklayan bir mesaj isteyecektir, ardından projenizin yeni bir | |
sürümünü kaydedecektir. | |
Her dosya için, git-add kullanmak yerine, şunu kullanabilirsiniz: | |
$ git commit -a | |
Bu komut otomatik olarak içeriği değişen dosyaları fark edecek, ( yeni dosyaları değil ) onları index'e | |
ekleyecek ve teslim edecektir, hepsi bir adımda. | |
Teslim mesajları hakkında: Zorunlu olmasa da, teslim mesajlarına değişikliği özetleyen kısa bir cümle ile | |
(50 karakterden az) başlamanız önerilir. İlk satırın ardından bir satır boşluk daha ekleyin ve sonra daha | |
fazla açıklama girin. Teslimleri e-posta olarak gönderen araçlar, ilk satırı konu başlığı, kalan kısmı ise | |
mesaj metni olarak kullanırlar. | |
Git içerikleri takip eder, dosyaları değil | |
Birçok sürüm kontrol sistemi, bir add komutu sunar, bu komut sisteme yeni bir dosya için değişiklikleri | |
izlemesini bildirir. Git ile gelen add komutu daha basit ve güçlü bir iş yapar: git-add komutu, hem yeni | |
hem de değişen dosyalar için kullanılır ve iki durum için de dosyaların ve ortamın görüntüsünü, bir sonraki | |
teslim için kaydeder. | |
Proje geçmişini görüntülemek | |
Herhangi bir noktada, yaptığınız değişikliklerin geçmişini aşağıdaki komut ile görebilirsiniz: | |
$ git log | |
Ayrıca, her adımda yaptığınız değişikliklerin tamamını görmek için şunu kullanın: | |
$ git log -p | |
Genellikle, değişikliklerin özetini görmek her adımı hatırlamakta faydalıdır. | |
$ git log --stat --summary | |
Dalları yönetmek | |
Bir git deposu, geliştirmenin birçok dalını idare edebilir. "Deneysel" adında yeni bir dal yaratmak için şunu | |
kullanın: | |
$ git branch deneysel | |
Şimdi şu komutu verdiğinizde | |
$ git branch | |
var olan bütün dalların bir listesini görürsünüz: | |
deneysel | |
* master | |
Deneysel dalı sizin şimdi yarattığınız dal ve "master" ise varsayılan dala verilen isimdir. Yıldız işareti, | |
hangi dal üzerinde çalıştığınızı gösterir, dal değiştirmek için; | |
$ git checkout deneysel | |
komutunu verin ve deneysel dala geçin. Şimdi bir dosyayı değiştirin, değişikliği teslim edin ve tekrar | |
master dala geçiş yapın: | |
(dosyalarda değişiklik yapın) | |
$ git commit -a | |
$ git checkout master | |
Şimdi yaptığınız değişikliklerin yerinde olmadığını bir kontrol edin. Yaptığınız değişiklikler deneysel dalda | |
kaldı ve siz master dala geçtiniz. | |
Ana dalda başka bir değişikilik daha yapın: | |
(dosyalarda değişiklik yapın) | |
$ git commit -a | |
Bu noktada, iki dal birbirinden ayrıldı, ikisinde de farklı değişiklikler var. Deneysel dalda yapılan | |
değişiklikleri master'da birleştirmek için, şunu çalıştırın: | |
$ git merge deneysel | |
Eğer değişiklikler çakışmazsa, tamamdır. Çakışmalar varsa, şüpheli dosyalar solunda bir işaret ile | |
gösterilir; | |
$ git diff | |
komutu bunu yapacaktır. Dosyaları düzenleyerek çakışmaları çözdükten sonra, | |
$ git commit -a | |
komutu birleştirmenin sonucunu teslim edecektir. Son olarak, | |
$ gitk | |
size geçmişteki değişikliklerin, görsel bir temsilini sunacaktır. | |
Bu noktada, deneysel dalı silebilirsiniz: | |
$ git branch -d deneysel | |
Bu komut deneysel dalda yapılan değişikliklerin, geçerli dalda da bulunduğunu kontrol eder. | |
Eğer cilgin-fikir dalında yaptığınız bir geliştirmeden pişman olduysanız o dalı silebilirsiniz: | |
$ git branch -D cilgin-fikir | |
Dallar basit ve kolaydır, bir şeyleri denemenin iyi bir yoludur. | |
Birlikte çalışma için git kullanmak | |
Diyelim ki, Alice yeni bir proje başlattı ve git deposu da /home/alice/proje klasöründe, ve aynı bilgisayar | |
üzerinde bir kullanıcı olan Bob katkıda bulunmak istiyor. | |
Bob şu komutla başlıyor: | |
bob$ git clone /home/alice/proje depom | |
Bu komut depom adında yeni bir dizin oluşturur, bu dizin Alice'in deposunun tamamen bir kopyasıdır, | |
özgün projenin tüm geçmişi ile birlikte. | |
Bob bazı değişiklikler yapar ve teslim eder: | |
(dosyalarda değişiklikler yapılır) | |
bob$ git commit -a | |
(gerektikçe tekrar edin) | |
Hazır olduğunda, Alice'e değişiklikleri /home/bob/depom adresinden çekmesini söyler. Alice bunu yapmak | |
için şu komutu uygular: | |
alice$ cd /home/alice/proje | |
alice$ git pull /home/bob/depom master | |
Bu komut Bob'un "master" dalındaki değişiklikleri, Alice'in geçerli dalıyla birleştirir. Eğer o sırada Alice'in | |
de yaptığı değişiklikler varsa, çakışmaları elle düzeltmesi gerekebilir. | |
"pull" komutu iki işlem gerçekleştirir: değişiklikleri uzak bir daldan alır ve geçerli dalda birleştirir. | |
Genellikle, Alice yaptığı değişiklikleri, "pull" işleminde önce teslim etmek isteyecektir. Eğer Bob'un işi, | |
geçmişleri çatallandığından beri Alice'in yaptıklarıyla çakışıyorsa, Alice kendi çalışma dizininde çakışmaları | |
giderecek ve kendi değişiklikleri bu çakışmaların çözüm sürecinde ona engel olacaktır. (git, değişiklikleri | |
çekecektir ancak birleştirme yapmayı reddedecektir --- Alice bir şekilde kendi değişikliklerinden | |
kurtulacak ve tekrar uzaktaki değişiklikleri çekmeyi deneyecektir.) | |
Alice, birleştirmeyi yapmadan önce, Bob'un ne yaptığına bakabilir ve değişikliklerin çekmeye değer olup | |
olmadığına karar verebilir, bunun için "fetch" komutu kullanılabilir; | |
alice$ git fetch /home/bob/depom master | |
alice$ git log -p HEAD..FETCH_HEAD | |
Alice, geçmişleri çatallandığından bu yana Bob'un yaptığı değişiklikleri görselleştirmek isterse, şu komutu | |
kullanabilir: | |
$ gitk HEAD..FETCH_HEAD | |
Bu komut git log ile gördüğümüz iki-noktalı aralık gösterimini kullanıyor. | |
Alice, çatallanmadan sonra ikisinin de yaptıkları değişiklikleri görmek isterse üç-noktalı biçimi kullanmalı: | |
$ gitk HEAD...FETCH_HEAD | |
Bu komutun anlamı, "her iki tarafta da olan değişiklikleri gösterme, taraflardan herhangi birinde olmayan | |
değişiklikleri göster". | |
Bu aralık gösteriminin, hem gitk hem de "git log" ile kullanılabileceğini hatırlayın. | |
Bob'un ne yaptığını incelikten sonra, eğer önemli bir durum söz konusu değilse, Alice değişiklikleri | |
Bob'dan çekmeden çalışmaya devam edebilir. Bob'un geçmişi önemli bir değişiklik içeriyorsa, Alice | |
geliştirmekte olduğu olduğu işi saklayabilir, bir "pull" komutu ile Bob'dan değişiklikleri çekebilir, sonra | |
ortaya çıkan geçmiş üzerinde sakladığı dosyalarla çalışmaya devam edebilir. | |
Bir topluluk içinde çalışırken, genellikle bir depo ile tekrar tekrar çalışırsınız. Uzak bir depo tanımı yaparak | |
işinizi kolaylaştırabilirsiniz: | |
alice$ git remote add bob /home/bob/depom | |
Aşağıdaki komutla, Alice çekme işleminin ilk kısmını git-fetch komutu ile, dalları birleştirmeden yapabilir: | |
alice$ git fetch bob | |
Uzun haline göre, Alice Bob'dan değişiklikleri, git-remote ile kurulan uzak depo kısayolu ile çekmektedir. | |
Çekilen ne varsa, bir uzak takip dalında tutulur. Bu durumda, dalın adı bob/master dır. | |
alice$ git log -p master..bob/master | |
bu komut, Bob'un Alice'in master dalından ayrıldığı andan itibaren yaptığı değişiklikleri listeler. | |
Alice, bu değişiklikleri inceledikten sonra, değişiklikieri kendi master dalında birleştirmek isteyebilir: | |
alice$ git merge bob/master | |
Bu merge(birleştirme) ayrıca, uzak takip dalından çekilerek de yapılabilir: | |
alice$ git pull . remotes/bob/master | |
Komut satırında ne verilirse verilsin, pull her zaman geçerli dal ile birleştirir. | |
Daha sonra Bob, deposunu Alice'in yaptığı değişikliklerle güncelleyebilir: | |
bob$ git pull | |
Dikkat edin, Bob, Alice'in yaptığı değişiklikleri almak için depo adresi vermedi. Bob, Alice'in deposunu | |
kopyaladığı zaman, git deponun adresini kaydetti ve bu adresi çekme işlemi için kullandı: | |
bob$ git config --get remote.origin.url | |
/home/alice/proje | |
(git-clone tarafından ayarlanan tüm yapılandırma git config -l ile öğrenilebilir ve git-config(1) kılavuz | |
sayfası her seçeneğin ne anlama geldiğini açıklamaktadır.) | |
Git ayrıca, Alice'in bozulmamış master dalını da "origin/master" adı altında saklar: | |
bob$ git branch -r origin/master | |
Bob başka bir makineden çalışmak isterse, ssh protokolü ile kopyalama ve çekme yapabilir: | |
bob$ git clone alice.org:/home/alice/proje depom | |
Ayrıca, git kendi yerel protokolüne sahiptir, rsync ya da http kullanabilir, ayrıntılar için git-pull(1) | |
kılavuzuna bakınız. | |
Git ayrıca, CVS-benzeri bir şekilde merkezi bir depo ile kullanılabilir. Ayrıntılar için git-push(1) ve gitcvs- | |
migration(7). | |
Geçmişe yolculuk | |
Git geçmişi birbiriyle ilişkili teslimler halinde gösterir. git-log komutunun bu teslimleri listelediğini gördük. | |
Her bir kayıt girdisindeki ilk satırın, teslime verilen ad olduğunu unutmayın: | |
$ git log | |
commit c82a22c39cbc32576f64f5c6b3f24b99ea8149c7 | |
Author: Junio C Hamano | |
Date: Tue May 16 17:18:22 2006 -0700 | |
merge-base: Clarify the comments on post processing. | |
Biz bu adı, git-show komutuna vererek, teslim hakkındaki detaylara ulaşabiliriz: | |
$ git show c82a22c39cbc32576f64f5c6b3f24b99ea8149c7 | |
Teslimleri belirtmenin başka yolları da var. Teslim adının eşsiz kalacak kadar kısmını kullanabilirsiniz: | |
$ git show c82a22c39c # ilk birkaç karakter | |
# genellikle yeterlidir. | |
$ git show HEAD # geçerli daldaki değişiklikler | |
$ git show experimental # deneysel daldaki değişiklikler | |
Hemen hemen her teslim, bir önceki durumu işaret eden bir ana-baba teslime sahiptir. | |
$ git show HEAD^ | |
$ git show HEAD^^ | |
$ git show HEAD~4 | |
$ git show HEAD^1 | |
$ git show HEAD^2 | |
Ayrıca, teslimlere kendi istediğiniz bir adı verebilirsiniz. | |
$ git tag v2.5 1b2e1d63ff | |
1b2e1d63ff yerine "v2.5" kullanabilirsiniz. Eğer, bu adı başkalarıyla paylaşmak istiyorsanız (örneğin, bir | |
sürüm belirlemek için), bir "tag" nesnesi yaratmalı ve imzalamalısınız. Detaylar için, git-tag(1). | |
Bir teslimin adına ihtiyaç duyan her git komutu için, bunlardan herhangi birini kullanabilirsiniz, örneğin: | |
$ git diff v2.5 HEAD # HEAD ile v2.5 karşılaştırılır | |
$ git branch kararli v2.5 # v2.5 temel alınarak | |
# "kararli" adinda bir dal yaratır | |
$ git reset --hard HEAD^ # Mevcut dalınızı iptal eder ve | |
# durumunuzu HEAD^ öncesine çevirir. | |
Son komutu kullanırken dikkatli olun, son teslimden bu yana yaptığınız tüm değişiklikleri siler ve teslim | |
edilecek bir değişiklik bırakmaz. git-reset komutunu ortak çalışılan bir depoda kullanmayın, bu diğer | |
geliştiricilerin de gereksiz birleştirmeler yapmasına sebep verir. Ortak depoya gönderdiğiniz değişiklikleri | |
geri almak için git-revert komutunu kullanın. | |
git-grep komutunu herhangi bir metni, herhangi bir sürüm içinde aramak için kullanabilirsiniz | |
$ git grep "merhaba" v2.5 | |
komutu v2.5 içinde "merhaba" geçen tüm dosyaları arayacaktır. | |
Teslim adını vermezseniz, git-grep dizindeki bütün dosyalarda arama yapacaktır. | |
$ git grep "merhaba" | |
git ile takip edilen dosyalarda arama yapmanın kısa bir yoludur. | |
Birçok git komutu teslimlere göre çalışabilir. İşte git-log ile bir örnek: | |
$ git log v2.5..v2.6 # v2.5 ile v2.6 arasında yapılan teslimler. | |
$ git log v2.5.. # v2.5'ten bu yana teslimler | |
$ git log --since="2 weeks ago" # 2 haftadan bu yana teslimler | |
$ git log v2.5.. Dosya # 2.5'ten itibaren dosyayı | |
# değiştiren teslimler | |
$ git log stable..deneysel | |
komutunu, deneysel dalda yapılan ancak kararli dalda bulunmayan teslimleri listelerken, | |
$ git log deneysel..stable | |
komutunu, kararlı dalda yapılan ancak, deneysel dalda bulunmayan teslimleri listeler. | |
$ gitk --since="2 weeks ago" drivers/ | |
$ git diff v2.5:Makefile HEAD:Makefile.in | |
git-show komutunu dosyaları görüntülemek için de kullanabilirsiniz: | |
$ git show v2.5:Makefile |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment