Git學習教程(三):Git工作流程

jopen 12年前發布 | 66K 次閱讀 Git 版本控制系統

第三課   Git 工作流程

    與遠程倉庫同步,修改,載入(stage)和提交項目


現在你已經有一個git本地倉庫,一切都配置完畢。然后該怎么辦?
一般來說,跟其他的源碼控制系統的工作流程沒什么兩樣,唯一一個區別就是載入(stage)的過程。整個工作流程大致是這樣(流程1):

  • 與遠程倉庫同步
    </li>

  • 修改文件
    </li>

  • 查看變更
    </li>

  • 載入變更
    </li>

  • 提交載入的變更
    </li>

  • 重復
    </li>

  • 上傳
    </li> </div>


    這是最復雜的情況,如果你不與別人合作開發的話,就不需要上傳到倉庫中去(流程2):

    * 修改文件

    • 提交變更
    • 重復 </div>
      簡單吧。要記得,git是分布式的,所以如果不是合作項目的話,實際上不需要提交到一個公共的共享服務器上--你可以像使用RCS一樣,只用來追蹤本地文件變更。下面,讓我們先來看個簡單的示例,緊接著再來看用git協作開發的實例。
      簡單示例
      </div>
      如果你想跟著做這個例子,請克隆這個項目:
      $ git clone git://github.com/schacon/simplegit
      </div>

      例子開始,按照流程2,我們首先要修改README文件,將自己添加到項目作者中去。所以我們修改這個文件。然后我們希望提交這個變更,所以我們運行 'git commit -a' 命令。 -a 的意思是告訴git先將變更了的文件先載入(stage),然后提交-我們后面會通過'staging area'命令實現,但是現在運行 'git commit -a' 命令,效果跟在SVN中使用'commit'命令一樣。
      $ git commit -a
      </div>
      執行完之后,一個提交信息的提示會出現在編輯器中(這里$EDITOR環境變量或'core.editor'這兩個git配置變量的默認值都是vim)類似下面這樣的內容:
      _
      # Please enter the commit message for your changes. Lines starting
      # with '#' will be ignored, and an empty message aborts the commit.
      # On branch main
      # Changes to be committed:
      #   (use "git reset HEAD ..." to unstage)
      #
      # modified:   README
      #                                                                     
      ~                                                                                     
      ~                                                                                     
      ".git/COMMIT_EDITMSG" 9L, 253C
      </div> </div>
      輸入一些提交的信息,譬如"added myself to the README as an author"然后退出。
      vim操作提示:
      按下I,o,a進入編輯模式,編輯完畢按Esc,輸入:wq保存退出。
      </div> </div>
      然后會看到這樣的提示:

      [master]: created 5896d4d: "added myself to the README as an author"
       1 files changed, 2 insertions(+), 1 deletions(-)
      </div>
      顯示我們剛剛輸入的提交信息,并且有一組關于這次提交項目中文件變更的統計數字。同時還給我們一個提交的校驗和,'5896d4d',這個校驗和可以用來日后確切的查看這次提交的細節。
      這就是簡單用例。修改文件,'git commit -a',重復
      協作開發示例
      </div> </div>
      現在,我們來介紹一個復雜點的實例,這次我們使用遠程倉庫,將項目上傳上去,從而跟其他的開發者一起協同工作。同時,我們會介紹staging area。
      如果你會從遠程倉庫中克隆項目,那么與遠程倉庫項目同步也是相當簡單的--只需要執行'git pull'.如果是遠程倉庫項目沒有變化,也就是說其他的開發者沒有對項目進行變更,會顯示這樣的信息:
      Already up-to-date.
      相反,執行這條命令之后會將你上次同步之后遠程倉庫中的變更同步到本地項目中,并且git會合并這些新的變更:
      $ git pull
      Updating c264051..b04dc3d
      Fast forward
       lib/simplegit.rb |    4 ++++
       1 files changed, 4 insertions(+), 0 deletions(-)
      </div> </div>
      例子開始,重新克隆遠程倉庫中的項目,修改README文件和lib/simplegit.rb文件(不要執行git commit -a)。現在你可以使用'git status'命令來查看工作目錄發生了什么變更:
      $ git status
      # On branch master
      # Changed but not updated:
      #   (use "git add ..." to update what will be committed)
      #   (use "git checkout -- ..." to discard changes in working directory)
      #
      modified:   README
      modified:   lib/simplegit.rb
      #
      no changes added to commit (use "git add" and/or "git commit -a")
      </div>
      我們看到,有兩個文件是在"changed but not updated"段落中出現 ,這意味著這兩個文件還沒有載入(unstaged). 如果現在我們提交,什么也不會發生。也就是說文件必須先載入(stage),然后才能提交。
       Git學習教程(三):Git工作流程
      所以,我們先來載入(stage) 文件,git中使用'git add'命令不僅可以開始追逐文件而且可以對他們載入stage變更。所以讓我們載入(stage) README文件的變更,然后再來查看一下狀態。
      $ git add README
      $ git status
      # On branch master
      # Changes to be committed:
      #   (use "git reset HEAD ..." to unstage)
      #
      # modified:   README
      #
      # Changed but not updated:
      #   (use "git add ..." to update what will be committed)
      #   (use "git checkout -- ..." to discard changes in working directory)
      #
      modified:   lib/simplegit.rb
      </div> </div>
      現在'lib/simplegit.rb'文件還是未載入(unstaged), 但是README文件現在已經到了'changes to be committed'段落中-它幾經載入(stage)了。現在如果我們運行提交命令(不要-a,這個會自動stage所有的東西),只有這個文件會被提 交-而simplegit.rb依然是unstaged。這時,我們使用-m選項來執行'git commit',這樣后面跟上字符串表示這次提交的信息。
      $ git commit -m 'updated the README'
      [master]: created 14bb3c6: "updated the README"
       1 files changed, 1 insertions(+), 2 deletions(-)
      </div>
      如果現在再執行'git status',我們會看到stage之后的文件現在已經提交了,只剩下了unstaged的'simplegit.rb'文件。
      $ git status
      # On branch master
      # Your branch is ahead of 'origin/master' by 1 commit.
      #
      # Changed but not updated:
      #   (use "git add ..." to update what will be committed)
      #   (use "git checkout -- ..." to discard changes in working directory)
      #
      modified:   lib/simplegit.rb
      #

      </div>
      現在我們可以stage并且提交這個文件:
      $ git commit -a -m 'added a staging command to the library'
      [master]: created bbaee85: "added a staging command to the library"
       1 files changed, 4 insertions(+), 0 deletions(-)
      $ git status
      # On branch master
      # Your branch is ahead of 'origin/master' by 2 commits.
      #
      nothing to commit (working directory clean)
      </div>
      現在我們已經將兩次提交的變更都搞定了,而且加了提交信息,可以讓我們的合作伙伴很容易理解我們做的變更。經過最后一次提交,我們看到'git status'執行之后顯示我們的工作目錄clean了(同時提示我們現在的分枝上有兩個提交還沒有上傳)
      所以,現在我們將這些變更上傳到服務器端與我們的合作伙伴分享,前提是我們有上傳的權限,(如果沒有上傳的權限,我們可以在網絡上創建一個自己的git倉庫,將其上傳),然后讓朋友下載。
      運行'git push'會將我們的變更上傳到服務器。
      $ git push
      Counting objects: 11, done.
      Compressing objects: 100% (6/6), done.
      Writing objects: 100% (7/7), 744 bytes, done.
      Total 7 (delta 3), reused 0 (delta 0)
      To git@github.com:schacon/simplegit.git
         b04dc3d..bbaee85  master -> master
      </div>
      到目前為止,我們看到了新數據都已經上傳完畢,服務器上的主分支也已經更新了。現在我們可以復習一下這整個的過程,讓我們可以更加熟練的將git應用到我們的項目中去。

       

      轉自 http://fsjoy.blog.51cto.com/318484/244826
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!