GIT初步


1. 內涵和外延

  1. 是一個開源分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目;
  2. 是Linus Torvalds爲了幫助管理Linux內核開發而開發的一個開放源碼的版本控制軟件;
  3. 與常用的版本控制工具CVS, Subversion等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持
  4. 不僅是版本控制系統,也是內容管理系統(CMS),工作管理系統等。
    注意
    1. “分佈式”的特性指的是版本庫的分佈式,也就是說GIT可以在本地創建版本庫(不像SVN不能提交版本到本地庫)

2. GIT和SVN區別

  1. 核心區別 GIT是分佈式的,SVN不是;
  2. 存儲方式 GIT把內容按元數據方式存儲,而SVN是按文件;
    1. 文件存儲方式:所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾裏。
  3. 分支 GIT分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄;
  4. GIT沒有一個全局的版本號,而SVN有:目前爲止這是跟SVN相比GIT缺少的最大的一個特徵;
  5. 內容完整性 GIT的內容完整性要優於SVN:GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

3. 安裝和配置【略】

4. 工作流程【重點】

  1. 從遠程版本庫上克隆完整的GIT倉庫(包括代碼和版本信息)到本地;
  2. 在本地根據不同的開發目的,創建分支,修改代碼
  3. 在本地自己創建的分支上提交代碼;
  4. 在本地合併分支;
  5. 把遠程版本庫上最新版的代碼fetch下來,然後跟自己的主分支合併;
  6. 如果沒有主開發者,可以直接把代碼push到遠程版本庫
  7. 生成補丁(patch),把補丁發送給主開發者;
  8. 看主開發者的反饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中一個人提交。如果主開發者可以自己解決,或者沒有衝突,就通過;
  9. 一般開發者之間解決衝突的方法,開發者之間可以使用pull 命令解決衝突,解決完衝突之後再向主開發者提交補丁。
  10. 圖例

5. 工作區、暫存區和版本庫【重點】

- 工作區
  1. GIT倉庫同級目錄。
- 暫存區
  1. 一般存放在GIT目錄下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index
- 本地庫
  1. 工作區有一個隱藏目錄.git
    注意
    1. git add是把文件添加到暫存區(索引),需要進一步commit更新到本地版本庫中;
    2. git reset HEADgit rm --cached<file>git checkoutgit checkout HEAD命令詳細
    3. 解決衝突之後的文件直接commit的話,不會默認加入到暫存區(沒有衝突的時候直接commit會默認把文件加入到暫存區),需要執行git add命令手動加入暫存區

6. 命令1

  1. git add
    1. 添加到暫存區/索引
  2. git fetch
    1. 下載遠程版本庫內容
  3. git merge
    1. 合併分支到當前分支
  4. git pull
    1. git fetch + git merge
  5. git reset HEAD
    1. 取消已經緩存的內容
  6. git status
    1. 查看需要添加到暫存區和已經添加到暫存區但是還沒有提交的文件
      注意
      - GIT命令不區分大小寫

7. 分支【GIT的“必殺技特性”】

  1. 合併不僅僅是簡單的文件添加、移除的操作,也會合並修改(當在合併修改的時候出現衝突就要解決衝突);
  2. 其他
    1. 分支作用
      1. 使用分支意味着你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。 即在沒有合併之前,分支上的內容相互獨立。
  3. 解決衝突【pull/fetch/merge-> 手動解決衝突(即衝突“三元素”直接包括的內容) -> git add -> git commit
    1. pull/fetch(從遠程到本地)或者git merge(本地版本庫之間合併,一般不會出現衝突),有可能出現衝突(會用<<<<<<HEAD======>>>>>local這三者標註衝突內容,詳細見下面分析),那麼就要手動解決,然後要git add告訴GIT衝突已經解決了(此時如果直接commit,會提醒有衝突要先解決才能commit普通沒有衝突的文件如果過需要commit可以直接提交,這時候commit中包含了更新版本庫,對於衝突文件必須要先添加到的索引中纔可以commit))
    2. <<<<<HEAD======>>>>>local含義和作用
      1. <<<<HEAD(索引)和====之間代表索引裏面指向的內容,而====>>>>local(本地)之間代表的則是本地內容

8. 遠程倉庫


  1. 如果你想通過GIT分享你的代碼或者與其他開發人員合作,你就需要將數據放到一臺其他開發人員能夠連接的服務器上

注意
1. 爲什麼在clone Github上的倉庫的時候要提供本地SSH
本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的
2. 可以使用公網服務器搭建自己的GIT遠程倉庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章