Kaldigimiz yerden...
Branch
Branch projenin gidisinde ayri bir kol olusturarak kodun paralel evrenini yaratmaktir diyebilirim. (Fringe yapti beni boyle)
Neden ?
Ekip olarak bir ekleme yapacaksiniz ve birbirinizin dosyalarina girme ihtimaliniz var. Kodun orjinal halini korurken bir degisikligi denemek ve sonuclarini gormek istiyorsunuz ama orjinal halinin korunmasini da istiyorsunuz. iste o zaman branch lazim olabiliyor bize.
Orneklere gecelim yine
yenidal diye bir branch yaratarak ise basliyoruz.
git checkout -b yenidal
-b : branch yerine kisa kullanim icin.. bu cumleyi git checkout branch yenidal olarak da yazabilirdik
simdi Code/lib/test2.rb diye bir dosya olusturdum ve icine birseyler yazdim ve commit ettim.
cd lib
subl test2.rb
git add .git commit -m "test2.rb dosyasini ekledim"
subl test1.rb
simdi projede iki tane branch var.
git add .
git commit -m "test1.rb dosyasini degistirdim"
git hist --all
* 807fd32 2013-10-18 | test1.rb dosyasini degistirdim (HEAD, yenidal) [Macrop]
* eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
* cf5ccc3 2013-10-17 | Amending ext (master) [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
master branch'e gecmek icin asagidaki komutu kullaniyorum* 807fd32 2013-10-18 | test1.rb dosyasini degistirdim (HEAD, yenidal) [Macrop]
* eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
* cf5ccc3 2013-10-17 | Amending ext (master) [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
git checkout master
Master dayken readme diye bir dosya olusturdum kaydettim commit ile gonderdim. (su anda master branch'de oldugumuzdan bu commmit de master'a gitti)
subl readme
git add .git commit -m "readme eklendi"
git hist --all
* 218bf8c 2013-10-18 | readme eklendi (HEAD, master) [Macrop]
| * 807fd32 2013-10-18 | test1.rb dosyasini degistirdim (yenidal) [Macrop]
| * eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
|/
* cf5ccc3 2013-10-17 | Amending ext [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
* 218bf8c 2013-10-18 | readme eklendi (HEAD, master) [Macrop]
| * 807fd32 2013-10-18 | test1.rb dosyasini degistirdim (yenidal) [Macrop]
| * eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
|/
* cf5ccc3 2013-10-17 | Amending ext [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
Merge
olusturulan iki dali tekrar birlestirme islemine de merge deniyor.Once olusturdugumuz dala (branch) geciyoruz ve merge komutu ile bagliyoruz.
git checkout yenidal
Switched to branch 'yenidal'
git merge master
Merge made by the 'recursive' strategy.
readme | 1 +
1 file changed, 1 insertion(+)
create mode 100644 readme
git hist --all
* 2d06fdb 2013-10-18 | Merge branch 'master' into yenidal (HEAD, yenidal) [Macrop]
|\
| * 218bf8c 2013-10-18 | readme eklendi (master) [Macrop]
* | 807fd32 2013-10-18 | test1.rb dosyasini degistirdim [Macrop]
* | eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
|/
* cf5ccc3 2013-10-17 | Amending ext [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
yine ASCII de olsa grafik formatinda projenin iki dala ayrilip tekrar birlesmesini gorebiliriz.Switched to branch 'yenidal'
git merge master
Merge made by the 'recursive' strategy.
readme | 1 +
1 file changed, 1 insertion(+)
create mode 100644 readme
git hist --all
* 2d06fdb 2013-10-18 | Merge branch 'master' into yenidal (HEAD, yenidal) [Macrop]
|\
| * 218bf8c 2013-10-18 | readme eklendi (master) [Macrop]
* | 807fd32 2013-10-18 | test1.rb dosyasini degistirdim [Macrop]
* | eb86530 2013-10-18 | test2.rb dosyasini ekledim [Macrop]
|/
* cf5ccc3 2013-10-17 | Amending ext [Macrop]
* 913f1bf 2013-10-17 | 3rd commit (v1) [Macrop]
* 9c46dcb 2013-10-17 | My Second Commit (v0) [Macrop]
* 3beabaf 2013-10-17 | My First commit on test1.rb [Macrop]
peki bir cakisma olursa ne olacak ?
Conflict
simdi master'daki readme'yi degistirip kaydediyor ve add - commit ile gonderiyorumardindan yenidal'a geciyor ve readme'yi degistirip add - commit ile onu da gonderiyorum
simdi icleri birbirinden farkli ayni isimde iki tane dosya iki ayri branch'da bekliyor.
birlestirmeye kalkinca
git merge master
error: 'merge' is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use 'git add/rm <file>' as
hint: appropriate to mark resolution and make a commit,
hint: or use 'git commit -a'.
fatal: Exiting because of an unresolved conflict.
o halde birlestirelim bunun icin dosyanin icine bakiyoruzerror: 'merge' is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use 'git add/rm <file>' as
hint: appropriate to mark resolution and make a commit,
hint: or use 'git commit -a'.
fatal: Exiting because of an unresolved conflict.
subl readme
soyle birsey var
file for master branch
<<<<<<< HEADbunu da yenidal dan degistirdim
=======
Master'dayken degistirdim
>>>>>>> master
file for master branch
bunu da yenidal dan degistirdim
bu cakisma duzeltildigine gore simdi birlestirmeye devam edebilirimbunu da yenidal dan degistirdim
git add readme
git commit -m "cakisma cozuldu"
Normalde git merge islemi icin grafik tabanli bir arac saglamiyor ancak baskalari ile calisabiliyor. "Meld" benim gordugum ve isini iyi yapan bir arac gibi. Asagidaki gibi kurabilirsinizgit commit -m "cakisma cozuldu"
sudo apt-get install meld
sonra git'in global konfigurasyon dosyasi uzerinde yapacaginiz bir degisiklikle conflict cozmek icin artik meld kullanilacagini soyleyebilirsiniz.bunun icin subl ~/.gitconfig yazip dosyanin icine sunlari eklemek
~/.gitconfig
[merge]
tool = meld
[diff]
tool = meld
conflict mesaji aldiginizda git mergetool yazarsaniz artik meld acilacaktool = meld
[diff]
tool = meld
git mergetool
Merging:
readme
Normal merge conflict for 'readme':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (meld):
Merging:
readme
Normal merge conflict for 'readme':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (meld):
oklari kullanarak conflicti cozmek mumkun artik. Daha kolay degil mi ?
sonrasi gene ayni
git add readme
git commit -m "cakisma gene cozuldu"
git commit -m "cakisma gene cozuldu"
Rebase
Merge ile cok benziyor aslinda. Farki commit agacinin (tarihcesinin) farkli olmasi. Rebase yapdiginizda daldaki commit tarihcesine materdaki commit tarihcesi de getiriliyor. boylece master aslinda branch'in commit tarihcesinin bir parcasi oluyor. Okumasi daha kolay bir tarihce olusmasina ragmen acik kaynak kodu gibi cok kullanicinin calistigi durumlarda tarihce bozuldugundan kullanicilarin kafasini karistirabilir.
Birden cok repository (clone)
Simdiye kadar yaptigim ornekleri gittest diye bir klasorun icinde yaptim. simdi o klasorden bir uste cikiyorum ve asagidaki komutu veriyorum
git clone gittest gittest_clone
klonlanmis repository tarihcesini de tasiyarak gelir. klonladigimiz dizine girip tarihcesini alirsak gittest'teki tarihce ile ayni oldugunu goruyoruz.
git hist --all
Origin
projenin orjinal halini ifade ediyor. (asil ilk merkezi repository)
git remote
origin
git remote show origin
* remote origin
Fetch URL: /home/aliiybar/Code/gittest
Push URL: /home/aliiybar/Code/gittest
HEAD branch (remote HEAD is ambiguous, may be one of the following):
master
yeni
Remote branches:
master tracked
remove tracked
yeni tracked
yenidal 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)
origin
git remote show origin
* remote origin
Fetch URL: /home/aliiybar/Code/gittest
Push URL: /home/aliiybar/Code/gittest
HEAD branch (remote HEAD is ambiguous, may be one of the following):
master
yeni
Remote branches:
master tracked
remove tracked
yeni tracked
yenidal 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)
Remote Branch
biraz once olusturdugumuz klon icinde branch'lara baktigimizda bir tek master'i goruyoruz.
git branch
* master
-a parametresini verdigimizde tamami goruntuleniyor* master
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/remove
remotes/origin/yeni
remotes/origin/yenidal
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/remove
remotes/origin/yeni
remotes/origin/yenidal
Fetch
orjinal repo'daki degisiklik durumunda (once orjinalde bir degisiklik yapalim)
cd ..
cd gittest
subl readme
git add readme
git commit -m "readme degisti"
klona gecip fetch komutunu calistiralimcd gittest
subl readme
git add readme
git commit -m "readme degisti"
cd ..
cd gittest_clone
git fetch
git hist --all
....
73076dd 2013-10-18 | master'a readme eklendi (HEAD, origin/master, origin/HEAD, master) [Macrop]
....
merge edebilmek icin su komutu veriyorum
git merge origin/master
Pull
aslinda iki komutun birlesimi diyebiliriz
git fetch
git merge origin/master
diyecegimize
git pull diyoruz o kadar .
Tracking branch
clone ile aldigimiz repoda yenidal diye bir branch yok ama orjinalde vardi. yenidal'i takip etmek icin tracking branch kullaniyoruz
git branch --track greet origin/greet
git branch -a
git hist --max-count=2
git branch -a
git hist --max-count=2
Remote Add
cd gittest_remote
git remote add shared ../hello.git
git remote add shared ../hello.git
Push
yapilan degisiklikleri lokal repository'den server'a veya uzak repository'e gondermek icin push kullanilir.
git push shared master
Lokal repository yayinlamak
once calisilan klasor icinde asagidaki komutu verip bir cesit web server calismasini sagliyoruz
git daemon --verbose --export-all --base-path=
Sonra baska bir terminal penceresi acarak
git clone git://localhost/hello.git network_hello
cd network_hello
ls
cd network_hello
ls
Dip Not : Windows kullanicilari icin satir sonundan dolayi degismis gibi gorunen dosyalar icin
Ø git config --global
core.autocrlf true
Devam edecek ...
Hiç yorum yok:
Yorum Gönder