簡介
什么是git?
git是一款開源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的
git的起源
作者是Linux之父:Linus
Benedict Torvalds
當(dāng)初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)
git的現(xiàn)狀
在國外已經(jīng)非常普及,國內(nèi)并未普及(在慢慢普及)
越來越多的開源項(xiàng)目已經(jīng)轉(zhuǎn)移到git
其他版本控制工具
CVS
最早的開源、免費(fèi)的集中式版本控制工具
自身設(shè)計有問題,會造成提交文件不完整,版本庫莫名其妙損壞的情況
SVN
修正了CVS的一些穩(wěn)定性問題,是目前用得最多的集中式版本庫控制工具
ClearCase
收費(fèi)的集中式版本控制工具,安裝比Windows還大,運(yùn)行比蝸牛還慢
能用ClearCase的一般是世界500強(qiáng),他們有個共同的特點(diǎn)是財大氣粗或者人傻錢多
VSS
微軟的集中式版本控制工具,集成在Visual Studio中
由于它反人類的設(shè)計,連微軟自己都不好意思用了
git和SVN的簡單對比
速度
在很多情況下,git的速度遠(yuǎn)遠(yuǎn)比SVN快
結(jié)構(gòu)
SVN是集中式管理,git是分布式管理
其他
SVN使用分支比較笨拙,git可以輕松擁有無限個分支
SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git
使用git
跟SVN一樣,你可以通過命令行敲指令或者圖形界面客戶端使用git
在Mac上,比較好用的git圖形界面客戶端有
SourceTree
下載地址:http://www.sourcetreeapp.com/download/
GitHub
下載地址:https://mac.github.com
不過它是專門為GitHub網(wǎng)站而設(shè)計的
Xcode
git常用指令
git help :git指令幫助手冊
查看其他指令的做法:git help 其他指令
git config :git的配置信息相關(guān)(修改的是.git/config文件)
配置用戶名:git config “user.name”用戶名(用于跟蹤修改記錄)
配置郵箱:git config “user.email”郵箱(用于多人開發(fā)間的溝通)
查看配置信息:git config –l
編輯配置信息:git config –e(用vim編輯,:wq是退出vim編輯器)
設(shè)置指令的別名:git config alias.別名 原指令名稱
設(shè)置帶參數(shù)指令的別名:git config alias.別名“原指令名稱 參數(shù)”
將此設(shè)置應(yīng)用到整個系統(tǒng)中:git config ––gloabal
git常用指令
git status :查文件的狀態(tài)
查看某個文件的狀態(tài):git status 文件名
查看當(dāng)前路徑所有文件的狀態(tài):git status
git log :查看文件的修改日志
查看某個文件的修改日志:git log 文件名
查看當(dāng)前路徑所有文件的修改日志:git log
用一行的方式查看簡單的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一個整數(shù))
git diff :查看文件最新改動的地方
查看某個文件的最新改動的地方:git diff 文件名
查看當(dāng)前路徑所有文件最新改動的地方:git diff
git常用指令
git init :初始化一個空的本地倉庫,生成一個.git目錄,用于維護(hù)版本信息
在當(dāng)前路徑初始化倉庫:git init
在其他路徑初始化倉庫:git init 倉庫路徑
git add :將工作區(qū)的文件保存到暫緩區(qū)
保存某個文件到暫緩區(qū):git add 文件名
保存當(dāng)前路徑的所有文件到暫緩區(qū):git add .(注意,最后是一個點(diǎn) . )
git commit :將暫緩區(qū)的文件提交到當(dāng)前分支
提交某個文件到分支:git commit -m ”注釋” 文件名
保存當(dāng)前路徑的所有文件到分支:git commit -m ”注釋”
git reset :版本回退(建議加上––hard參數(shù),git支持無限次后悔)
回退到上一個版本:git reset ––hard HEAD^
回退到上上一個版本:git reset ––hard HEAD^^
回退到上N個版本:git reset ––hard HEAD~N(N是一個整數(shù))
回退到任意一個版本:git reset ––hard 版本號(版本號用7位即可)
git reflog :查看分支引用記錄(能夠查看所有的版本號)
git rm:刪除文件(刪完之后要進(jìn)行commit操作,才能同步到版本庫)
git clone:下載遠(yuǎn)程倉庫到本地
下載遠(yuǎn)程倉庫到當(dāng)前路徑:git clone 倉庫的URL
下載遠(yuǎn)程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑
git pull:下載遠(yuǎn)程倉庫的最新信息到本地倉庫
git push:將本地的倉庫信息推送到遠(yuǎn)程倉庫
工作原理
如果想了解git的工作原理,有幾個核心概念必須知道
工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內(nèi)容
版本庫(Repository):.git目錄,用于存儲記錄版本信息
暫緩區(qū)(stage)
分支(master):git自動創(chuàng)建的第一個分支
HEAD指針:用于指向當(dāng)前分支
git add和git commit的原理
git add :把文件修改添加到暫存區(qū)
git commit :把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
遠(yuǎn)程倉庫
如果是多人團(tuán)隊開發(fā),最好還是搭建一個遠(yuǎn)程倉庫
搭建遠(yuǎn)程倉庫的途徑
自己搭建一個git服務(wù)器:費(fèi)時費(fèi)力
在GitHub上托管項(xiàng)目:公開項(xiàng)目免費(fèi)、私有項(xiàng)目收費(fèi),很多第三方開源項(xiàng)目
在oschina上托管項(xiàng)目:完全免費(fèi),在國內(nèi)訪問速度快(推薦使用)
搭建GitHub遠(yuǎn)程倉庫 – 配置SSH Key
搭建GitHub遠(yuǎn)程倉庫– 配置SSH Key
在Mac上生成SSH
Key(在終端輸入下面指令)
cd
~/.ssh
ssh-keygen -t rsa -C "你的郵箱地址”
然后一直敲回車
然后就會在~/.ssh目錄下生成SSK Key的秘鑰對
id_rsa :私鑰,不可泄露
id_rsa.pub :公鑰,可以公開(將這個文件的內(nèi)容粘貼到GitHub上)
利用cat指令可以查看文件的內(nèi)容
cat id_rsa.pub
*******************筆記*********************
一. 掌握 - git 概述
- 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
- 常見的源代碼管理工具有哪些?
CVS
- 開啟版本控制之門
- 1990年誕生,“遠(yuǎn)古時代”的主流源代碼管理工具
SVN
- 全稱是Subversion,集中式版本控制之王者
- 是CVS的接班人,速度比CVS快,功能比CVS多且強(qiáng)大
- 在國內(nèi)軟件企業(yè)中使用最為普遍(70%-90%)
ClearCase
- 收費(fèi)的集中式版本控制工具,安裝比Windows還大,運(yùn)行比蝸牛還慢
- 能用ClearCase的一般是世界500強(qiáng),他們有個共同的特點(diǎn)是財大氣粗或者人傻錢多
VSS
- 微軟的集中式版本控制工具,集成在Visual Studio中
- git 和 svn的簡單對比
速度
在很多情況下,git的速度遠(yuǎn)遠(yuǎn)比SVN快
結(jié)構(gòu)
SVN是集中式管理,git是分布式管理
其他
SVN使用分支比較笨拙,git可以輕松擁有無限個分支
SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git
- SVN工作流程和GIT工作流程對比
svn checkout —— git clone
svn 只下載代碼, git 會連同代碼倉庫一起下載下來svn commit —— git commit
svn 是提交到服務(wù)器,git 中是提交到本地倉庫,需要使用push才能提交到服務(wù)器svn update - git pull
都是從服務(wù)器下載最新被修改的代碼
分布式和集中式最大的區(qū)別在于:在分布式下,本地有個代碼倉庫,開發(fā)者可以在本地提交; 而集中式版本控制, 只有在服務(wù)器才有一個代碼倉庫, 只能在服務(wù)器進(jìn)行統(tǒng)一管理
- git工作原理
1.概念理解
- 工作區(qū)
與.git文件夾同級的其他文件夾或者子文件夾
- 版本控制庫
暫緩區(qū)
分支(Git不像SVN那樣有主干和分支的概念. 僅僅存在分支,其中master分支為默認(rèn)被創(chuàng)建的分支,類似于SVN中的主干)
切換分支:通過控制HEAD指針指向不同的分支,就可以切換*
操作原則: 所有新添加/刪除/修改的文件 必須先添加到暫緩區(qū),然后才能提交到HEAD指向的當(dāng)前分支中
- git使用環(huán)境
1.單人開發(fā)只需要一個本地庫
原因:不需要與他人共享代碼,只負(fù)責(zé)管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等
2.多人開發(fā)時需要一個共享版本庫
共享版本庫的形式:
本地共享庫:文件夾/U盤/硬盤
遠(yuǎn)程共享庫:自己搭建git服務(wù)器/ 托管到第三方平臺(例如github, oschina)
3.客戶端使用環(huán)境 無論是單人開發(fā)還是多人開發(fā),客戶端都可以使用命令行或者圖形界面使用git
SourceTree
GitHub
- 下載地址:https://mac.github.com
- 不過它是專門為GitHub網(wǎng)站而設(shè)計的
Xcode
- 雖然集成較好,但是只能做一些常用的簡單操作,復(fù)雜操作還要使用命令行
- 學(xué)習(xí)網(wǎng)站
http://backlogtool.com/git-guide/cn/intro/intro1_1.html
二. 掌握 - Git命令行演練-個人開發(fā)
- 如何學(xué)習(xí)git指令
git help [子命令]
和學(xué)習(xí)SVN指令是一樣的,只不過git是通過使用指南的形式展示給用戶看(不能編輯的vim編輯器),使用q退出vim編輯器,按空格進(jìn)入下一頁,ctrl + B 回到上一頁; /關(guān)鍵字 進(jìn)行搜索
- 初始化一個本地倉庫
原因: 管理本地代碼,修改上傳,版本回退
命令: git init
- 配置倉庫
告訴git你是誰?(方便以后管理自己的代碼)
原因: 追蹤修改記錄
命令: git config user.name “Edison”
告訴git怎樣聯(lián)系你?
原因: 多人合作開發(fā)時, 溝通交流
命令: git config user.email "shunzi@qq.com"
查看配置信息(.git -> config打開)
命令: git config -l
? 全局的配置:git config --global user.name edison
? git config --global user.email 350106106@qq.com
- 個人開發(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^^ 重置到上上個版本
git reset ——hard HEAD~2 重置到往上2個版本
git reset —-hard 七位版本號 重置到指定版本::
- 備注補(bǔ)充
1.文件狀態(tài)(git status)
顏色含義
紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
綠色: 代表文件在暫緩區(qū),等待提交
版本號的含義
版本號是一個由SHA1生成的40位哈希值
這樣做的目的是保證版本號的唯一
2.vim編輯器的使用:
命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當(dāng)做命令來執(zhí)行
插入模式:輸入的所有內(nèi)容都被顯示,并被當(dāng)做文件內(nèi)容處理
命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq ; 強(qiáng)制退出不保存: 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的作用
可以進(jìn)行全局配置,所有的版本庫共享此配置
查看全局配置(桌面前往->個人->.gitconfig
** 個人電腦上建議使用全局配置**
三. 掌握 - Git命令行演練-團(tuán)隊開發(fā)
團(tuán)隊開發(fā)必須有一個共享庫,這樣成員之間才可以進(jìn)行協(xié)作開發(fā)
- 共享庫分類
本地共享庫(只能在本地面對面操作)
- 電腦文件夾/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)目(** 推薦**)
OSChina網(wǎng)址(https://git.oschina.net) 安全免費(fèi),在國內(nèi)訪問速度快
搭建本地共享庫
原因: 多人合作開發(fā),代碼共享
命令: git init —-bare經(jīng)理初始化項(xiàng)目到本地共享庫
命令: git clone 本地代碼倉庫地址演示多人開發(fā)
創(chuàng)建文件夾manager, niuda
命令:
mkdir manager
mkdir niuda
分別進(jìn)入到兩個文件夾從共享庫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ī)則
http://www.cnblogs.com/ha iq/archive/2012/12/26/2833746.html
- 備注筆記
關(guān)于忽略文件
在真實(shí)開發(fā)中,配置.gitignore文件 , 去github里面搜索gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫
常見問題
fetch first 代表當(dāng)前文件過期,需要從遠(yuǎn)程共享庫更新
git pull
四. 掌握 - Git-XCode演練-團(tuán)隊開發(fā)
搭建本地共享版本庫
命令: git init —-bare經(jīng)理初始化項(xiàng)目到共享版本庫
** 注意: 添加忽略文件, 不然Xcode有可能會把沒必要的文件提交**
** 必須在使用Xcode之前把忽略文件添加進(jìn)來, 因?yàn)閄code創(chuàng)建工程時, 默認(rèn)直接把所有文件添加到暫緩區(qū), 加進(jìn)去之后忽略文件對其就無效了**牛大,牛二使用Xcode 克隆項(xiàng)目
演練添加文件同步
演練修改文件同步
演練刪除文件同步
演練沖突
五. 了解 - github的使用
托管項(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)行操作托管項(xiàng)目到github-SSH驗(yàn)證
1.點(diǎn)擊”個人” -> setting -> SSH keys -> Add SSH key
2.將生成的公鑰添加進(jìn)來即可.(以下是生成公鑰私鑰方法) [https://help.github.com/articles/generating-ssh-keys/]怎樣將其他著名框架添加到我們的代碼倉庫?
1.搜索到對應(yīng)的框架
2.點(diǎn)擊fork
3.當(dāng)項(xiàng)目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進(jìn)行操作
** 注意:
你可以針對此框架進(jìn)行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項(xiàng)目沒有任何影響.
如果想向原作者提建議,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿搜索到對應(yīng)的框架
六. 了解 - OSChina的使用
托管項(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)行操作怎樣加入合作伙伴?
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/]
- 怎樣將其他著名框架添加到我們的代碼倉庫?
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ù)器搭建概念原因?
概念: 搭建一個臨時共享版本庫, 供新人專用
原因: 防止新人剛到時,搞亂服務(wù)器上的項(xiàng)目
2.新建一個文件夾,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文件路徑作為另外一個遠(yuǎn)程服務(wù)器地址 file:// 協(xié)議開頭 結(jié)尾以/結(jié)尾
Done
6.經(jīng)理將最新代碼提交到新人遠(yuǎn)程倉庫
7.經(jīng)理分配新人服務(wù)器地址給新人
8.新人各種折騰
9.經(jīng)理建立文件夾,從新人服務(wù)器下載代碼檢查
10.圖解:
八. 了解- 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.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)理給此版本打標(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
- 已發(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
3.牛大上傳整個分支到共享版本庫
git push origin
v1.0fixbug
———至此,分支修復(fù)bug結(jié)束,下面經(jīng)理要合并分支———
1.經(jīng)理從共享庫更新代碼到本地庫
git pull
2.經(jīng)理查看當(dāng)前服務(wù)器都有哪些分支
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.查看版本標(biāo)簽,至此結(jié)束!!
git tag