İnsanlar için GIT

704 views
513 views

Published on

Sürüm kontrol sistemi GIT ile tanışmak. Neden sürüm kontrol sistemi gereklidir? Dağıtık olarak çalışmak, branch / merge gibi temel GIT özellikleri.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
704
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

İnsanlar için GIT

  1. 1. İNSANLAR İÇİN “GIT” Uğur Özyılmazel - http://ugur.ozyilmazel.com @ugurozyilmazel 5 Nisan 13 Cuma
  2. 2. `git`NEDİR? Dağıtık çalışan sürüm kontrol (DVCS*) ve kaynak kod yönetim (SCM*) aracıdır. * DVCS : Distributed Version Control System SCM : Source Code Management 5 Nisan 13 Cuma
  3. 3. SÜRÜM KONTROL ? ■ ■ ■ ■ Kaynak kod yönetimi ■ Deployment (Sunucuya uygulamanın kurulumu) 5 Nisan 13 Cuma Sürüm (Versiyon) Takibi Birden fazla kişiyle çalışma ve paylaşma Repository (Depo) hizmeti
  4. 4. TARİHÇE ★ Linus Torvalds ★ Aralık 2005, V 1.0 ★ Nisan 2013, V 1.8.2 http://en.wikipedia.org/wiki/Linus_Torvalds 5 Nisan 13 Cuma
  5. 5. DİĞER UYGULAMALAR # http://en.wikipedia.org/wiki/Comparison_of_revision_control_software CVS BITKEEPER * SVN PERFORCE MERCURIAL BAZAAR * Lisans sorunları yüzünden Linus Torvalds GIT’i yazdı! 5 Nisan 13 Cuma
  6. 6. GIT`İ ÖNE ÇIKARANLAR Dallanma ve Birleştirme (Branch, Merge) (Clone ve Depolama) Dağıtık Çalışma Ön İzleme (Distributed) (Staging) Güvenlik Açık Kaynak (Checksum ve SHA) 5 Nisan 13 Cuma Hız ve Boyut (GPL V2)
  7. 7. TEKNİK FARKLAR ■ Dosya içeriği BLOB* şeklinde saklanır. Blob’ların kendine ait modu, tipi, adı ve SHA**’sı bulunur ■ Dizinler’e Tree (Ağaç) adı verilir. ■ Her Tree, alt Tree’lere ve Blob’lara sahiptir. ■ Log, COMMIT OBJECT adı verilen bir sistemde saklanır. (Author, Commiter ve ilişkili diğer bilgiler) * Binary Large Objects ** Secure Hash Algorithm 5 Nisan 13 Cuma
  8. 8. KURULUM Windows http://git-scm.com/download/win Linux `git-core` paketi Mac (Ön tanımlı) * İkonlar http://git-scm.com sitesine aittir. 5 Nisan 13 Cuma
  9. 9. İLK DEPO $ mkdir merhaba $ cd merhaba/ $ git init Initialized empty Git repository in merhaba/.git/ $ git help init 5 Nisan 13 Cuma
  10. 10. BOŞ DEPO ■ İlk COMMIT yapılana kadar ortada BRANCH yoktur! ■ İlk commit yapıldıktan sonra varsayılan (default) branch oluşur ve adı MASTER olur. 5 Nisan 13 Cuma
  11. 11. KONFİGÜRASYON $ git config --global user.name "Adınız Soyadınız" $ git config --global user.email "eposta@adresiniz.com" GIT konfigürasyon dosyası ~/.gitconfig $ git help config 5 Nisan 13 Cuma
  12. 12. DOSYA OLUŞTURALIM $ echo "Proje ile ilgili bilgiler..." > README.md $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! README.md nothing added to commit but untracked files present (use "git add" to track) $ git help status 5 Nisan 13 Cuma
  13. 13. `git add` $ git add README.md $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # #! new file: README.md # $ git help add 5 Nisan 13 Cuma
  14. 14. `git commit` $ git commit -m “Initial commit” $ git status [master (root-commit) 58d35a7] init 1 file changed, 1 insertion(+) create mode 100644 README.md SHA (Kısa) SHA (UZUN - 40 byte / karakter) 58d35a7b277811bd07677c406a0615cfb3fc7806 $ git help commit 5 Nisan 13 Cuma
  15. 15. `git commit` Bir tür zamanı dondurmak, o an’ı kaydetmek / yakalamak, SNAPSHOT çıkartmaktır. SNAPSHOT: An, enstantane fotoğraf anlamındadır... 5 Nisan 13 Cuma
  16. 16. MESAJ EDİTÖRÜ İlgili çevre değişkenini (Environment Variable) kullanarak istediğiniz metin düzenleyicisini kullanabilirsiniz. ~/.bashrc # Örnek olarak export GIT_EDITOR="emacs" export VISUAL="vim" export EDITOR="mate" 5 Nisan 13 Cuma
  17. 17. `git log` $ git log commit 58d35a7b277811bd07677c406a0615cfb3fc7806 Author: Uğur Özyılmazel <kullanici@eposta.com> Date: Wed Apr 3 06:48:03 2013 -0700 Initial commit $ git help log 5 Nisan 13 Cuma
  18. 18. YENİ DOSYALAR EKLEMEK $ echo "dosya1" > dosya1.txt $ echo "dosya2" > dosya2.txt $ ls README.md dosya1.txt dosya2.txt $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! dosya1.txt #! dosya2.txt nothing added to commit but untracked files present (use "git add" to track) 5 Nisan 13 Cuma
  19. 19. YENİ DOSYALAR EKLEMEK $ git add . $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # #! new file: dosya1.txt #! new file: dosya2.txt # $ git commit -m "dosya1 ve dosya2 eklendi" 5 Nisan 13 Cuma NOKTA İŞARETİ
  20. 20. YENİ DOSYALAR EKLEMEK $ git log commit bc0a6a64cf1b996ef3d133a199bc88e821a38456 Author: Uğur Özyılmazel <ugurozyilmazel@---.com> Date: Wed Apr 3 18:36:13 2013 +0300 dosya1 ve dosya2 eklendi commit 58d35a7b277811bd07677c406a0615cfb3fc7806 Author: Uğur Özyılmazel <ugurozyilmazel@---.com> Date: Wed Apr 3 06:48:03 2013 -0700 Initial commit 5 Nisan 13 Cuma
  21. 21. DEĞİŞİKLİK YAPMAK $ echo "dosya1'e ek" >> dosya1.txt $ cat dosya1.txt # dosya1.txt dosya1 dosya1'e ek $ git status 5 Nisan 13 Cuma
  22. 22. DEĞİŞİKLİK YAPMAK $ git diff $ git help diff 5 Nisan 13 Cuma
  23. 23. DEĞİŞİKLİK YAPMAK $ git add dosya1.txt $ git commit -m “dosya1’e ek satır” # onayla $ git checkout -- dosya1.txt # iptal $ git help checkout 5 Nisan 13 Cuma
  24. 24. DURUM KONTROLÜ $ git log --oneline c66dd49 dosya1'e ek satır bc0a6a6 dosya1 ve dosya2 eklendi 58d35a7 Initial commit 5 Nisan 13 Cuma
  25. 25. AĞAÇ YAPISI Yerel makinedeki en son snapshot’a göre HEAD ve branch. Github’daki depo’nun durumu. “origin” remote adı. Son snapshot’daki HEAD ve branch. 5 Nisan 13 Cuma
  26. 26. AĞAÇ YAPISI $ git push -u origin master # uzaktaki depoya Hem uzaktaki, hem de yereldeki SNAPSHOT eşitlendi. $ git help push 5 Nisan 13 Cuma
  27. 27. DEĞİŞİKLİĞİ GERİ ALMAK EKLENMİŞ dosyayı geri almak (staged) $ git reset HEAD DOSYA_ADI DÜZENLENMİŞ dosyayı geri almak (modified) $ git checkout -- DOSYA_ADI REVİZYON seviyesinde projeyi geri almak $ git reset --soft SHA $ git help reset 5 Nisan 13 Cuma
  28. 28. DOSYA SİLMEK / TAŞIMAK rm (remove) $ git rm DOSYA_ADI $ git rm file1.txt $ git help rm mv (move) $ git mv DOSYA_ADI TAŞINACAK/DOSYA_ADI $ git mv file1.txt yedek/file1.txt $ git help mv 5 Nisan 13 Cuma
  29. 29. VERSİYONLAMA YAPMA! Bazı dosyaları ya da dizinleri sürüm kontrolü dışında tutmak gerekebilir. Bunun için: .gitignore dosyasını kullanıyoruz. 5 Nisan 13 Cuma
  30. 30. .gitignore $ touch .gitignore $ echo "*.jpg" >> .gitignore $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # ## .gitignore nothing added to commit but untracked files present (use "git add" to track) $ git commit -m "jpg dosyaları sürüm kontrolünden çıkartıldı" 5 Nisan 13 Cuma
  31. 31. .gitignore $ cp ~/Desktop/Linus_Torvalds.jpg . $ git status nothing to commit, working directory clean $ ls -al 5 Nisan 13 Cuma
  32. 32. BRANCH (DALLANMAK) $ git branch $ git branch -r # yerel branch’leri listeler # uzak branch’leri listeler Ağaç yapısını, kodu ve depoyu bozmadan kopyalar çıkartmak ve daha sonra bu kopyaları ana yapıya entegre etmek $ git help branch 5 Nisan 13 Cuma
  33. 33. BRANCH (DALLANMAK) $ $ # $ 5 Nisan 13 Cuma git branch deneme git checkout deneme Switched to branch 'deneme' git branch
  34. 34. BRANCH (DALLANMAK) master dosya3.txt $ git help branch 5 Nisan 13 Cuma deneme file_test.txt
  35. 35. BRANCH (DALLANMAK) $ git log --graph --decorate --oneline --all 4a24e17 5 Nisan 13 Cuma
  36. 36. BRANCH (DALLANMAK) $ git branch BRANCH_ADI REVİZYON $ git branch deneme2 4a24e17 İstediğiniz herhangi bir revizyondan da branch oluşturabilirsiniz. $ git help branch 5 Nisan 13 Cuma
  37. 37. MERGE (BİRLEŞTİRMEK) $ git merge BRANCH_ADI $ git merge deneme deneme branch’indeki tüm değişiklikleri master’a taşıyoruz. 5 Nisan 13 Cuma
  38. 38. MERGE (BİRLEŞTİRMEK) deneme branch’inden geldi $ git help merge 5 Nisan 13 Cuma
  39. 39. CONFLICT (ÇAKIŞMA) Farklı branch’lerde, aynı isimli dosyalarda değişiklik yapalım. deneme $ $ $ $ git checkout deneme echo "2.satır" >> file_test.txt git add file_test.txt git commit -m "file_test.txt'ye 2.satır eklendi" master $ $ $ $ git checkout master echo "master'daki file_test.txt'ye 2.satır" >> file_test.txt git add file_test.txt git ci -m "master'daki file_test.txt'ye 2.satır eklendi" 5 Nisan 13 Cuma
  40. 40. CONFLICT (ÇAKIŞMA) $ git merge deneme # ve çakışma yaşanır! Auto-merging file_test.txt CONFLICT (content): Merge conflict in file_test.txt Automatic merge failed; fix conflicts and then commit the result. 5 Nisan 13 Cuma
  41. 41. CONFLICT (ÇAKIŞMA) $ git add file_test.txt $ git commit -m "çakışma düzeltildi" 5 Nisan 13 Cuma
  42. 42. BRANCH SİLMEK $ git branch -d BRANCH_ADI $ git push origin :BRANCH_ADI # yerel # uzaktaki İşi biten branch’i düzeni korumak adına silebilirsiniz. 5 Nisan 13 Cuma
  43. 43. TAG (ETİKET) $ git tag $ git ls-remote --tags # yerel tag’leri listeler # uzak branch’leri listeler Bulunduğunuz an’dan / branch’den versiyon oluşturmak ya da o an’ı etiketlemek için kullanılır. http://bit.ly/git-tag 5 Nisan 13 Cuma
  44. 44. TAG (ETİKET) $ git tag ETİKET_ADI $ git tag -a ETİKET_ADI -m “COMMIT Mesajı” İstediğiniz herhangi bir revizyondan da TAG yapmanız mümkün. Annotated TAG / Not düşülmüş Etiket $ git help tag 5 Nisan 13 Cuma
  45. 45. TAG (ETİKET) Aynı branch gibi çalışır. checkout edilebilirler. V1.0 İlk commit. İçinde hiçbir şey yok. *.jpg’de ignore edildiği için kontrol dışında! 5 Nisan 13 Cuma
  46. 46. TAG (ETİKET) SİLMEK $ git tag -d ETİKET_ADI $ git push origin :ETİKET_ADI # yerel # uzaktaki Aynı branch’lerdeki gibi, tag’leri de silebilirsiniz. $ git help tag 5 Nisan 13 Cuma
  47. 47. `git-blame` $ git blame DOSYA_ADI $ git blame dosya1.txt Hangi kullanıcı, hangi dosyada ne işlem yapmış, ne değiştirmiş, kim kod’u bozmuş! $ git help blame 5 Nisan 13 Cuma
  48. 48. `git-blame` SHA AUTHOR ve TARİH $ git help blame 5 Nisan 13 Cuma MESAJ
  49. 49. `git-diff` $ git diff HEAD^ HEAD file_test.txt `diff`ile versiyonlar arasındaki farkları görüntülemeye yarar. $ git help diff 5 Nisan 13 Cuma
  50. 50. `git-diff` $ git diff HEAD^ HEAD file_test.txt 5 Nisan 13 Cuma
  51. 51. `git-diff` $ echo "3.satır" >> file_test.txt $ git diff file_test.txt 5 Nisan 13 Cuma
  52. 52. UZAK DEPO (REMOTE) Kişisel Sunucu Git Repo Sağlayıcılar 5 Nisan 13 Cuma
  53. 53. UZAK DEPO (REMOTE) Kişisel Sunucu $ $ $ $ $ mkdir /git/depo/projem.git cd /git/depo/projem.git git init --bare git config receive.denyCurrentBranch false git repo-config core.sharedRepository true $ git clone git+ssh://kullanici@sunucu/git/depo/projem.git $ git clone git+ssh://sunucu/git/depo/projem.git 5 Nisan 13 Cuma
  54. 54. UZAK DEPO (REMOTE) Kişisel Sunucu ■ http://gitorious.org/download ■ http://gitlab.org ■ https://github.com/sitaramc/gitolite ■ http://gitblit.com 5 Nisan 13 Cuma
  55. 55. UZAK DEPO (REMOTE) $ git clone REPO_ADRESİ ssh:// ftp(s):// git:// rsync:// http(s):// file:// $ git help clone 5 Nisan 13 Cuma
  56. 56. UZAK DEPO (REMOTE) Git Repo Sağlayıcılar 5 Nisan 13 Cuma
  57. 57. Bitbucket 5 Nisan 13 Cuma
  58. 58. Bitbucket 5 Nisan 13 Cuma
  59. 59. 5 Nisan 13 Cuma
  60. 60. UZAK DEPO (REMOTE) Yerel git deposunu Bitbucket’a taşımak için önce Bitbucket’da depo oluşturun daha sonra yereldeki depoya REMOTE ekleyin. $ git remote add REMOTE_ADI URL $ git help remote 5 Nisan 13 Cuma
  61. 61. UZAK DEPO (REMOTE) $ git remote add origin ssh://git@bitbucket.org/vigo/oyg2013-git.git $ git remote add bitbucket ssh://git@bitbucket.org/vigo/oyg2013-git.git $ git push -u origin master $ git push $ git push bitbucket $ git push bitbucket master Track Remote Branch 5 Nisan 13 Cuma
  62. 62. github 5 Nisan 13 Cuma
  63. 63. github 5 Nisan 13 Cuma
  64. 64. 5 Nisan 13 Cuma
  65. 65. UZAK DEPO (REMOTE) Uzaktaki değişiklikleri almak için pull ve fetch $ git pull $ git pull REMOTE_ADI BRANCH_ADI $ git pull --all $ git help pull 5 Nisan 13 Cuma
  66. 66. UZAK DEPO (REMOTE) Uzaktaki değişiklikleri almak için pull ve fetch $ git fetch $ git fetch REMOTE_ADI BRANCH_ADI $ git fetch --all $ git help fetch 5 Nisan 13 Cuma
  67. 67. UZAK DEPO (REMOTE) pull ve fetch arasındaki fark; pull : önce fetch sonra merge fetch : sadece fetch $ git help pull && git help fetch 5 Nisan 13 Cuma
  68. 68. UZAK DEPO (REMOTE) $ git help fetch 5 Nisan 13 Cuma
  69. 69. KONFİGÜRASYON .gitconfig Kısa yol tanımlamaları ve SHELL komutları çalıştırılabilir. $ git help config 5 Nisan 13 Cuma
  70. 70. KONFİGÜRASYON .gitconfig ! işareti $ git help config 5 Nisan 13 Cuma
  71. 71. GIT FLOW Standart repo’daki master branch, gitflow’da develop branch’i olur. http://nvie.com/posts/a-successful-git-branching-model/ 5 Nisan 13 Cuma
  72. 72. GIT FLOW Tüm kullanıcılar git-flow kurmalı ve master / develop branch’leri olmalı $ $ $ $ $ git git git git git flow flow flow flow flow init feature feature release release start ozellik1 finish ozellik1 start r1 finish 'r1' https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  73. 73. GIT FLOW $ git flow feature finish ozellik1 ■ feature/ozellik1, develop’la merge ■ feature/ozellik1 siliniyor ■ develop branch’e geçiliyor (checkout) https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  74. 74. GIT FLOW $ git flow release finish 'r1' ■ önce origin’den fetch ■ release/r1 master’la merge ■ ‘r1’ tag’lenir ■ develop’la merge ■ release/r1 silinir https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  75. 75. DİĞER YARDIMCI ARAÇLAR Komut satırı dışında grafik arayüzle kullanılabilecek GIT araçları 5 Nisan 13 Cuma
  76. 76. DİĞER YARDIMCI ARAÇLAR Komut satırı dışında grafik arayüzle kullanılabilecek GIT araçları 5 Nisan 13 Cuma
  77. 77. DİĞER YARDIMCI ARAÇLAR ÜCRETSİZ ÜCRETLİ Github App Tower Sourcetree Gitbox GitX(L) SmartGit git-cola git-cola http://git-scm.com/downloads/guis 5 Nisan 13 Cuma
  78. 78. DİĞER YARDIMCI ARAÇLAR tig http://jonas.nitro.dk/tig/ 5 Nisan 13 Cuma
  79. 79. KİMLER KULLANIYOR? ■ ■ ■ ■ ■ 5 Nisan 13 Cuma Google Facebook Twitter Microsoft Perl ■ ■ ■ ■ ■ Android Linux QT Gnome PostgreSQL
  80. 80. KAYNAKLAR ■ ■ ■ ■ ■ http://git.gelistiriciyiz.biz/ * http://git-scm.com http://try.github.com http://gitimmersion.com http://www.codeschool.com/courses/git-real * Türkçe 5 Nisan 13 Cuma
  81. 81. Kaynak Kod https://github.com/vigo/oyg2013-git https://bitbucket.org/vigo/oyg2013-git 5 Nisan 13 Cuma
  82. 82. Teşekkürler @ugurozyilmazel @vigobronx http://ugur.ozyilmazel.com 5 Nisan 13 Cuma

×