Git & Git Workflows

Download Git & Git Workflows

Post on 11-Jan-2017

337 views

Category:

Software

2 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>GIT &amp; WORKFLOWSGIT, CENTRALIZED, FEATURE BRANCH, GITFLOW</p></li><li><p>GIT &amp; GITWORKFLOWS</p><p>* ae5be5a - (origin/master, master) GittiGidiyor/eBay (Haziran 2012) * 42964c4 - Octeth - Sendloop.com (Aralik 2010) * 0c7bd79 - CNT Bilisim Teknolojisi - Tamindir.com (Kasim 2007) * 523656c - Reklamarasi Advertising &amp; Web Technologies (Eylul 2006) </p><p>Senior Software Engineer at GittiGidiyor/eBay </p><p>2006dan beri yazlm gelitiriyorum. </p><p>Zend Certified Engineer - 2012 </p><p>KIVAN ERTEN - 1984 IZMIR</p><p>tr.linkedin.com/in/kivancerten</p><p>http://tr.linkedin.com/in/kivancerten</p></li><li><p>GIT BASICS</p><p>WHAT IS GIT</p><p> A Version Control System </p><p> Linus Torvalds in 2005 (Linux Creator) </p><p> Distrubuted, Local Repository support, Fast Speed, Strong support for branch based development. </p><p> Everybody use git (Facebook, Eclipse, PHP, GittiGidiyor:)</p></li><li><p>GIT BASICS</p><p>$ mkdir uberproject</p><p>$ cd uberproject</p><p>$ git init </p><p>Initialized empty Git repository in /Users/kivanc/Projects/uberproject/.git/</p><p>Bir repository yaratmak iin, herhangi bir dizinde git init komutunu altrmanz yeterlidir. Dizinin bo olmasna gerek yoktur. </p><p>bare parametresi kullanldnda working directorysi olmayan bir repository yaratlr. Central repository bare repository olarak yaratlmas tercih edilir. </p><p>git init</p><p>git init --bare /dir/uberproject.git</p><p>INITIALIZE REPOSITORY</p><p>4</p></li><li><p>GIT BASICS</p><p>REPO-TO-REPO COLLABORATION</p><p>5</p><p>Gitin alma sistemi repository den repository olacak ekilde dizayn edilmitir. Commit ler bir repository den dierine gnderilip - alnr.</p></li><li><p>GIT BASICS</p><p>$ git clone https://github.com/kivancerten/php_game_of_life.git</p><p>Cloning into 'php_game_of_life'...</p><p>remote: Counting objects: 38, done.</p><p>remote: Total 38 (delta 0), reused 0 (delta 0), pack-reused 38</p><p>Unpacking objects: 100% (38/38), done</p><p>git clone uzak repositoryi kopyalar. Clone ilemi, otomatik olarak uzak repository ile origin isminde bir balant yaratr. </p><p>Eer bir proje halihazrda uzak bir repository de bulunuyor ise git clone, local gelitirmeye balamak iin en ok tercih edilen yntemdir. </p><p>git clone </p><p>CLONE A REPOSITORY</p><p>6</p></li><li><p>GIT BASICS</p><p>GIT CONFIG</p><p>7</p><p>Git config, git le ilgili tm konfigurasyonlarn yapld komuttur. Kullanc kimlik bilgisinden, varsaylan text editre kadar birok ayar bu komut ile yaplr.</p><p>git config user.name Kivanc Erten"</p><p>git config --global user.name Kivanc Erten"</p><p>git config --global user.email kivanc@kivanc.com</p><p>git config --system core.editor vim</p><p>git config alias.st status</p><p>/.git/config Repositorye zg ayarlar. </p><p>~/.gitconfig Kullancya zg ayarlar global parametresi kullanldnda buraya yazlr. </p><p>$(prefix)/etc/gitconfig Sisteme zg ayarlar. system parametresi. O makinedeki tm repository ler iin geerli ayarlar.</p></li><li><p>GIT BASICS</p><p>GIT AREAS : WORKING DIRECTORY - STAGE - REPOSITORY</p><p>8</p><p>Gitte dosyalarnzn olabilecei 3 farkl durum vardr. Modified, Committed, Staged. </p><p>Committed : Deiikliklerin veritabanna kaydedilmi ve verinin gvenli olduu durum. Snapshot. Staged : Deiiklik yaplan dosyann bir sonraki commit ile kaydedilmek iin iaretlenmi olduu durum. Modified : Deiiklik yaplm ancak kaydedilmemi durum. </p></li><li><p>GIT BASICS</p><p>SAVING CHANGES 1/2</p><p>9</p><p>git add komutu working directory deki deilikleri staging area ya tamaya yarar. Deiikliklerin bir sonraki commit de gncellenmesini istediimizi bu ekilde belirtiriz. </p><p>git add git add </p><p>$ git status</p><p># Untracked files:</p><p># (use "git add ..." to include in what will be committed)</p><p># test.txt</p><p>$ git add test.txt</p><p>$ git status</p><p># On branch master</p><p>#</p><p># Initial commit</p><p>#</p><p># Changes to be committed:</p><p># (use "git rm --cached ..." to unstage)</p><p>#</p><p># new file: test.txt</p></li><li><p>GIT BASICS</p><p>SAVING CHANGES 2/2</p><p>10</p><p>git commit komutu staging area daki deiikliklerin repositoryye kaydedilmesi iin kullanlr. </p><p>Commit edilmi deiiklikler local repository de (veritaban da diyebiliriz) saklanr. </p><p>Gitte delta deiiklikler deil snapshot lar tutulur. Her commit esiz bir SHA-1 hash codu ile git historysine kaydedilir. </p><p>git commit #Commit mesaj girilmesi iin text editr aar</p><p>git commit -a #Deiiklik yaplm tm dosyalar ekleyerek commit</p><p>git commit -m #Commit mesaji belirtilerek commit.</p><p>git commit -a m </p><p>git commit ammend #Bir nceki commite deiiklik eklemek iin kullanlr.</p></li><li><p>GIT BASICS</p><p>BRANCHING &amp; REMOTE TRACKING</p><p>11</p></li><li><p>GIT BASICS</p><p>BRANCHING &amp; REMOTE TRACKING</p><p>12</p></li><li><p>GIT BASICS</p><p>REMOTE BRANCHING</p><p>13</p></li><li><p>GIT BASICS</p><p>BRANCHING &amp; REMOTE TRACKING</p><p>14</p></li><li><p>GIT BASICS</p><p>BRANCHING &amp; REMOTE TRACKING</p><p>15</p></li><li><p>GIT BASICS</p><p>LOOKING THE REPOSITORY 1/2</p><p>16</p><p>git status komutu hangi dosyalarn, hangi durumda olduunu grmek iin kullanlr. </p><p>Bu durumlar unlardr : staged, unstaged, untracked</p><p># Edit hello.php</p><p>$ git status</p><p># hello.php is listed under "Changes not staged for commit"</p><p>$ git add hello.php</p><p>$ git status</p><p># hello.php is listed under "Changes to be committed"</p><p>$ git commit</p><p>$ git status</p><p># nothing to commit (working directory clean)</p></li><li><p>GIT BASICS</p><p>LOOKING THE REPOSITORY 2/2</p><p>17</p><p>git log komutu daha nce commitlenmi snapshotlarn listelenmesi, filtrelenmesi ve aranmas iin kullanlr. Repositorynin gemiini gsteren bir listedir. </p><p>git log</p><p>git log -n </p><p>git log --oneline</p><p>$ git logcommit ae5be5af8f4a9808e94580a79a68ce36f59eb946Author: kivancerten Date: Mon Feb 3 10:03:30 2014 +0200</p><p> Update Game.php</p><p>commit 42964c4acc3f2848a703e5e4f3ca389bec755797Author: kivancerten Date: Mon Feb 3 09:59:52 2014 +0200</p><p> Update Display.php</p><p>commit 0c7bd79d07521923484c4766366860bf8279d4f9Author: kivancerten Date: Mon Feb 3 09:32:47 2014 +0200</p><p> Update README.md</p></li><li><p>GIT BASICS</p><p>BRANCHING &amp; MERGING</p><p>18</p><p>Git birbirinden tamamen bamsz birok yerel branchiniz olmasna imkan salar. Bu branchlerin yaratlmas, birbirleri ile merge edilmesi ve silinmesi sadece saniyeler alr. Git bu ilemlerin yaplmasn olduka kolaylatrr.</p><p>$ git checkout -b new-branch Switched to a new branch new-branch</p><p>$ vim index.php</p><p>$ git commit -am Kullanc verisi validasyonu eklendi" Created commit 670e353: Kullanc verisi validasyonu eklendi 1 files changed, 15 insertions(+), 1 deletions(-)</p><p>$ git checkout master Switched to branch "master"</p><p>$ git merge new-branch Updating e53ac7a..670e353 Fast forward index.php | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletions(-)</p></li><li><p>GIT WORKFLOWS</p><p>GIT WORKFLOWS</p><p>19</p><p>Centralized Workflow </p><p>Feature Branch Workflow </p><p>Gitflow</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>20</p><p>Merkezi repository birisi tarafndan yaratlr.ssh user@host git init --bare /path/to/repo.git</p><p>Gelitiriciler, projeyi merkezi repodan kendi alma ortamlarna git clone komutu ile download ederler. </p><p>Git clone repositoryyi download ettikten sonra, origin adnda bir remote balant ile clone edilen central repository ile local repository arasnda ba oluturur.git clone ssh://user@host/path/to/repo.git</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>21</p><p>Centralized Workflowu bir rnek zerinden aklamaya alalm.</p><p>Ali ve Aye git clone komutu ile remote repositoryyi kendi alma ortamlarna download ederler.</p><p>git clone ssh://user@host/path/to/repo.git</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>22</p><p>Aye kendi gelitirmelerini yapp commit ler. </p><p>Henz centralized repositoryye push etmez.</p><p>git status # View the state of the repo</p><p>git add # Stage a file</p><p>git commit # Commit a file</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>23</p><p>git status # View the state of the repo</p><p>git add # Stage a file</p><p>git commit # Commit a file</p><p>Ali de kendi gelitirmelerini yapp commit ler. </p><p>O da centralized repositoryye push etmez.</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>24</p><p>Aye kendi yapt deiiklikleri central repositoryye gndermek ister ve git push komutunu kullanr.</p><p>git push origin master</p><p>origin in daha nce Ali ve Ayenin git clone komutu ile remote repositoryden projeyi download ederlerken oluan uzak balant olduunu unutmayalm. </p><p>Aye projeyi git clone ile download ettiinden beri central repositoryde herhangi bir gncelleme olmadndan, git push komutu beklendii gibi alr. Herhangi bir conflict olmadan commitler local repository den central repositoryye gnderlilir.</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW</p><p>25</p><p>Ali kendi yapt deiiklikleri central repositoryye gndermek ister ve git push komutunu kullanr.</p><p>git push origin master</p><p>error: failed to push some refs to '/path/to/repo.git'</p><p>hint: Updates were rejected because the tip of your current branch is behind</p><p>hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')</p><p>hint: before pushing again.</p><p>hint: See the 'Note about fast-forwards' in 'git push --help' for details.</p><p>?Ali central repositorydeki deiiklikleri kendi local alma ortamna </p><p>alabilmek iin iki ayr yaklamdan birini semek durumundadr. </p><p>merge veya rebase</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW - REBASE</p><p>26</p><p>git pull --rebase origin master</p><p>rebase parametresi Gite ilk nce centralized repositorydeki deiiklikleri locale almasn, ardndan Alinin yapt deiiklikleri bunlarn zerine eklemesini syler. </p><p>Alinin deiiklikleri commit history de en sonda grntlenecektir. </p><p>rebase parametresi kullanlmaz ise Git varsaylan olarak merge ilemi yapp, fazladan bir merge commit oluturacaktr. Centralized Workflow yaklamnda rebase ilemi dorusal bir history oluturduu iin ve fazladan bir merge commite gerek kalmad iin tercih edilmektedir.</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW - REBASE</p><p>27</p><p>git pull --rebase origin master</p><p>rebase parametresi ilk nce centralized repositoryden gelen commitleri, local repositoryye ekip, local ve remote repositoryyi senkronize eder. </p><p>Daha sonra local deki yeni commitleri (Alinin commitlerini) tek tek merge etmeye alr. Tm commitlerin bir seferde merge edilmesi yerine, her commit tek tek merge edilir. Bu sayede byk bir conflict resolve etmek yerine her admda kk deiiklikler resolve edilir. </p><p>Bu method, History nin daha okunabilir olmasn ve olas bir geri dnme durumunu kolaylatrmay salar.</p><p>Ali eer var ise merge conflictlerini resolve etmelidir.</p></li><li><p>GIT WORKFLOWS</p><p>CENTRALIZED WORKFLOW - REBASE</p><p>28</p><p>CONFLICT (content): Merge conflict in </p><p>git rebase continue Gite conflict kan commit in resolve edildiini, sradaki commit in merge ilemine geilmesini syler. Tm commitler merge edildikten sonra origine push edilir.</p><p>Git commitleri sra sra merge ederken conflict kar ise aadakine benzer bir mesaj ile karlarz. </p><p>$ git status</p><p># Unmerged paths:</p><p># (use "git reset HEAD ..." to unstage)</p><p># (use "git add/rm ..." as appropriate to mark resolution)</p><p>#</p><p># both modified: </p><p>git add </p><p>git rebase --continue</p><p>git push origin master</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>29</p><p> Feature Branch modelinde central repository hala kullanlr ve master branch projenin tm historysini tutmaya devam eder. </p><p> Gelitiriciler direkt olarak master branche commitlemek yerine, yeni bir i zerinde almaya balarken o ie zel bir branch (feature branches) yaratlr. Tm gelitirmeler o branch zerinden yrtlr. </p><p> Feature branchler anlaml bir isme sahip olmaldr. rnein: feature/issue-6729 ya da navigation-bar</p><p> Gitin ileyii asndan master branch ile feature branchler arasnda teknik bir ayrm yoktur. Gelitirici master branch zerinde yapt hertrl ilemi feature branch zerinde de yapabilir (commit, add, stage, merge, vs). </p><p> Feature branchler central repositoryye gnderilir ve gerekiyorsa dier gelitiriciler ile ortak allablir. </p><p> master branch nihayetinde tm branchlerdeki deiiklikleri ierecek olan, gvenilir, test edilmi, alan kodlarn bulunduu tek branch dir. </p><p> master branch tm proje varlk sresi boyunca hayatta olan tek branchdir.</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW - PULL REQUEST</p><p>30</p><p>Gelitirici bir i zerinde almasn bitirdiinde feature branchi mastera merge etmek yerine Bir Pull Request ya da Merge Request oluturur. </p><p>Pull Request direkt olarak git in bir zellii deil, github, bitbucket, gitlab gibi repository ynetim aralarnn bir zelliidir.</p><p>Gitlab Bitbucket Github</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>31</p><p>git checkout -b new-feature-branch master</p><p>Feature Branch Workflowu bir rnek ile aklayalm. </p><p>Aye master branch den yeni bir feature branch yaratarak almaya balar.</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>32</p><p>git push -u origin new-feature-branch</p><p>Aye new-feature-branch zerinde gelitirmelerini yapar. </p><p>Central rapositoryye push edip yemee kar. Bir sre bilgisayardan uzaklarken yaplan deiiklikleri push etmek faydaldr, nk yaptmz deiikliklerin bir yedeini central repositoryye gndermi oluruz.</p><p>git status</p><p>git add </p><p>git commit</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>33</p><p>git push</p><p>Aye yemekten dndkten sonra almalarn tamamlar. lerini master a merge etmeden nce Pull Request (github) ya da Merge Request (gitlab) oluturur. Bunu yapmadan nce tm almalarn central repositoryye gnderdiinden emin olmak iin git push yapar.</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>34</p><p>Ali, Pull Requesti alr. Bu aamada code review yaplr, kod zerinde tartlr vs. </p><p>Gitlab, Github ve Bitbucket bu aamada yeni gelen deiikliklerin grlebildii, yorum yazlabilen bir arayz sunar. </p><p>Ali ii Ayeye geri gndemeye karar verir. Aye deiiklikleri yaptktan sonra tekrar tekrar push eder bu ilem iki kii hem fikir olup kod master a gidecek duruma gelene kadar tekrarlanr.</p></li><li><p>GIT WORKFLOWS</p><p>FEATURE BRANCH WORKFLOW</p><p>35</p><p>Aye konuulan deiiklikleri yapar (add, commit) ve central repositoryye push eder. Push edilen her deiiklik daha nce yaratlan Pull Requestte grnr. </p><p>Ali isterse Ayenin alt branchi pull edip kendisi de deiiklikler yapabilir. </p><p>Gitlab, Github veya Bitbucket zerinden Pull Request merge edileblir veya ayn ilemi elle yapmak iin :</p><p>git checkout master</p><p>git pull</p><p>git pull origin new-feature-branch</p><p>git push</p><p>git checkout master</p><p>git pull</p><p>git merge new-feature-branch</p><p>ya da</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>36</p><p>Feature Branch Workflowdan farkl olarak kalc olarak iki branch vardr: master ve develop</p><p>1.Master branch, release gemiimizin tag ler ile tutan ana branch dir. </p><p>2.Feature branchler yine mevcuttur ancak master yerine develop branchinden yaratlrlar. </p><p>3.Gelitirilmesi tamamlanan feature branchler develop branch ine merge edilir. </p><p>4.Develop branch inde yeni bir srm kacak kadar feature biriktiinde veya nceden belirlenmi olan release zaman geldiinde, develop branchinden yeni bir release branchi yaratlr. (release in version numaras yada ad ile, rnein release-1.1.2 ya da release/ubersearch ). </p><p>5.release branch zerinde sadece bugfix ler yaplabir. Yeni feature kesinlikle gelitirilmez. </p><p>6.Release branchi production ready hale geldiinde, master brancha merge edilir ve version numaras ile taglenir.</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>37</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>38</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>39</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>40</p></li><li><p>GIT WORKFLOWS</p><p>GITFLOW WORKFLOW</p><p>41</p></li><li><p>GIT WORKFLOWS</p><p>REFERANSLAR</p><p>42</p><p> https://git-scm.com</p><p> https://www.atlassian.com/git/tutorials/</p><p> http://www.sbf5.com/~cduan/technical/git/</p><p> http://gitready.com/</p><p>tr.linkedin.com/in/kivancerten</p><p>https://git-scm.comhttps://www.atlassian.com/git/tutorials/http://www.sbf5.com/~cduan/technical/git/http://gitready.com/http://tr.linkedin.com/in/kivancerten</p></li></ul>

Recommended

View more >