Git學習(二)——工作流程和創建倉庫


Git 工作流程

Git 的工作流程大致如下:

  • 克隆 Git 資源作爲工作目錄。
  • 在克隆的資源上添加或修改文件。
  • 如果其他人修改了,你可以更新資源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交。

下圖展示了Git的工作流程:
來自菜鳥教程

Git 工作區、暫存區和版本庫

  • 工作區:就是你在電腦裏能看到的目錄
  • 暫存區:英文叫stage或者index。一般存放在“.git目錄下”下的index文件,我們通常也叫他索引(index)
  • 版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
    他們之間的關係爲:
    來自菜鳥教程
    圖中左側爲工作區,右側爲版本庫。在版本庫中標記爲 “index” 的區域是暫存區(stage, index),標記爲 “master” 的是 master 分支所代表的目錄樹。

圖中我們可以看出此時 “HEAD” 實際是指向 master 分支的一個"遊標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。

圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 “.git/objects” 目錄下,裏面包含了創建的各種對象及內容。

當對工作區修改(或新增)的文件執行 “git add” 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。

當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

當執行 “git reset HEAD” 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

當執行 “git rm --cached <file>” 命令時,會直接從暫存區刪除文件,工作區則不做出改變。

當執行 “git checkout.” 或者 “git checkout -- <file>” 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。

當執行 “git checkout HEAD.” 或者 “git checkout HEAD <file>” 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因爲不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

Git 創建倉庫

這一節將介紹如何創建一個Git倉庫。

git init

Git使用git init 命令來初始化一個Git倉庫。Git 的很多命令都需要在 Git 的倉庫中運行,所以git init是使用 Git 的第一個命令。
在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變(不像 SVN 會在每個子目錄生成 .svn 目錄,Git 只在倉庫的根目錄生成 .git 目錄)。

使用方法
使用當前目錄作爲Git倉庫,我們只需使它初始化。

git init

使用當前目錄作爲Git倉庫,我們只需使它初始化。使用我們指定目錄作爲Git倉庫。

git init newrepo

初始化後,會在 newrepo 目錄下會出現一個名爲 .git 的目錄,所有 Git 需要的數據和資源都存放在這個目錄中。

如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然後提交:

$ git add *.c
$ git add README
$ git commit -m '初始化項目版本'

以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。

git clone

我們使用 git clone 從現有 Git 倉庫中拷貝項目(類似 svn checkout)。
克隆倉庫的命令格式爲:

git clone <repo>

如果我們需要克隆到指定的目錄,可以使用以下命令格式:

git clone <repo> <directory>

參數說明:

  • repo: Git倉庫
  • directory: 本地目錄

如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章