源代碼管理工具-GIT
一. git 概述
1. git 簡(jiǎn)介?
-
什么是git?
> git是一款開(kāi)源的分布式版本控制工具 > 在世界上所有的分布式版本控制工具中,git是最快诺核、最簡(jiǎn)單漂佩、最流行的
-
git的起源?
> 作者是Linux之父:Linus Benedict Torvalds > 當(dāng)初開(kāi)發(fā)git僅僅是為了輔助Linux內(nèi)核的開(kāi)發(fā)(管理源代碼)
-
git的現(xiàn)狀?
> 在國(guó)外已經(jīng)非常普及,國(guó)內(nèi)并未普及(在慢慢普及) > 越來(lái)越多的開(kāi)源項(xiàng)目已經(jīng)轉(zhuǎn)移到git
2. 常見(jiàn)的源代碼管理工具有哪些?
> CVS
- 開(kāi)啟版本控制之門
- 1990年誕生豁翎,“遠(yuǎn)古時(shí)代”的主流源代碼管理工具
> SVN
- 全稱是Subversion角骤,集中式版本控制之王者
- 是CVS的接班人,速度比CVS快心剥,功能比CVS多且強(qiáng)大
- 在國(guó)內(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)行管理
4. 分布式版本控制
在每個(gè)客戶端都有一份完整的代碼倉(cāng)庫(kù), 可以在每個(gè)客戶端自行管理
5. git 和 svn的簡(jiǎn)單對(duì)比
> 速度
在很多情況下牢撼,git的速度遠(yuǎn)遠(yuǎn)比SVN快
> 結(jié)構(gòu)
SVN是集中式管理,git是分布式管理
> 其他
SVN使用分支比較笨拙疑苫,git可以輕松擁有無(wú)限個(gè)分支
SVN必須聯(lián)網(wǎng)才能正常工作熏版,git支持本地版本控制工作
舊版本的SVN會(huì)在每一個(gè)目錄置放一個(gè).svn,git只會(huì)在根目錄擁有一個(gè).git
6. SVN工作流程和GIT工作流程對(duì)比
- svn checkout —— git clone
svn 只下載代碼捍掺, git 會(huì)連同代碼倉(cāng)庫(kù)一起下載下來(lái)
- svn commit —— git commit
svn 是提交到服務(wù)器撼短,git 中是提交到本地倉(cāng)庫(kù),需要使用push才能提交到服務(wù)器
- svn update - git pull
都是從服務(wù)器下載最新被修改的代碼
分布式和集中式最大的區(qū)別在于:在分布式下挺勿,本地有個(gè)代碼倉(cāng)庫(kù),開(kāi)發(fā)者可以在本地提交; 而集中式版本控制, 只有在服務(wù)器才有一個(gè)代碼倉(cāng)庫(kù), 只能在服務(wù)器進(jìn)行統(tǒng)一管理
7. git工作原理
-
概念理解
- 工作區(qū) > 與.git文件夾同級(jí)的其他文件夾或者子文件夾 - 版本控制庫(kù) > 暫緩區(qū) > 分支(Git不像SVN那樣有主干和分支的概念. 僅僅存在分支,其中master分支為默認(rèn)被創(chuàng)建的分支,類似于SVN中的主干) 切換分支:通過(guò)控制HEAD指針指向不同的分支,就可以切換*
** 操作原則: 所有新添加/刪除/修改的文件 必須先添加到暫緩區(qū),然后才能提交到HEAD指向的當(dāng)前分支中**
8. git使用環(huán)境
-
單人開(kāi)發(fā)只需要一個(gè)本地庫(kù)
原因:不需要與他人共享代碼,只負(fù)責(zé)管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等
-
多人開(kāi)發(fā)時(shí)需要一個(gè)共享版本庫(kù)
共享版本庫(kù)的形式: 本地共享庫(kù):文件夾/U盤/硬盤 遠(yuǎn)程共享庫(kù):自己搭建git服務(wù)器/ 托管到第三方平臺(tái)(例如github, oschina)
-
使用環(huán)境
** 無(wú)論是單人開(kāi)發(fā)還是多人開(kāi)發(fā),客戶端都可以使用命令行或者圖形界面使用git**> SourceTree - 下載地址:http://www.sourcetreeapp.com/download/ > GitHub - 下載地址:https://mac.github.com - 不過(guò)它是專門為GitHub網(wǎng)站而設(shè)計(jì)的 > Xcode - 雖然集成較好,但是只能做一些常用的簡(jiǎn)單操作,復(fù)雜操作還要使用命令行
二. Git命令行演練-個(gè)人開(kāi)發(fā)
0. 如何學(xué)習(xí)git指令
> git help [子命令]
> 和學(xué)習(xí)SVN指令是一樣的曲横,只不過(guò)git是通過(guò)使用指南的形式展示給用戶看(不能編輯的vim編輯器),使用q退出vim編輯器不瓶,按空格進(jìn)入下一頁(yè)禾嫉,ctrl + B 回到上一頁(yè); /關(guān)鍵字 進(jìn)行搜索
1. 初始化一個(gè)本地倉(cāng)庫(kù)
> 原因: 管理本地代碼,修改上傳,版本回退
> 命令: git init
2. 配置倉(cāng)庫(kù)
> 告訴git你是誰(shuí)蚊丐?
原因: 追蹤修改記錄
命令: git config user.name “shunzi”
> 告訴git怎樣聯(lián)系你熙参?
原因: 多人合作開(kāi)發(fā)時(shí), 溝通交流
命令: git config user.email "shunzi@qq.com"
> 查看配置信息(.git -> config打開(kāi))
命令: git config -l
3. 個(gè)人開(kāi)發(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 重置到當(dāng)前版本
git reset —hard HEAD^^ 重置到上上個(gè)版本
git reset ——hard HEAD2 重置到往上2個(gè)版本
git reset —hard 七位版本號(hào) 重置到指定版本::
5. 備注補(bǔ)充
-
文件狀態(tài)(git status)
> 顏色含義 紅色: 代表被添加或者修改的文件沒(méi)有被添加到暫緩區(qū) 綠色: 代表文件在暫緩區(qū),等待提交 > 版本號(hào)的含義 版本號(hào)是一個(gè)由SHA1生成的40位哈希值 這樣做的目的是保證版本號(hào)的唯一
-
vim編輯器的使用
命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當(dāng)做命令來(lái)執(zhí)行 插入模式:輸入的所有內(nèi)容都被顯示,并被當(dāng)做文件內(nèi)容處理 命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq ; 強(qiáng)制退出不保存: q! )
-
日志查看配置
命令如下: 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 alias.st “status” git config alias.ci “commit -m”
-
--global的作用
可以進(jìn)行全局配置,所有的版本庫(kù)共享此配置 查看全局配置(桌面前往->個(gè)人->.gitconfig ** 個(gè)人電腦上建議使用全局配置**
三. Git命令行演練-團(tuán)隊(duì)開(kāi)發(fā)
** 團(tuán)隊(duì)開(kāi)發(fā)必須有一個(gè)共享庫(kù),這樣成員之間才可以進(jìn)行協(xié)作開(kāi)發(fā)**
0. 共享庫(kù)分類
> 本地共享庫(kù)(只能在本地面對(duì)面操作)
- 電腦文件夾/U盤/移動(dòng)硬盤
> 遠(yuǎn)程共享庫(kù)(可通過(guò)網(wǎng)絡(luò)遠(yuǎn)程操作)
- 自己搭建Git服務(wù)器(**不建議**)
- 在Github上托管項(xiàng)目(** 建議**)
Github網(wǎng)址(https://github.com); 公開(kāi)項(xiàng)目免費(fèi), 私有項(xiàng)目收費(fèi)
- 在OSChina上托管項(xiàng)目(** 推薦**)
OSChina網(wǎng)址(https://git.oschina.net) 安全免費(fèi),在國(guó)內(nèi)訪問(wèn)速度快
1. 搭建本地共享庫(kù)
原因: 多人合作開(kāi)發(fā),代碼共享
命令: git init —-bare
2. 經(jīng)理初始化項(xiàng)目到本地共享庫(kù)
命令: git clone 本地代碼倉(cāng)庫(kù)地址
3. 演示多人開(kāi)發(fā)
> 創(chuàng)建文件夾manager, niuda
命令:
mkdir manager
mkdir niuda
> 分別進(jìn)入到兩個(gè)文件夾從共享庫(kù)clone項(xiàng)目到本地
命令:
git clone 本地代碼倉(cāng)庫(kù)地址
git clone 本地代碼倉(cāng)庫(kù)地址
> 演練新增文件同步
命令:
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)于忽略文件
在真實(shí)開(kāi)發(fā)中,配置.gitignore文件 , 去github里面搜索gitignore 選擇OC版本的麦备,拷貝到本地倉(cāng)庫(kù)即可,記得添加到本地版本庫(kù)
> 常見(jiàn)問(wèn)題
fetch first 代表當(dāng)前文件過(guò)期,需要從遠(yuǎn)程共享庫(kù)更新
git pull
四. Git-XCode演練-團(tuán)隊(duì)開(kāi)發(fā)
1. 搭建本地共享版本庫(kù)
命令: git init —-bare
2. 經(jīng)理初始化項(xiàng)目到共享版本庫(kù)
** 注意: 添加忽略文件, 不然Xcode有可能會(huì)把沒(méi)必要的文件提交**
** 必須在使用Xcode之前把忽略文件添加進(jìn)來(lái), 因?yàn)閄code創(chuàng)建工程時(shí), 默認(rèn)直接把所有文件添加到暫緩區(qū), 加進(jìn)去之后忽略文件對(duì)其就無(wú)效了**
3. 牛大,牛二使用Xcode 克隆項(xiàng)目
4. 演練添加文件同步
5. 演練修改文件同步
6. 演練刪除文件同步
7. 演練沖突
五. github的使用
1. 托管項(xiàng)目到github
- 打開(kāi)github網(wǎng)站:[https://www.github.com]
- 注冊(cè)賬號(hào)(OneShunzi)
- 點(diǎn)擊創(chuàng)建新倉(cāng)庫(kù)[https://github.com/new]
- 填入項(xiàng)目名稱,描述等信息
- 創(chuàng)建完成
- 可根據(jù)生成的版本庫(kù)地址進(jìn)行克隆下來(lái)進(jìn)行操作
2. 怎樣加入合作伙伴
- 點(diǎn)擊”個(gè)人” -> setting -> SSH keys -> Add SSH key
- 將你小伙伴生成的公鑰添加進(jìn)來(lái)即可.(以下是生成公鑰私鑰方法)
[https://help.github.com/articles/generating-ssh-keys/]
3. 怎樣將其他著名框架添加到我們的代碼倉(cāng)庫(kù)?
搜索到對(duì)應(yīng)的框架
點(diǎn)擊fork
-
當(dāng)項(xiàng)目被移到自己代碼倉(cāng)庫(kù)中,就可以根據(jù)地址克隆下來(lái)進(jìn)行操作
** 注意: 你可以針對(duì)此框架進(jìn)行任意修改,但是僅僅作用在你的本地倉(cāng)庫(kù)中的副本,對(duì)原作者項(xiàng)目沒(méi)有任何影響. 如果想向原作者提建議,可以直接使用,pull request操作. 提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿
六. OSChina的使用
1. 托管項(xiàng)目到OSChina
- 打開(kāi)oschina網(wǎng)站:[https://git.oschina.net]
- 注冊(cè)賬號(hào)(OneShunzi)
- 點(diǎn)擊創(chuàng)建新倉(cāng)庫(kù)[https://git.oschina.net/projects/new]
- 填入項(xiàng)目名稱,描述等信息
- 創(chuàng)建完成
- 可根據(jù)生成的版本庫(kù)地址進(jìn)行克隆下來(lái)進(jìn)行操作
2. 怎樣加入合作伙伴?
點(diǎn)擊”管理”->項(xiàng)目成員管理->選擇成員權(quán)限進(jìn)行創(chuàng)建
-
或者直接只用SSH(以下是生成公鑰私鑰方法)
> 部署公鑰允許以只讀的方式訪問(wèn)項(xiàng)目孽椰,主要用于項(xiàng)目在生產(chǎn)服務(wù)器的部署上,免去HTTP方式每次操作都要輸入密碼和普通SSH方式擔(dān)心不小心修改項(xiàng)目代碼的麻煩凛篙。 > [https://help.github.com/articles/generating-ssh-keys/]
3. 怎樣將其他著名框架添加到我們的代碼倉(cāng)庫(kù)?
搜索到對(duì)應(yīng)的框架
點(diǎn)擊fork
-
當(dāng)項(xiàng)目被移到自己代碼倉(cāng)庫(kù)中,就可以根據(jù)地址克隆下來(lái)進(jìn)行操作
** 注意: 你可以針對(duì)此框架進(jìn)行任意修改,但是僅僅作用在你的本地倉(cāng)庫(kù)中的副本,對(duì)原作者項(xiàng)目沒(méi)有任何影響. 如果想向原作者提建議,可以直接使用,pull request操作. 提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿
七. 新人服務(wù)器搭建(補(bǔ)充了解)
-
新人服務(wù)器搭建概念原因?
概念: 搭建一個(gè)臨時(shí)共享版本庫(kù), 供新人專用 原因: 防止新人剛到時(shí)黍匾,搞亂服務(wù)器上的項(xiàng)目
新建一個(gè)文件夾,newBee呛梆,作為新人服務(wù)器
進(jìn)入文件夾 使用git init —-bare 初始化倉(cāng)庫(kù)
經(jīng)理打開(kāi)自己項(xiàng)目所在文件夾锐涯,執(zhí)行PULL ,更新到最新
-
然后source control ->項(xiàng)目master -> configure 項(xiàng)目
> 選擇Remotes 選項(xiàng) 代表當(dāng)前所連的遠(yuǎn)程服務(wù)器地址 > 點(diǎn)擊+號(hào) 添加 將newBee文件路徑作為另外一個(gè)遠(yuǎn)程服務(wù)器地址 file:// 協(xié)議開(kāi)頭 結(jié)尾以/結(jié)尾 > Done
經(jīng)理將最新代碼提交到新人遠(yuǎn)程倉(cāng)庫(kù)
經(jīng)理分配新人服務(wù)器地址給新人
新人各種折騰
經(jīng)理建立文件夾,從新人服務(wù)器下載代碼檢查
-
圖解
八. Git版本備份/分支管理(補(bǔ)充了解)
** 在git中不是通過(guò)拷貝代碼來(lái)解決備份和開(kāi)啟分支的**
** git 直接打標(biāo)簽削彬, 通過(guò)控制head指向全庸,來(lái)回到任一版本**
1.版本備份
-
建立共享庫(kù)
> 創(chuàng)建文件夾shareWeibo > 進(jìn)入文件夾后,初始化共享庫(kù) git init ——bare
-
經(jīng)理克隆項(xiàng)目后開(kāi)發(fā)完1.0版本,打標(biāo)簽后,上傳共享庫(kù)
> 創(chuàng)建manager文件夾 > 進(jìn)入文件夾后 git clone 共享庫(kù)絕對(duì)路徑 > 進(jìn)入工作區(qū),配置姓名,郵箱 git config user.name “manager” git config user.email “manager@qq.com” > 經(jīng)理創(chuàng)建文件,并修改部分代碼,提交代碼,上傳到共享庫(kù),完成v1.0版本 touch main.c open main.c:: 打開(kāi)后寫入abc git add . git commit -m “完成1.0版本開(kāi)發(fā)” git push > 經(jīng)理給此版本打標(biāo)簽,并將標(biāo)簽上傳到共享庫(kù) git tag -a v1.0 -m “標(biāo)記1.0版本” git push origin v1.0 > 經(jīng)理繼續(xù)開(kāi)發(fā)2.0版本......并提交 git add . git commit -m “2.0部分功能” git push
2. 已發(fā)布版本bug修復(fù)
在以上步驟基礎(chǔ)上做以下操作
-
牛大克隆項(xiàng)目,根據(jù)1.0版本創(chuàng)建分支,修復(fù)bug
> 創(chuàng)建niuda文件夾 > 進(jìn)入文件夾后 git clone 共享庫(kù)絕對(duì)路徑 > 進(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后提交到本地版本庫(kù)
** 注意此處提交到的是HEAD指向的分支-v1.0fixbug**
git add . git commit -m “修復(fù)bug”
-
牛大修復(fù)bug后,打標(biāo)簽v1.1作版本備份,并上傳共享庫(kù)
git tag -a v1.1 -m “1.1版本備份” git push origin v1.1
-
牛大上傳整個(gè)分支到共享版本庫(kù)
git push origin v1.0fixbug
** ———至此,分支修復(fù)bug結(jié)束,下面經(jīng)理要合并分支———**
-
經(jīng)理從共享庫(kù)更新代碼到本地庫(kù)
git pull
-
經(jīng)理查看當(dāng)前服務(wù)器都有哪些分支
git branch -r
-
經(jīng)理切換到master分支后,將v1.0fixbug分支合并過(guò)來(lái)
git checkout master git merge origin/v1.0fixbug -m “合并分支”
-
經(jīng)理合并完成后提交到共享庫(kù)
git add . git commit -m “合并分支” git push
-
合并完成后,可以刪除共享庫(kù)的分支
git branch -r -d origin/v1.0fixbug
-
查看版本標(biāo)簽,至此結(jié)束!!
git tag