[開発] Git は嫌う前に全貌を把握すべき

■ 想定読者                                                  
        SVN に慣れ親しんでいて どうにも Git に大して抵抗・恐怖・嫌悪感を抱いている人                                  
                                           
■ 目的                                           
        Git とお友達になる                                       
        親友になる気は毛頭ない                               
                                           
■ 抵抗・恐怖・嫌悪感の根源                                                  
        招待がモヤっとしている                               
        command が謎過ぎる。感覚で打てない。実態にどのように反映しているのかが分からないし、どのように反映されるべきかもも謎い                                      
                                           
Git って何よ?                                                      
        version管理する SVN (Subversion) とタスク管理する Trac (Edgewall Software) を合体させたようなモノ                                         
        プラス、review の仕組みが組み込まれたモノ                                         
                                           
Git と SVN の大きな流れの違い                                                     
        Git の場合                                       
                issue 作る                         
                issue 毎に branch を作る               
                local で改修して local の branch に commit する                  
                remote の branch に push する                   
                GitHub ( or GitLab or GitBucket ) 経由で master program への改修 code の merge request を作る                        
                merge request を受けて第三者が code review して、master に merge する                     
                                           
        SVN の場合                                    
                issue/task 管理は Trac で実施                      
                適宜、改修して SVN の trunck に commit する                     
                ※ commit と issue の紐付けはマニュアル (Trac に revision 番号を記載など)                 
                ※ commit 前に review はない。 =regression risk を上げる。 commit 後も無かったり…                           
                                           
        以上から                                         
                Git は 品質管理にも重みを置いている。開発がある程度落ち着いているプロジェクトには非常に有用                 
                SVN はささっと commit したい速度重視型。                         
        ⇒ 一長一短。プロジェクト規模や状況に応じて使い分けるが良し                                    
                                           
■ official な Git の pros/cons                                                
        pros                                  
                分散version管理 ⇒使う一開発者的にはどうでもいい。知りたいの、ソコじゃない                        
                軽量 ⇒使う一開発者的にはどうでもいい。知りたいの、ソコじゃない               
                                           
        cons                                  
                file単位で version管理されていない                          
                text file でも rename と contents 変更を同時にやると git log --follow でファイルの履歴が追えなくなる                           
                # Git 的には履歴追跡とか不要な概念らしい               
                                           
■ Git command を叩く前に知っとけ!Git の4つの概念 (ファイルの状態を保存する場所)                                                      
        Working Tree = Working Copy = 作業ディレクトリ                            
                今、作業しているファイル達の部屋                           
        Index = ステージング・エリア ≒ git add files                                    
                コミットする為のファイルを登録する場所。                           
                全量でないが特定複数ファイルを一度にコミットしたい時に暫定置き場として大活躍するところ                        
                # ってか CLI だからこんな問題が生じるんじゃん?               
                # 自作自演感を拭えないのは私だけなのか?STS の Git な Plugin を使いこなせたらいいことあるかも                           
        Local Repository = Git リポジトリ                           
                リモートリポジトリに送るためのコミットを記録する場所                    
        Remote Repository                                        
                複数人で共有するためのリポジトリ                           
                                           
        img: http://www.atmarkit.co.jp/ait/articles/1307/05/news028_3.html                            
        img: http://www.slideshare.net/to_ueda/git-6821390                                    
                                           
■ 「.git」っていうファイル                                                    
        reposiotry の clone 時とかにできる。Git の全てが詰まってる。 e.g. object 格納領域, indext, ref, symref, etc.                                    
        object 格納領域 とは - file 情報やcommit 履歴の保存場所。以下4つから構成される                              
                ブロブ > 1つの file を現す object。 Version 管理対象の file 内容(だけ)を保持する                    
                ツリー > 1つのdirectory構造を現すもの。Pointerを持つ。                
                コミット > commitの日時やmessage、1つ前のcommitを指すpointerを持つ               
                タグ > 注釈 tag やpointerを持つ。                         
                                           
■ Git 代名詞に近いcommandたち と ファイルの移籍っぷり                                          
        [working copy] --> git add --> [staging area / index] --> git commit --> [local repository] --> git push --> [remote repository]                                       
        [working copy] <-- git checkout -- [staging area / index] <-- git reset <-- [remote repository]                                 
        [working copy] <-- git merge/rebase -- [local repository] <-- git fetch <-- [remote repository]                                 
        [working copy] <--------------- git pull <--------------- [remote repository]                                         
                                           
■ Git の代表的な command                                                    
        clone, fetch, pull                              
                clone - 何もないlocalに資材を取得する                     
                pull - remote repository に commit された最新の更新を local に取り込む                         
        checkout, switch, stash                                  
        add, rm, commit, push                                   
                新規ファイルの追加が改修の追加は、add して commit                        
                既存ファイルの削除は、rm して commit                   
                git add -u で変更あったファイルのみstagingするも一手。(この新規作成ファイルは含まれない)                           
                git push origin master の origin=remote repositoryの名称、master=branchの名称                          
        reset, revert                                      
                revert - 指定したコミットが持ち込んだ変更を打ち消すコミットを追加すること。                          
                                          ※ revertは、新規commitの追加のみで、既存commitの削除は無い     
                reset (index 再設定) - add で stage した資材を reset で unstage すること                      
                reset (HEAD 付け替え) - 特定の commit をHEADの付替えで実質的に削除すること。                   
                        ※ reset (HEAD付け替え) は、 soft, mixed, hard の option がある       
        merge, rebase                                  
                merge - 複数ブランチへの変更を1つにmergeすること                         
                rebase - branchの起点と特定のとに変更すること                     
        cherry-pick - 特定の commit だけを特定の branch に取り込むこと                                   
                                           
        log, show                                         
                git log -p > そのブランチのコミットログが全部表示される                 
                show > 特定のコミットの内容を表示させる                          
                        git show {最新のcommit のhash tag}             
                                = git show HEAD
                        1つ前の commit 内容が見たい場合
                                = git show HEAD^
                        2つ前の commit の場合   
                                = git show HEAD^^
                                = git show HEAD~2
        status - tracked/untracked = git に追跡/認識されているか否か                               
                追跡されている場合の状態は3つ unmodified, modified, staged                           
                                           
                                           
                                           
                                           
■ 個人的に Git を嫌う理由                                                     
        上記に加え、diff が使い難い。⇒ きっとソレに相当する Git 操作を知らないだけ                                       
        HEADって何?                               
                今いるブランチの最新のコミット。HEADが今いるブランチを決めている。                     
                git checkout な branch の switch は HEAD を移動させているだけ。                 
        stagingって何が嬉しいの?                                        
        forkって何?Clearなimageが欲しい                                        
                                           
■ おまけ                                                     
        STS に default で git の plugin ある                                      
        STS>Window>Show View>Git  Git Interactive Rebase, Git Reflog, Git Repositories, Git Staging, Git Tree Compare                            
                                                 
                                                 
ref.                                                  
Gitの良さが分からない? ちょっとそこに座れ, 2016/10/06                                                
https//www.kaitoy.xyz/2016/10/06/git-vs-subversion/                                                 
git resetとrevertを図解する, 2016/01/01                                                  
https//www.kaitoy.xyz/2016/01/01/git-revert-reset/                                                     
Gitのマージを図解する, 2015/12/28                                           
https//www.kaitoy.xyz/2015/12/28/git-merge/                                              
Gitのリポジトリの中身をなるべく正確に理解する, 2015/12/27                                           
https//www.kaitoy.xyz/2015/12/27/git-repository/                                                       
Git初心者に捧ぐ!Gitの「これなんで?」を解説します。, 2013/09/04                                             
http//kray.jp/blog/git-why-explanation/                                         
Git の仕組みを5分で理解する!, 2014/08/05                                            
http//qiita.com/hshimo/items/ab91b99cd61724127aa7                                              
Pro Git 日本語版電子書籍公開サイト                                                     
https//progit-ja.github.io/#download                                            
https//git-scm.com/book/ja/v2                                                    
git における stage, commit, branch, 2014/09/04                                                     
http//blog.bonar.jp/entry/2014/09/04/223048                                               
EclipseでGitを使う(4)プッシュまでの流れをまとめる。, 2015/07/01                                          
http//tech.pjin.jp/blog/2015/07/01/git-on-eclipse-4-how-to-push/    

tag : Git GitHub GitBucket SVN add commit push pull merge rebase

2017-02-15 21:14 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud