簡介
什么是git?
git是一款開源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的
git的起源
作者是Linux之父:Linus
Benedict Torvalds
當初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)
git的現(xiàn)狀
在國外已經(jīng)非常普及,國內(nèi)并未普及(在慢慢普及)
越來越多的開源項目已經(jīng)轉(zhuǎn)移到git
其他版本控制工具
CVS
最早的開源、免費的集中式版本控制工具
自身設(shè)計有問題,會造成提交文件不完整,版本庫莫名其妙損壞的情況
SVN
修正了CVS的一些穩(wěn)定性問題,是目前用得最多的集中式版本庫控制工具
ClearCase
收費的集中式版本控制工具,安裝比Windows還大,運行比蝸牛還慢
能用ClearCase的一般是世界500強,他們有個共同的特點是財大氣粗或者人傻錢多
VSS
微軟的集中式版本控制工具,集成在Visual Studio中
由于它反人類的設(shè)計,連微軟自己都不好意思用了


git和SVN的簡單對比
速度
在很多情況下,git的速度遠遠比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 文件名
查看當前路徑所有文件的狀態(tài):git status
git log :查看文件的修改日志
查看某個文件的修改日志:git log 文件名
查看當前路徑所有文件的修改日志:git log
用一行的方式查看簡單的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一個整數(shù))
git diff :查看文件最新改動的地方
查看某個文件的最新改動的地方:git diff 文件名
查看當前路徑所有文件最新改動的地方:git diff
git常用指令
git init :初始化一個空的本地倉庫,生成一個.git目錄,用于維護版本信息
在當前路徑初始化倉庫:git init
在其他路徑初始化倉庫:git init 倉庫路徑
git add :將工作區(qū)的文件保存到暫緩區(qū)
保存某個文件到暫緩區(qū):git add 文件名
保存當前路徑的所有文件到暫緩區(qū):git add .(注意,最后是一個點 . )
git commit :將暫緩區(qū)的文件提交到當前分支
提交某個文件到分支:git commit -m ”注釋” 文件名
保存當前路徑的所有文件到分支: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:刪除文件(刪完之后要進行commit操作,才能同步到版本庫)
git clone:下載遠程倉庫到本地
下載遠程倉庫到當前路徑:git clone 倉庫的URL
下載遠程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑
git pull:下載遠程倉庫的最新信息到本地倉庫
git push:將本地的倉庫信息推送到遠程倉庫
工作原理
如果想了解git的工作原理,有幾個核心概念必須知道
工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內(nèi)容
版本庫(Repository):.git目錄,用于存儲記錄版本信息
暫緩區(qū)(stage)
分支(master):git自動創(chuàng)建的第一個分支
HEAD指針:用于指向當前分支
git add和git commit的原理
git add :把文件修改添加到暫存區(qū)
git commit :把暫存區(qū)的所有內(nèi)容提交到當前分支
遠程倉庫
如果是多人團隊開發(fā),最好還是搭建一個遠程倉庫
搭建遠程倉庫的途徑
自己搭建一個git服務(wù)器:費時費力
在GitHub上托管項目:公開項目免費、私有項目收費,很多第三方開源項目
在oschina上托管項目:完全免費,在國內(nèi)訪問速度快(推薦使用)


搭建GitHub遠程倉庫 – 配置SSH Key

搭建GitHub遠程倉庫– 配置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
當初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)
3.git的現(xiàn)狀?
在國外已經(jīng)非常普及,國內(nèi)并未普及(在慢慢普及)
越來越多的開源項目已經(jīng)轉(zhuǎn)移到git
- 常見的源代碼管理工具有哪些?
CVS
- 開啟版本控制之門
- 1990年誕生,“遠古時代”的主流源代碼管理工具
SVN
- 全稱是Subversion,集中式版本控制之王者
- 是CVS的接班人,速度比CVS快,功能比CVS多且強大
- 在國內(nèi)軟件企業(yè)中使用最為普遍(70%-90%)
ClearCase
- 收費的集中式版本控制工具,安裝比Windows還大,運行比蝸牛還慢
- 能用ClearCase的一般是世界500強,他們有個共同的特點是財大氣粗或者人傻錢多
VSS
- 微軟的集中式版本控制工具,集成在Visual Studio中
- git 和 svn的簡單對比
速度
在很多情況下,git的速度遠遠比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ù)器進行統(tǒng)一管理
- git工作原理
1.概念理解
- 工作區(qū)
與.git文件夾同級的其他文件夾或者子文件夾
- 版本控制庫
暫緩區(qū)
分支(Git不像SVN那樣有主干和分支的概念. 僅僅存在分支,其中master分支為默認被創(chuàng)建的分支,類似于SVN中的主干)
切換分支:通過控制HEAD指針指向不同的分支,就可以切換*
操作原則: 所有新添加/刪除/修改的文件 必須先添加到暫緩區(qū),然后才能提交到HEAD指向的當前分支中
- git使用環(huán)境
1.單人開發(fā)只需要一個本地庫
原因:不需要與他人共享代碼,只負責(zé)管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等
2.多人開發(fā)時需要一個共享版本庫
共享版本庫的形式:
本地共享庫:文件夾/U盤/硬盤
遠程共享庫:自己搭建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編輯器,按空格進入下一頁,ctrl + B 回到上一頁; /關(guā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 重置到當前版本
git reset —-hard HEAD^^ 重置到上上個版本
git reset ——hard HEAD~2 重置到往上2個版本
git reset —-hard 七位版本號 重置到指定版本::
- 備注補充
1.文件狀態(tài)(git status)
顏色含義
紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
綠色: 代表文件在暫緩區(qū),等待提交
版本號的含義
版本號是一個由SHA1生成的40位哈希值
這樣做的目的是保證版本號的唯一
2.vim編輯器的使用:

命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當做命令來執(zhí)行
插入模式:輸入的所有內(nèi)容都被顯示,并被當做文件內(nèi)容處理
命令行模式:執(zhí)行待定命令(保存文件并退出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命令行演練-團隊開發(fā)
團隊開發(fā)必須有一個共享庫,這樣成員之間才可以進行協(xié)作開發(fā)
- 共享庫分類
本地共享庫(只能在本地面對面操作)
- 電腦文件夾/U盤/移動硬盤
遠程共享庫(可通過網(wǎng)絡(luò)遠程操作)
- 自己搭建Git服務(wù)器(不建議)
- 在Github上托管項目(** 建議**)
Github網(wǎng)址(https://github.com); 公開項目免費, 私有項目收費 - 在OSChina上托管項目(** 推薦**)
OSChina網(wǎng)址(https://git.oschina.net) 安全免費,在國內(nèi)訪問速度快
搭建本地共享庫
原因: 多人合作開發(fā),代碼共享
命令: git init —-bare經(jīng)理初始化項目到本地共享庫
命令: git clone 本地代碼倉庫地址演示多人開發(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/ha iq/archive/2012/12/26/2833746.html
- 備注筆記
關(guān)于忽略文件
在真實開發(fā)中,配置.gitignore文件 , 去github里面搜索gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫
常見問題
fetch first 代表當前文件過期,需要從遠程共享庫更新
git pull
四. 掌握 - Git-XCode演練-團隊開發(fā)
搭建本地共享版本庫
命令: git init —-bare經(jīng)理初始化項目到共享版本庫
** 注意: 添加忽略文件, 不然Xcode有可能會把沒必要的文件提交**
** 必須在使用Xcode之前把忽略文件添加進來, 因為Xcode創(chuàng)建工程時, 默認直接把所有文件添加到暫緩區(qū), 加進去之后忽略文件對其就無效了**牛大,牛二使用Xcode 克隆項目
演練添加文件同步
演練修改文件同步
演練刪除文件同步
演練沖突
五. 了解 - github的使用
托管項目到github-HTTPS驗證
1.打開github網(wǎng)站:[https://www.github.com]
2.注冊賬號(OneShunzi)
3.點擊創(chuàng)建新倉庫[https://github.com/new]
4.填入項目名稱,描述等信息
5.創(chuàng)建完成
6.可根據(jù)生成的版本庫地址進行克隆下來進行操作托管項目到github-SSH驗證
1.點擊”個人” -> setting -> SSH keys -> Add SSH key
2.將生成的公鑰添加進來即可.(以下是生成公鑰私鑰方法) [https://help.github.com/articles/generating-ssh-keys/]怎樣將其他著名框架添加到我們的代碼倉庫?
1.搜索到對應(yīng)的框架
2.點擊fork
3.當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作
** 注意:
你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響.
如果想向原作者提建議,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿搜索到對應(yīng)的框架
六. 了解 - OSChina的使用
托管項目到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ù)生成的版本庫地址進行克隆下來進行操作怎樣加入合作伙伴?
1.點擊”管理”->項目成員管理->選擇成員權(quán)限進行創(chuàng)建
2.或者直接只用SSH(以下是生成公鑰私鑰方法)
部署公鑰允許以只讀的方式訪問項目,主要用于項目在生產(chǎn)服務(wù)器的部署上,免去HTTP方式每次操作都要輸入密碼和
普通SSH方式擔(dān)心不小心修改項目代碼的麻煩。
[https://help.github.com/articles/generating-ssh-keys/]
- 怎樣將其他著名框架添加到我們的代碼倉庫?
1.搜索到對應(yīng)的框架
2.點擊fork
3.當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作
** 注意:
你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響.
如果想向原作者提建議,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿
七. 了解 - 新人服務(wù)器搭建
1.新人服務(wù)器搭建概念原因?
概念: 搭建一個臨時共享版本庫, 供新人專用
原因: 防止新人剛到時,搞亂服務(wù)器上的項目
2.新建一個文件夾,newBee,作為新人服務(wù)器
3.進入文件夾 使用git init —-bare 初始化倉庫
4.經(jīng)理打開自己項目所在文件夾,執(zhí)行PULL ,更新到最新
5.然后source control ->項目master -> configure 項目
選擇Remotes 選項 代表當前所連的遠程服務(wù)器地址
點擊+號 添加 將newBee文件路徑作為另外一個遠程服務(wù)器地址 file:// 協(xié)議開頭 結(jié)尾以/結(jié)尾
Done
6.經(jīng)理將最新代碼提交到新人遠程倉庫
7.經(jīng)理分配新人服務(wù)器地址給新人
8.新人各種折騰
9.經(jīng)理建立文件夾,從新人服務(wù)器下載代碼檢查
10.圖解:

八. 了解- 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
- 已發(fā)布版本bug修復(fù)
在以上步驟基礎(chǔ)上做以下操作
1.牛大克隆項目,根據(jù)1.0版本創(chuàng)建分支,修復(fù)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::
修復(fù)bug后提交到本地版本庫
注意此處提交到的是HEAD指向的分支-v1.0fixbug
git add .
git
commit -m “修復(fù)bug”
2.牛大修復(fù)bug后,打標簽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)理查看當前服務(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.查看版本標簽,至此結(jié)束!!
git tag