源代碼管理工具-GIT

一. git 概述

1. git 簡介?

  1. 什么是git?

     > git是一款開源的分布式版本控制工具
     > 在世界上所有的分布式版本控制工具中类茂,git是最快、最簡單矾兜、最流行的
    
  2. git的起源?

     > 作者是Linux之父:Linus Benedict Torvalds
     > 當初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)
    
  3. git的現(xiàn)狀?

     > 在國外已經(jīng)非常普及损趋,國內(nèi)并未普及(在慢慢普及)
     > 越來越多的開源項目已經(jīng)轉(zhuǎn)移到git
    

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

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

3. 集中式版本控制

所有的代碼都集中在一塊, 統(tǒng)一進行管理

集中式版本控制圖解.png

4. 分布式版本控制

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

分布式版本控制圖解.png

5. git 和 svn的簡單對比

> 速度
    在很多情況下畸冲,git的速度遠遠比SVN快
> 結(jié)構(gòu)
    SVN是集中式管理嫉髓,git是分布式管理
> 其他
    SVN使用分支比較笨拙,git可以輕松擁有無限個分支
    SVN必須聯(lián)網(wǎng)才能正常工作邑闲,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
    都是從服務器下載最新被修改的代碼

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

7. git工作原理

  1. 概念理解

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

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

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

  1. 單人開發(fā)只需要一個本地庫

     原因:不需要與他人共享代碼,只負責管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等
    
  2. 多人開發(fā)時需要一個共享版本庫

     共享版本庫的形式:
         本地共享庫:文件夾/U盤/硬盤
         遠程共享庫:自己搭建git服務器/ 托管到第三方平臺(例如github, oschina)
    
  3. 使用環(huán)境
    ** 無論是單人開發(fā)還是多人開發(fā),客戶端都可以使用命令行或者圖形界面使用git**

     > SourceTree
         - 下載地址:http://www.sourcetreeapp.com/download/
     > GitHub
         - 下載地址:https://mac.github.com
         - 不過它是專門為GitHub網(wǎng)站而設(shè)計的
     > Xcode
         - 雖然集成較好,但是只能做一些常用的簡單操作,復雜操作還要使用命令行
    

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

0. 如何學習git指令

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

1. 初始化一個本地倉庫

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

2. 配置倉庫

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

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

    > 創(chuàng)建文件并提交
        命令: 
            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. 文件狀態(tài)(git status)

     > 顏色含義
         紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
         綠色: 代表文件在暫緩區(qū),等待提交
     > 版本號的含義
         版本號是一個由SHA1生成的40位哈希值
         這樣做的目的是保證版本號的唯一
    
  2. vim編輯器的使用

vim編輯器使用.png
    命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當做命令來執(zhí)行
    插入模式:輸入的所有內(nèi)容都被顯示,并被當做文件內(nèi)容處理
    命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq   ; 強制退出不保存: q! )
  1. 日志查看配置

     命令如下: 
         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"
    
  2. 配置別名

     git config alias.st “status”
     git config alias.ci “commit -m”
    
  3. --global的作用

     可以進行全局配置,所有的版本庫共享此配置
     查看全局配置(桌面前往->個人->.gitconfig
     ** 個人電腦上建議使用全局配置**
    

三. Git命令行演練-團隊開發(fā)

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

0. 共享庫分類

    > 本地共享庫(只能在本地面對面操作)
        - 電腦文件夾/U盤/移動硬盤
        
    > 遠程共享庫(可通過網(wǎng)絡(luò)遠程操作)
        - 自己搭建Git服務器(**不建議**)
        - 在Github上托管項目(** 建議**)
            Github網(wǎng)址(https://github.com); 公開項目免費, 私有項目收費
        - 在OSChina上托管項目(** 推薦**)
            OSChina網(wǎng)址(https://git.oschina.net) 安全免費,在國內(nèi)訪問速度快

1. 搭建本地共享庫

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

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

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

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

    > 創(chuàng)建文件夾manager, niuda
        命令:
            mkdir manager 
            mkdir niuda
    > 分別進入到兩個文件夾從共享庫clone項目到本地
        命令:
            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ī)則
            http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html

4. 備注筆記

    > 關(guān)于忽略文件
        在真實開發(fā)中,配置.gitignore文件 裙秋, 去github里面搜索gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫
    
    > 常見問題
        fetch first 代表當前文件過期,需要從遠程共享庫更新 
        git pull

四. Git-XCode演練-團隊開發(fā)

1. 搭建本地共享版本庫

命令: git init —-bare

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

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

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

4. 演練添加文件同步

5. 演練修改文件同步

6. 演練刪除文件同步

7. 演練沖突

五. github的使用

1. 托管項目到github

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

2. 怎樣加入合作伙伴

  1. 點擊”個人” -> setting -> SSH keys -> Add SSH key
  2. 將你小伙伴生成的公鑰添加進來即可.(以下是生成公鑰私鑰方法)
    [https://help.github.com/articles/generating-ssh-keys/]

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

  1. 搜索到對應的框架

  2. 點擊fork

  3. 當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作

     ** 注意:
         你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響. 
         如果想向原作者提建議,可以直接使用,pull request操作.
         提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿
    

六. OSChina的使用

1. 托管項目到OSChina

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

2. 怎樣加入合作伙伴?

  1. 點擊”管理”->項目成員管理->選擇成員權(quán)限進行創(chuàng)建

  2. 或者直接只用SSH(以下是生成公鑰私鑰方法)

         > 部署公鑰允許以只讀的方式訪問項目缨伊,主要用于項目在生產(chǎn)服務器的部署上摘刑,免去HTTP方式每次操作都要輸入密碼和普通SSH方式擔心不小心修改項目代碼的麻煩。
         > [https://help.github.com/articles/generating-ssh-keys/]
    

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

  1. 搜索到對應的框架

  2. 點擊fork

  3. 當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作

     ** 注意:
         你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響. 
         如果想向原作者提建議,可以直接使用,pull request操作.
         提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿
    

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

  1. 新人服務器搭建概念原因?

     概念: 搭建一個臨時共享版本庫, 供新人專用
     原因: 防止新人剛到時刻坊,搞亂服務器上的項目
    
  2. 新建一個文件夾枷恕,newBee,作為新人服務器

  3. 進入文件夾 使用git init —-bare 初始化倉庫

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

  5. 然后source control ->項目master -> configure 項目

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

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

  8. 新人各種折騰

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

  10. 圖解

新人服務器搭建.png

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

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

1.版本備份

  1. 建立共享庫

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

     > 創(chuàng)建manager文件夾
     > 進入文件夾后
         git clone 共享庫絕對路徑
     > 進入工作區(qū),配置姓名,郵箱
         git config user.name “manager”
         git config user.email “manager@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)理給此版本打標簽,并將標簽上傳到共享庫
         git tag -a v1.0 -m “標記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修復

在以上步驟基礎(chǔ)上做以下操作

  1. 牛大克隆項目,根據(jù)1.0版本創(chuàng)建分支,修復bug

     > 創(chuàng)建niuda文件夾
     > 進入文件夾后
         git clone 共享庫絕對路徑
     > 進入工作區(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::
     > 修復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結(jié)束,下面經(jīng)理要合并分支———**

  1. 經(jīng)理從共享庫更新代碼到本地庫

     git pull
    
  2. 經(jīng)理查看當前服務器都有哪些分支

     git branch -r
    
  3. 經(jīng)理切換到master分支后,將v1.0fixbug分支合并過來

     git checkout master
     git merge origin/v1.0fixbug -m “合并分支”
    
  4. 經(jīng)理合并完成后提交到共享庫

     git add .
     git commit -m “合并分支”
     git push
    
  5. 合并完成后,可以刪除共享庫的分支

     git branch -r -d origin/v1.0fixbug
    
  6. 查看版本標簽,至此結(jié)束!!

     git tag
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛹锰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绰疤,更是在濱河造成了極大的恐慌铜犬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癣猾,居然都是意外死亡敛劝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門纷宇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夸盟,“玉大人像捶,你說我怎么就攤上這事上陕。” “怎么了拓春?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵释簿,是天一觀的道長。 經(jīng)常有香客問我硼莽,道長庶溶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任懂鸵,我火速辦了婚禮偏螺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匆光。我一直安慰自己砖茸,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布殴穴。 她就那樣靜靜地躺著,像睡著了一般货葬。 火紅的嫁衣襯著肌膚如雪采幌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天震桶,我揣著相機與錄音休傍,去河邊找鬼。 笑死蹲姐,一個胖子當著我的面吹牛磨取,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柴墩,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼忙厌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了江咳?” 一聲冷哼從身側(cè)響起逢净,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爹土,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甥雕,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年胀茵,在試婚紗的時候發(fā)現(xiàn)自己被綠了社露。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡琼娘,死狀恐怖峭弟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轨奄,我是刑警寧澤孟害,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站挪拟,受9級特大地震影響挨务,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玉组,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一谎柄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惯雳,春花似錦朝巫、人聲如沸劈猿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽福压。三九已至胆筒,卻和暖如春矫渔,著一層夾襖步出監(jiān)牢的瞬間蚁袭,已是汗流浹背鬼悠。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留群发,地道東北人栏尚。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓休涤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親围来。 傳聞我的和親對象是個殘疾皇子跺涤,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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