天天看點

源代碼管理工具-GIT源代碼管理工具-GIT

源代碼管理工具-GIT

一. git 概述

1. git 簡介?

  1. 什麼是git?
    > git是一款開源的分布式版本控制工具
    > 在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的         
               
  2. git的起源?
    > 作者是Linux之父:Linus Benedict Torvalds
    > 當初開發git僅僅是為了輔助Linux核心的開發(管理源代碼)
               
  3. git的現狀?
    > 在國外已經非常普及,國内并未普及(在慢慢普及)
    > 越來越多的開源項目已經轉移到git
               

2. 常見的源代碼管理工具有哪些?

> CVS
    - 開啟版本控制之門
    - 1990年誕生,“遠古時代”的主流源代碼管理工具

> SVN
    - 全稱是Subversion,集中式版本控制之王者
    - 是CVS的接班人,速度比CVS快,功能比CVS多且強大
    - 在國内軟體企業中使用最為普遍(70%-90%)

> ClearCase
    - 收費的集中式版本控制工具,安裝比Windows還大,運作比蝸牛還慢
    - 能用ClearCase的一般是世界500強,他們有個共同的特點是财大氣粗或者人傻錢多

> VSS
    - 微軟的集中式版本控制工具,內建在Visual Studio中
           

3. 集中式版本控制

所有的代碼都集中在一塊, 統一進行管理

4. 分布式版本控制

在每個用戶端都有一份完整的代碼倉庫, 可以在每個用戶端自行管理

5. git 和 svn的簡單對比

> 速度
    在很多情況下,git的速度遠遠比SVN快
> 結構
    SVN是集中式管理,git是分布式管理
> 其他
    SVN使用分支比較笨拙,git可以輕松擁有無限個分支
    SVN必須聯網才能正常工作,git支援本地版本控制工作
    舊版本的SVN會在每一個目錄置放一個.svn,git隻會在根目錄擁有一個.git
           

6. SVN工作流程和GIT工作流程對比

- svn checkout —— git clone
    svn 隻下載下傳代碼, git 會連同代碼倉庫一起下載下傳下來

- svn commit —— git commit
    svn 是送出到伺服器,git 中是送出到本地倉庫,需要使用push才能送出到伺服器

-  svn update - git pull
    都是從伺服器下載下傳最新被修改的代碼
           

分布式和集中式最大的差別在于:在分布式下,本地有個代碼倉庫,開發者可以在本地送出; 而集中式版本控制, 隻有在伺服器才有一個代碼倉庫, 隻能在伺服器進行統一管理

7. git工作原理

  1. 概念了解
    - 工作區
        > 與.git檔案夾同級的其他檔案夾或者子檔案夾
    
    - 版本控制庫
        > 暫緩區
        > 分支(Git不像SVN那樣有主幹和分支的概念. 僅僅存在分支,其中master分支為預設被建立的分支,類似于SVN中的主幹)
            切換分支:通過控制HEAD指針指向不同的分支,就可以切換*
               

* 操作原則: 所有新添加/删除/修改的檔案 必須先添加到暫緩區,然後才能送出到HEAD指向的目前分支中*

8. git使用環境

  1. 單人開發隻需要一個本地庫
    原因:不需要與他人共享代碼,隻負責管理自己代碼即可;例如送出代碼,删除代碼,版本控制等等
               
  2. 多人開發時需要一個共享版本庫
    共享版本庫的形式:
        本地共享庫:檔案夾/U盤/硬碟
        遠端共享庫:自己搭建git伺服器/ 托管到第三方平台(例如github, oschina)
               
  3. 使用環境

    * 無論是單人開發還是多人開發,用戶端都可以使用指令行或者圖形界面使用git*

    > SourceTree
        - 下載下傳位址:http://www.sourcetreeapp.com/download/
    > GitHub
        - 下載下傳位址:https://mac.github.com
        - 不過它是專門為GitHub網站而設計的
    > Xcode
        - 雖然內建較好,但是隻能做一些常用的簡單操作,複雜操作還要使用指令行
               

二. Git指令行演練-個人開發

0. 如何學習git指令

> git help [子指令]
    > 和學習SVN指令是一樣的,隻不過git是通過使用指南的形式展示給使用者看(不能編輯的vim編輯器),使用q退出vim編輯器,按空格進入下一頁,ctrl + B 回到上一頁; /關鍵字 進行搜尋
           

1. 初始化一個本地倉庫

> 原因: 管理本地代碼,修改上傳,版本回退
    > 指令: git init
           

2. 配置倉庫

> 告訴git你是誰?
        原因: 追蹤修改記錄
        指令: git config user.name “shunzi”

    > 告訴git怎樣聯系你?
        原因: 多人合作開發時, 溝通交流
        指令: git config user.email "[email protected]"

    > 檢視配置資訊(.git -> config打開)
        指令:  git config -l
           

3. 個人開發演練

> 建立檔案并送出
        指令: 
            touch main.c
            git add . 
            git commit -m “注釋”
    > 修改檔案并送出 
        指令: 
            git add .
            git commit -m “注釋”
    > 删除檔案并送出
        指令: 
            git rm person.h
            git commit -m “注釋”
    > 日志檢視
        指令: 
            git log 
            git reflog
    > 版本回退
        指令: 
            git reset —hard HEAD 重置到目前版本
            git reset —hard HEAD^^ 重置到上上個版本
            git reset ——hard HEAD2 重置到往上2個版本
            git reset —hard 七位版本号 重置到指定版本::
           

5. 備注補充

  1. 檔案狀态(git status)
    > 顔色含義
        紅色: 代表被添加或者修改的檔案沒有被添加到暫緩區
        綠色: 代表檔案在暫緩區,等待送出
    > 版本号的含義
        版本号是一個由SHA1生成的40位哈希值
        這樣做的目的是保證版本号的唯一
               
  2. vim編輯器的使用
    源代碼管理工具-GIT源代碼管理工具-GIT
    指令模式:等待編輯指令輸入;所有輸入的内容都被當做指令來執行
    插入模式:輸入的所有内容都被顯示,并被當做檔案内容處理
    指令行模式:執行待定指令(儲存檔案并退出vim : wq   ; 強制退出不儲存: q! )
               
  3. 日志檢視配置
    指令如下: 
        git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\<%an\>%Creset' --abbrev-commit"
               
  4. 配置别名
    git config alias.st “status”
    git config alias.ci “commit -m”
               
  5. –global的作用
    可以進行全局配置,所有的版本庫共享此配置
    檢視全局配置(桌面前往->個人->.gitconfig
    ** 個人電腦上建議使用全局配置**
               

三. Git指令行演練-團隊開發

* 團隊開發必須有一個共享庫,這樣成員之間才可以進行協作開發*

0. 共享庫分類

> 本地共享庫(隻能在本地面對面操作)
        - 電腦檔案夾/U盤/移動硬碟

    > 遠端共享庫(可通過網絡遠端操作)
        - 自己搭建Git伺服器(**不建議**)
        - 在Github上托管項目(** 建議**)
            Github網址(https://github.com); 公開項目免費, 私有項目收費
        - 在OSChina上托管項目(** 推薦**)
            OSChina網址(https://git.oschina.net) 安全免費,在國内通路速度快
           

1. 搭建本地共享庫

原因: 多人合作開發,代碼共享
    指令: git init —-bare
           

2. 經理初始化項目到本地共享庫

指令: git clone 本地代碼倉庫位址
           

3. 示範多人開發

> 建立檔案夾manager, niuda
        指令:
            mkdir manager 
            mkdir niuda
    > 分别進入到兩個檔案夾從共享庫clone項目到本地
        指令:
            git clone 本地代碼倉庫位址
            git clone 本地代碼倉庫位址
    > 演練新增檔案同步
        指令:
            touch person.h
            git add .     
            git commit -m “建立person.h”
            git push    
            git pull
    > 演練修改檔案同步
        指令:
            git add . 
            git commit -m “注釋”
            git push
            git pull
    > 演練删除檔案同步
        指令:
            git rm filename
            git commit -m “注釋”
            git push       
            git pull
    > 演練沖突解決
        指令:
            git pull

    > 演練忽略檔案
        指令:
            touch .gitignore   
            open .gitignore   加入忽略檔案名
            git add .     
            git commit -m “注釋”
        .gitignore檔案配置規則
            http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html
           

4. 備注筆記

> 關于忽略檔案
        在真實開發中,配置.gitignore檔案 , 去github裡面搜尋gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫

    > 常見問題
        fetch first 代表目前檔案過期,需要從遠端共享庫更新 
        git pull
           

四. Git-XCode演練-團隊開發

1. 搭建本地共享版本庫

指令: git init —-bare
           

2. 經理初始化項目到共享版本庫

** 注意: 添加忽略檔案, 不然Xcode有可能會把沒必要的檔案送出**
** 必須在使用Xcode之前把忽略檔案添加進來, 因為Xcode建立工程時, 預設直接把所有檔案添加到暫緩區, 加進去之後忽略檔案對其就無效了**
           

3. 牛大,牛二使用Xcode 克隆項目

4. 演練添加檔案同步

5. 演練修改檔案同步

6. 演練删除檔案同步

7. 演練沖突

五. github的使用

1. 托管項目到github

  1. 打開github網站:[https://www.github.com]
  2. 新增賬號(OneShunzi)
  3. 點選建立新倉庫[https://github.com/new]
  4. 填入項目名稱,描述等資訊
  5. 建立完成
  6. 可根據生成的版本庫位址進行克隆下來進行操作

2. 怎樣加入合作夥伴

  1. 點選”個人” -> setting -> SSH keys -> Add SSH key
  2. 将你小夥伴生成的公鑰添加進來即可.(以下是生成公鑰私鑰方法)

    [https://help.github.com/articles/generating-ssh-keys/]

3. 怎樣将其他著名架構添加到我們的代碼倉庫?

  1. 搜尋到對應的架構
  2. 點選fork
  3. 當項目被移到自己代碼倉庫中,就可以根據位址克隆下來進行操作
    ** 注意:
        你可以針對此架構進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響. 
        如果想向原作者提建議,可以直接使用,pull request操作.
        送出完成後,原作者可以在pull request中看到你的送出.至于是否采納,就是原作者的意願
               

六. OSChina的使用

1. 托管項目到OSChina

  1. 打開oschina網站:[https://git.oschina.net]
  2. 新增賬號(OneShunzi)
  3. 點選建立新倉庫[https://git.oschina.net/projects/new]
  4. 填入項目名稱,描述等資訊
  5. 建立完成
  6. 可根據生成的版本庫位址進行克隆下來進行操作

2. 怎樣加入合作夥伴?

  1. 點選”管理”->項目成員管理->選擇成員權限進行建立
  2. 或者直接隻用SSH(以下是生成公鑰私鑰方法)
    > 部署公鑰允許以隻讀的方式通路項目,主要用于項目在生産伺服器的部署上,免去HTTP方式每次操作都要輸入密碼和普通SSH方式擔心不小心修改項目代碼的麻煩。
        > [https://help.github.com/articles/generating-ssh-keys/]
               

3. 怎樣将其他著名架構添加到我們的代碼倉庫?

  1. 搜尋到對應的架構
  2. 點選fork
  3. 當項目被移到自己代碼倉庫中,就可以根據位址克隆下來進行操作
    ** 注意:
        你可以針對此架構進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響. 
        如果想向原作者提建議,可以直接使用,pull request操作.
        送出完成後,原作者可以在pull request中看到你的送出.至于是否采納,就是原作者的意願
               

七. 新人伺服器搭建(補充了解)

  1. 新人伺服器搭建概念原因?
    概念: 搭建一個臨時共享版本庫, 供新人專用
    原因: 防止新人剛到時,搞亂伺服器上的項目
               
  2. 建立一個檔案夾,newBee,作為新人伺服器
  3. 進入檔案夾 使用git init —-bare 初始化倉庫
  4. 經理打開自己項目所在檔案夾,執行PULL ,更新到最新
  5. 然後source control ->項目master -> configure 項目
    > 選擇Remotes 選項 代表目前所連的遠端伺服器位址
    > 點選+号 添加 将newBee檔案路徑作為另外一個遠端伺服器位址 file:// 協定開頭 結尾以/結尾
    > Done
               
  6. 經理将最新代碼送出到新人遠端倉庫
  7. 經理配置設定新人伺服器位址給新人
  8. 新人各種折騰
  9. 經理建立檔案夾,從新人伺服器下載下傳代碼檢查
  10. 圖解
    源代碼管理工具-GIT源代碼管理工具-GIT

八. Git版本備份/分支管理(補充了解)

* 在git中不是通過拷貝代碼來解決備份和開啟分支的*

* git 直接打标簽, 通過控制head指向,來回到任一版本*

1.版本備份

  1. 建立共享庫
    > 建立檔案夾shareWeibo
    > 進入檔案夾後,初始化共享庫
        git init ——bare
               
  2. 經理克隆項目後開發完1.0版本,打标簽後,上傳共享庫
    > 建立manager檔案夾
    > 進入檔案夾後
        git clone 共享庫絕對路徑
    > 進入工作區,配置姓名,郵箱
        git config user.name “manager”
        git config user.email “[email protected]”
    > 經理建立檔案,并修改部分代碼,送出代碼,上傳到共享庫,完成v1.0版本
        touch main.c
        open main.c:: 打開後寫入abc
        git add .
        git commit -m “完成1.0版本開發”
        git push
    > 經理給此版本打标簽,并将标簽上傳到共享庫
        git tag -a v1.0 -m “标記1.0版本”
        git push origin v1.0
    > 經理繼續開發2.0版本......并送出
        git add .
        git commit -m “2.0部分功能”
        git push
               

2. 已釋出版本bug修複

在以上步驟基礎上做以下操作

  1. 牛大克隆項目,根據1.0版本建立分支,修複bug
    > 建立niuda檔案夾
    > 進入檔案夾後
        git clone 共享庫絕對路徑
    > 進入工作區,配置姓名,郵箱
        git config user.name “niuda”
        git config user.email “[email protected]”
    > 根據v1.0版本建立新分支v1.0fixbug并切換到此分支
        git checkout v1.0 -b v1.0fixbug::
    > 修複bug後送出到本地版本庫
               
    * 注意此處送出到的是HEAD指向的分支-v1.0fixbug*
    git add .
        git commit -m “修複bug”
               
  2. 牛大修複bug後,打标簽v1.1作版本備份,并上傳共享庫
    git tag -a v1.1 -m “1.1版本備份”
    git push origin v1.1
               
  3. 牛大上傳整個分支到共享版本庫
    git push origin v1.0fixbug
               

* ———至此,分支修複bug結束,下面經理要合并分支———*

  1. 經理從共享庫更新代碼到本地庫
    git pull
               
  2. 經理檢視目前伺服器都有哪些分支
    git branch -r
               
  3. 經理切換到master分支後,将v1.0fixbug分支合并過來
    git checkout master
    git merge origin/v1.0fixbug -m “合并分支”
               
  4. 經理合并完成後送出到共享庫
    git add .
    git commit -m “合并分支”
    git push
               
  5. 合并完成後,可以删除共享庫的分支
    git branch -r -d origin/v1.0fixbug
               
  6. 檢視版本标簽,至此結束!!
    git tag