源代碼管理工具-GIT

源代碼管理工具-GIT


一. 掌握 - git 概述

1. git 簡介?

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

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

  • CVS
    • 開啟版本控制之門
    • 1990年誕生,“遠(yuǎn)古時(shí)代”的主流源代碼管理工具
  • SVN
    • 全稱是Subversion,集中式版本控制之王者
    • 是CVS的接班人,速度比CVS快,功能比CVS多且強(qiáng)大
    • 在國內(nèi)軟件企業(yè)中使用最為普遍(70%-90%)
  • ClearCase
    • 收費(fèi)的集中式版本控制工具,安裝比Windows還大,運(yùn)行比蝸牛還慢
    • 能用ClearCase的一般是世界500強(qiáng),他們有個(gè)共同的特點(diǎn)是財(cái)大氣粗或者人傻錢多
  • VSS
    • 微軟的集中式版本控制工具,集成在Visual Studio中

3. 集中式版本控制

  • 所有的代碼都集中在一塊, 統(tǒng)一進(jìn)行管理
git-集中式版本控制圖解.png

4. 分布式版本控制

  • 在每個(gè)客戶端都有一份完整的代碼倉庫, 可以在每個(gè)客戶端自行管理
git-分布式版本控制圖解.png

5. git 和 svn的簡單對比

  • 速度
    • 在很多情況下,git的速度遠(yuǎn)遠(yuǎn)比SVN快
  • 結(jié)構(gòu)
    • SVN是集中式管理,git是分布式管理
  • 其他
    • SVN使用分支比較笨拙,git可以輕松擁有無限個(gè)分支
    • SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
    • 舊版本的SVN會在每一個(gè)目錄置放一個(gè).svn,git只會在根目錄擁有一個(gè).git

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

  • svn checkout —— git clone
    • svn 只下載代碼, git 會連同代碼倉庫一起下載下來
  • svn commit —— git commit
    • svn 是提交到服務(wù)器,git 中是提交到本地倉庫,需要使用push才能提交到服務(wù)器
  • svn update - git pull
    • 都是從服務(wù)器下載最新被修改的代碼

分布式和集中式最大的區(qū)別在于:在分布式下,本地有個(gè)代碼倉庫,開發(fā)者可以在本地提交; 而集中式版本控制, 只有在服務(wù)器才有一個(gè)代碼倉庫, 只能在服務(wù)器進(jìn)行統(tǒng)一管理

7. git工作原理

  1. 概念理解
    • 工作區(qū)
    • 與.git文件夾同級的其他文件夾或者子文件夾
    • 版本控制庫
    • 暫緩區(qū)
    • 分支(Git不像SVN那樣有主干和分支的概念. 僅僅存在分支,其中master分支為默認(rèn)被創(chuàng)建的分支,類似于SVN中的主干)
    • 切換分支:通過控制HEAD指針指向不同的分支,就可以切換

** 操作原則: 所有新添加/刪除/修改的文件 必須先添加到暫緩區(qū),然后才能提交到HEAD指向的當(dāng)前分支中**

8. git使用環(huán)境

  1. 單人開發(fā)只需要一個(gè)本地庫
    • 原因:不需要與他人共享代碼,只負(fù)責(zé)管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等
  2. 多人開發(fā)時(shí)需要一個(gè)共享版本庫
    • 共享版本庫的形式:
      • 本地共享庫:文件夾/U盤/硬盤
      • 遠(yuǎn)程共享庫:自己搭建git服務(wù)器/ 托管到第三方平臺(例如github, oschina)
  3. 客戶端使用環(huán)境
    • ** 無論是單人開發(fā)還是多人開發(fā),客戶端都可以使用命令行或者圖形界面使用git**
    • SourceTree
    • GitHub
    • Xcode
      • 雖然集成較好,但是只能做一些常用的簡單操作,復(fù)雜操作還要使用命令行

9. 學(xué)習(xí)網(wǎng)站


<br />

二. 掌握 - Git命令行演練-個(gè)人開發(fā)

0. 如何學(xué)習(xí)git指令

  • git help [子命令]
  • 和學(xué)習(xí)SVN指令是一樣的,只不過git是通過使用指南的形式展示給用戶看(不能編輯的vim編輯器),使用q退出vim編輯器,按空格進(jìn)入下一頁,ctrl + B 回到上一頁; /關(guān)鍵字 進(jìn)行搜索

1. 初始化一個(gè)本地倉庫

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

2. 配置倉庫

  • 告訴git你是誰?
    • 原因: 追蹤修改記錄
    • 命令: git config user.name “shunzi”
  • 告訴git怎樣聯(lián)系你?
    • 原因: 多人合作開發(fā)時(shí), 溝通交流
    • 命令: git config user.email "shunzi@qq.com"
  • 查看配置信息(.git -> config打開)
    • 命令: git config -l

3. 個(gè)人開發(fā)演練

  • 創(chuàng)建文件并提交
    • 命令:
    touch main.c
    git add .   (提交當(dāng)前所有未被提交到暫緩去的文件)
    git add 文件名 (提交當(dāng)前文件到暫緩區(qū))
    git commit -m “注釋”
    
  • 修改文件并提交
    • 命令:
    git add .
    git commit -m “注釋”
    
  • 刪除文件并提交
    • 命令:
    git rm person.h
    git commit -m “注釋”
    
  • 日志查看
    • 命令:
    git log 
    git reflog
    
  • 版本回退
    • 命令:
    git reset —-hard HEAD 重置到當(dāng)前版本
    git reset —-hard HEAD^^ 重置到上上個(gè)版本
    git reset ——hard HEAD~2 重置到往上2個(gè)版本
    git reset —-hard 七位版本號 重置到指定版本::
    

4. 備注補(bǔ)充

  1. 文件狀態(tài)(git status)
    • 顏色含義
      • 紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
      • 綠色: 代表文件在暫緩區(qū),等待提交
    • 版本號的含義
      • 版本號是一個(gè)由SHA1生成的40位哈希值
      • 這樣做的目的是保證版本號的唯
  2. vim編輯器的使用
git-vim編輯器使用.png
    命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當(dāng)做命令來執(zhí)行
    插入模式:輸入的所有內(nèi)容都被顯示,并被當(dāng)做文件內(nèi)容處理
    命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq   ; 強(qiáng)制退出不保存: q! )
  1. 日志查看配置
git-新人服務(wù)器搭建.png
    命令如下: 
        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"
  1. 配置別名

     git config alias.別名 "原名"
     git config alias.st “status”
     
     git config alias.ci “commit -m”
    
  2. --global的作用

     可以進(jìn)行全局配置,所有的版本庫共享此配置
     查看全局配置(桌面前往->個(gè)人->.gitconfig
     ** 個(gè)人電腦上建議使用全局配置**
     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"
     git config --global user.name "chendehao"
     git config --global user.email "chendehao@qq.com"
    

三. 掌握 - Git命令行演練-團(tuán)隊(duì)開發(fā)

** 團(tuán)隊(duì)開發(fā)必須有一個(gè)共享庫,這樣成員之間才可以進(jìn)行協(xié)作開發(fā)**

0. 共享庫分類

  • 本地共享庫(只能在本地面對面操作)

    • 電腦文件夾/U盤/移動硬盤
  • 遠(yuǎn)程共享庫(可通過網(wǎng)絡(luò)遠(yuǎn)程操作)

    • 自己搭建Git服務(wù)器(不建議)
    • 在Github上托管項(xiàng)目(** 建議**)
      • Github網(wǎng)址(https://github.com); 公開項(xiàng)目免費(fèi), 私有項(xiàng)目收費(fèi)
    • 在OSChina上托管項(xiàng)目(** 推薦**)

1. 搭建本地共享庫

  • 原因: 多人合作開發(fā),代碼共享
  • 命令: git init —-bare

2. 經(jīng)理初始化項(xiàng)目到本地共享庫

命令: git clone 本地代碼倉庫地址

3. 演示多人開發(fā)

  • 創(chuàng)建文件夾manager, niuda

    • 命令:
    mkdir manager 
    mkdir niuda
    
  • 分別進(jìn)入到兩個(gè)文件夾從共享庫clone項(xiàng)目到本地

    • 命令:
    git clone 本地代碼倉庫地址
    git clone 本地代碼倉庫地址
    
  • 演練新增文件同步

    • 命令:
    touch person.h
    git add .     
    git commit -m “創(chuàng)建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文件配置規(guī)則
      • 只對工作區(qū)中的文件起作用

    http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html

4. 備注筆記

  • 關(guān)于忽略文件

    • 在真實(shí)開發(fā)中,配置.gitignore文件 , 去github里面搜索gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫
  • 常見問題

    • fetch first 代表當(dāng)前文件過期,需要從遠(yuǎn)程共享庫更新
      git pull

四. 掌握 - Git-XCode演練-團(tuán)隊(duì)開發(fā)

1. 搭建本地共享版本庫

命令: git init —-bare

2. 經(jīng)理初始化項(xiàng)目到共享版本庫

  • ** 注意: 添加忽略文件, 不然Xcode有可能會把沒必要的文件提交**
  • ** 必須在使用Xcode之前把忽略文件添加進(jìn)來, 因?yàn)閄code創(chuàng)建工程時(shí), 默認(rèn)直接把所有文件添加到暫緩區(qū), 加進(jìn)去之后忽略文件對其就無效了**

3. 牛大,牛二使用Xcode 克隆項(xiàng)目

4. 演練添加文件同步

5. 演練修改文件同步

6. 演練刪除文件同步

7. 演練沖突


五. 了解 - github的使用

1. 托管項(xiàng)目到github-HTTPS驗(yàn)證

  1. 打開github網(wǎng)站: https://www.github.com
  2. 注冊賬號(OneShunzi)
  3. 點(diǎn)擊創(chuàng)建新倉庫: https://github.com/new
  4. 填入項(xiàng)目名稱,描述等信息
  5. 創(chuàng)建完成
  6. 可根據(jù)生成的版本庫地址進(jìn)行克隆下來進(jìn)行操作

2. 托管項(xiàng)目到github-SSH驗(yàn)證

  1. 點(diǎn)擊”個(gè)人” -> setting -> SSH keys -> Add SSH key
  2. 將生成的公鑰添加進(jìn)來即可.(以下是生成公鑰私鑰方法)
    https://help.github.com/articles/generating-ssh-keys/

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

  1. 搜索到對應(yīng)的框架
  2. 點(diǎn)擊fork
  3. 當(dāng)項(xiàng)目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進(jìn)行操作
  • ** 注意:**
    • 你可以針對此框架進(jìn)行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項(xiàng)目沒有任何影響.
    • 如果想向原作者提建議,可以直接使用,pull request操作.
    • 提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿

六. 了解 - OSChina的使用

1. 托管項(xiàng)目到OSChina

  1. 打開oschina網(wǎng)站:https://git.oschina.net
  2. 注冊賬號(OneShunzi)
  3. 點(diǎn)擊創(chuàng)建新倉庫https://git.oschina.net/projects/new
  4. 填入項(xiàng)目名稱,描述等信息
  5. 創(chuàng)建完成
  6. 可根據(jù)生成的版本庫地址進(jìn)行克隆下來進(jìn)行操作

2. 怎樣加入合作伙伴?

  1. 點(diǎn)擊”管理”->項(xiàng)目成員管理->選擇成員權(quán)限進(jìn)行創(chuàng)建
  2. 或者直接只用SSH(以下是生成公鑰私鑰方法)
    • 部署公鑰允許以只讀的方式訪問項(xiàng)目,主要用于項(xiàng)目在生產(chǎn)服務(wù)器的部署上,免去HTTP方式每次操作都要輸入密碼和普通SSH方式擔(dān)心不小心修改項(xiàng)目代碼的麻煩。
      https://help.github.com/articles/generating-ssh-keys/

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

  1. 搜索到對應(yīng)的框架
  2. 點(diǎn)擊fork
  3. 當(dāng)項(xiàng)目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進(jìn)行操作
  • ** 注意:**
    • 你可以針對此框架進(jìn)行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項(xiàng)目沒有任何影響.
    • 如果想向原作者提建議,可以直接使用,pull request操作.
    • 提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿

七. 了解 - 新人服務(wù)器搭建

  1. 新人服務(wù)器搭建概念原因?

    • 概念: 搭建一個(gè)臨時(shí)共享版本庫, 供新人專用
    • 原因: 防止新人剛到時(shí),搞亂服務(wù)器上的項(xiàng)目
  2. 新建一個(gè)文件夾,newBee,作為新人服務(wù)器

  3. 進(jìn)入文件夾 使用git init —-bare 初始化倉庫

  4. 經(jīng)理打開自己項(xiàng)目所在文件夾,執(zhí)行PULL ,更新到最新

  5. 然后source control ->項(xiàng)目master -> configure 項(xiàng)目

    • 選擇Remotes 選項(xiàng) 代表當(dāng)前所連的遠(yuǎn)程服務(wù)器地址
    • 點(diǎn)擊+號 添加 將newBee文件路徑作為另外一個(gè)遠(yuǎn)程服務(wù)器地址 file:// 協(xié)議開頭 結(jié)尾以/結(jié)尾
    • Done
  6. 經(jīng)理將最新代碼提交到新人遠(yuǎn)程倉庫

  7. 經(jīng)理分配新人服務(wù)器地址給新人

  8. 新人各種折騰

  9. 經(jīng)理建立文件夾,從新人服務(wù)器下載代碼檢查

  10. 圖解

git-新人服務(wù)器搭建.png

八. 了解 - Git版本備份/分支管理

** 在git中不是通過拷貝代碼來解決備份和開啟分支的**
** git 直接打標(biāo)簽, 通過控制head指向,來回到任一版本**

1.版本備份

  1. 建立共享庫

    • 創(chuàng)建文件夾shareWeibo
    • 進(jìn)入文件夾后,初始化共享庫
      git init ——bare
  2. 經(jīng)理克隆項(xiàng)目后開發(fā)完1.0版本,打標(biāo)簽后,上傳共享庫

    • 創(chuàng)建manager文件夾
    • 進(jìn)入文件夾后
      git clone 共享庫絕對路徑
    • 進(jìn)入工作區(qū),配置姓名,郵箱
      git config user.name “manager”
      git config user.emailmanager@qq.com
    • 經(jīng)理創(chuàng)建文件,并修改部分代碼,提交代碼,上傳到共享庫,完成v1.0版本
      touch main.c
      open main.c:: 打開后寫入abc
      git add .
      git commit -m “完成1.0版本開發(fā)”
      git push
    • 經(jīng)理給此版本打標(biāo)簽,并將標(biāo)簽上傳到共享庫
      git tag -a v1.0 -m “標(biāo)記1.0版本”
      git push origin v1.0
    • 經(jīng)理繼續(xù)開發(fā)2.0版本......并提交
      git add .
      git commit -m “2.0部分功能”
      git push

2. 已發(fā)布版本bug修復(fù)

  • 在以上步驟基礎(chǔ)上做以下操作
  1. 牛大克隆項(xiàng)目,根據(jù)1.0版本創(chuàng)建分支,修復(fù)bug

    • 創(chuàng)建niuda文件夾
    • 進(jìn)入文件夾后
    git clone 共享庫絕對路徑
    
    • 進(jìn)入工作區(qū),配置姓名,郵箱
    git config user.name “niuda”
    git config user.email “niuda@qq.com”
    
    • 根據(jù)v1.0版本建立新分支v1.0fixbug并切換到此分支
    git checkout v1.0 -b v1.0fixbug::
    
    • 修復(fù)bug后提交到本地版本庫

    ** 注意此處提交到的是HEAD指向的分支-v1.0fixbug**

    git add .
    git commit -m “修復(fù)bug”
    
  2. 牛大修復(fù)bug后,打標(biāo)簽v1.1作版本備份,并上傳共享庫

git tag -a v1.1 -m “1.1版本備份”
git push origin v1.1
  1. 牛大上傳整個(gè)分支到共享版本庫
git push origin v1.0fixbug
  • ** ———至此,分支修復(fù)bug結(jié)束,下面經(jīng)理要合并分支———**
  1. 經(jīng)理從共享庫更新代碼到本地庫
git pull
  1. 經(jīng)理查看當(dāng)前服務(wù)器都有哪些分支
git branch -r
  1. 經(jīng)理切換到master分支后,將v1.0fixbug分支合并過來
git checkout master
git merge origin/v1.0fixbug -m “合并分支”
  1. 經(jīng)理合并完成后提交到共享庫
git add .
git commit -m “合并分支”
git push
  1. 合并完成后,可以刪除共享庫的分支
git branch -r -d origin/v1.0fixbug
  1. 查看版本標(biāo)簽,至此結(jié)束!!
git tag

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容