git
==========Wh.少爺===========
顯?示隱藏?文件
defaults write com.apple.finder AppleShowAllFiles -bool true
1.git簡介
- 什么是 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
2.git 和 svn的區(qū)別
- 速度
-- 在很多情況下,git的速度遠(yuǎn)遠(yuǎn)比SVN快 - 結(jié)構(gòu)
-- SVN是集中式管理,git是分布式管理 - 其他
-- SVN使用分支比較笨拙,git可以輕松擁有無限個(gè)分支
-- SVN必須聯(lián)網(wǎng)才能正常工作距贷,git支持本地版本控制工作
-- 舊版本的SVN會(huì)在每一個(gè)目錄置放一個(gè).svn柄冲,git只會(huì)在根目錄擁有一個(gè).git
3.git 工作流程
分布式和集中式的最大區(qū)別在于:在分布式下
開發(fā)者可以本地提交
每個(gè)開發(fā)者機(jī)器上都有一個(gè)服務(wù)器的數(shù)據(jù)庫
分布式管理
4.git 的基本使用
-
git 的重要概念及工作原理
工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內(nèi)容
-
版本庫(Repository):.git目錄吻谋,用于存儲(chǔ)記錄版本信息
- 暫緩區(qū)(stage)
- 分支(master):git自動(dòng)創(chuàng)建的第一個(gè)分支
- HEAD指針:用于指向當(dāng)前分支
git add和git commit的原理 git add :把文件修改添加到暫存區(qū) git commit :把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
-
學(xué)習(xí)git指令:
- 學(xué)習(xí)git指令和SVN指令的學(xué)習(xí)其實(shí)是一樣的, 只不過展現(xiàn)的方式不太一樣现横, git是通過使用指南的方式告訴我們某一個(gè)指令如何使用
- 這個(gè)指南其實(shí)是一個(gè)不可編輯的vim
$ git help 查看svn所有命令的幫助 $ git help 子命
. 要退出幫助信息漓拾,按"q"
. 翻看下頁,按"空格"
. 翻看上頁戒祠,按"CTRL+B"
. 要搜索相關(guān)文字骇两,按"/"然后輸"相關(guān)文字"
- git常規(guī)指令:
git status 查看文件狀態(tài)
-
git add 添加文件到“暫存區(qū)”
- 添加之前的顏色
紅色 代表在”工作區(qū)“ - 添加到暫存區(qū)之后的顏色
綠色 代碼在”暫存區(qū)“
- 添加之前的顏色
-
git commit 文件名稱 添加文件到”本地倉庫“
注意:如果沒有在commit后面加上 -m說明修改了什么, 會(huì)自動(dòng)進(jìn)入vim界面,要求我們輸入修改信息,按鍵盤上的
i
代表開始輸入內(nèi)容
輸入完畢之后按esc
然后按:wq
所以:如果以后在終端中提交最好在后面加上-m
注意:git中的add和SVN中的add不太一樣姜盈, SVN中只需要add一次低千,而git中每次新建或者修改之后都需要重新add
-
查看log
查看所有版本庫日志$ git log
查看指定文件的版本庫日志git log 文件名
git reflog
查看所有修改信息(所有版本)- 注意: GIt中的版本號(hào)是一個(gè)”40位“的哈希值, 而SVN中的版本號(hào)是一個(gè)遞增的整數(shù)
配置帶顏色的log別名
```
$ 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"
```
個(gè)人建議:除非特殊原因馏颂,最好不要設(shè)置別名示血,否則換一臺(tái)機(jī)器就不會(huì)用了
. 注意: git默認(rèn)沒有簡寫指令
. 注意: 一般情況下不建議自定義簡寫指令
. git中的簡寫稱之為起別名
-
版本號(hào),讓我們在任意版本之間穿梭
git reset —hard 版本號(hào)(只需要寫前7位) 其中—hard代表強(qiáng)制重置 回到當(dāng)前版本救拉,放棄所有沒有提交的修改 $ git reset --hard HEAD 回到上一個(gè)版本 $ git reset --hard HEAD^ 回到之前第3個(gè)修訂版本 $ git reset --hard HEAD~(3) 回到指定版本號(hào)的版本 $ git reset e695b67 查看分支引用記錄 $ git reflog
```
- 已經(jīng)提交
```
git reset —hard HEAD^ 返回上一個(gè)版本
其中—hard代表強(qiáng)制重置
git reset —hard 版本號(hào)(只需要寫前7位)
```
- 未提交
```
git checkout 文件名 回退到上一次提交的版本
git reset —hard HEAD 回退到上一次提交的版, 注意HEAD后面沒有尖號(hào)^
```
-
單個(gè)文件的修改管理
查看文件變化 $ git diff 如果顯示綠色代表新增 如果顯示紅色代表刪除 撤銷對(duì)文件做的修改 $ git checkout Person.h 從代碼庫(暫存區(qū)中刪除文件)
a.本地操作
-
1.創(chuàng)建代碼庫 & 配置個(gè)人信息
- 1> 進(jìn)入工作目錄中难审,新建一個(gè)“本地倉庫”
$ cd 進(jìn)入工作目錄 $ git init
- 2> 告訴git你是誰
告訴git怎么聯(lián)系你
$ git config user.name lnj $ git config user.email lnj@itcast.cn
》上面一種配置方式是一次性的配置, 會(huì)配置到被管理文件的亿絮。git文件夾下的config 中
》下面一種配置方式是一勞永逸的方式:
兩個(gè)命令會(huì)將用戶信息保存在用戶目錄下的 .gitconfig 文件中$ git config --global user.name lmj $ git config --global user.email lmj@itcast.cn
- 3> 查看當(dāng)前所有配置
$ git config -l
-
2.實(shí)際開發(fā)
- 1> 創(chuàng)建代碼告喊,開始開發(fā)
$ touch main.c $ open main.c
- 2> 將代碼添加到代碼庫
查看當(dāng)前代碼庫狀態(tài) $ git status 將文件添加到代碼庫 $ git add main.c 將修改提交到代碼庫 $ git commit -m "添加了main.c"
提示:
在此一定要使用 -m 參數(shù)指定修改的備注信息
否則會(huì)進(jìn)入 vim 編輯器麸拄,如果對(duì)vim不熟悉,會(huì)是很糟糕的事情
將當(dāng)前文件夾下的所有新建或修改的文件一次性添加到代碼庫
$ git add .
- 3> 添加多個(gè)文件
$ touch Person.h Person.m $ git add . $ git commit -m "添加了Person類" $ open Person.h $ git add . $ git commit -m "增加Person類屬性"
b.團(tuán)隊(duì)開發(fā)
遠(yuǎn)程倉庫(專門用于團(tuán)隊(duì)開發(fā)的代碼倉庫
SVN需要一個(gè)單獨(dú)的服務(wù)器
Git不需要: 文件中黔姜、U盤中拢切、云上、github秆吵、OSChina...
1.新建git遠(yuǎn)程倉庫,這個(gè)倉庫僅僅是用于管理代碼,不參與開發(fā)
```
# 切換目錄
$ cd /Users/lnj/Desktop/git演練/公司/weibo
# 建立空白代碼庫(專門用于團(tuán)隊(duì)開發(fā))
$ git init --bare
```
2.項(xiàng)目經(jīng)理初始化項(xiàng)目
- 切換目錄
```
$ cd /Users/lnj/Desktop/git演練/經(jīng)理
```
- "克隆"代碼庫到本地
```
$ git clone /Users/lnj/Desktop/git演練/公司/weibo/
```
- 忽略不需要加入版本控制器的文件以及文件夾.gitignore
```
touch .gitignore
open .gitignore
```
- 要忽略的?文件 可以去https://github.com/github/gitignore/blob/master/Objective-C.gitignore查看OC需要忽略 的內(nèi)容,將內(nèi)容填寫到. gitignore中,.gitignore一定要在和.git隱藏文件夾同一級(jí)的目錄下
- 生成好.gitignore文件之后失球, 還需要將.gitignore文件添加到版本控制
```
git add .gitignore
git commit .gitignore -m”將.gitignore文件添加到版本控制”
```
- 新建項(xiàng)目,初始化項(xiàng)目在.git同目錄下
```
source conrol—>commit 將代碼提交到本地倉庫
source conrol—>push 將代碼提交到遠(yuǎn)程倉庫
```
3.新人加入
- git clone 共享代碼庫的地址
- 修改代碼—>git commit —>git push
4.分支管理
```
# 查看當(dāng)前標(biāo)簽
$ git tag
在本地代碼庫給項(xiàng)目打上一個(gè)標(biāo)簽
$ git tag -a v1.0 -m 'Version 1.0'
將標(biāo)簽添推送到遠(yuǎn)程代碼庫中
$ git push origin v1.0
使用tag,就能夠?qū)㈨?xiàng)目快速切換到某一個(gè)中間狀態(tài)帮毁,例如產(chǎn)品開發(fā)線上的某一個(gè)穩(wěn) 定版本
簽出v1.0標(biāo)簽
$ git checkout v1.0
從簽出狀態(tài)創(chuàng)建v1.0bugfix分支
$ git checkout -b bugfix1.0
查看遠(yuǎn)程分支
$ git branch -r
刪除遠(yuǎn)程分支
$ git branch -r -d origin/bugfix1.0
$ git merge v1.0
```
5.注意
- git中默認(rèn)就會(huì)創(chuàng)建一個(gè)分支实苞, 這個(gè)分支叫做origin/master, 相當(dāng)于svn中的trunk
- 專業(yè)人員只需要在git倉庫的hooks文件夾中寫一些指令烈疚, 就可以完成自動(dòng)測試(壓力測試黔牵、自動(dòng)測試、集成測試爷肝、冒煙測試猾浦、。灯抛。金赦。)
- 和SVN一樣, 如果服務(wù)器倉庫的代碼被修改了对嚼, 我們再提交代碼也會(huì)報(bào)錯(cuò)夹抗。
fetch first == out of data
**要先從服務(wù)器`pull`之后再提交***
- 總結(jié):
git和svn最大的區(qū)別
1.git每次修改新增都需要add
2.git每臺(tái)電腦都有一個(gè)倉庫
3.git是先提交到本地倉庫, 再提交到遠(yuǎn)程倉庫
c.新人服務(wù)器的搭建
1.新建一個(gè)新人服務(wù)器
cd /Users/lnj/Desktop/... 新人服務(wù)器
2.初始化倉庫
git init --bare
3.添加一個(gè)新的遠(yuǎn)程倉庫
source control —> master —>config —>remotes —>add —> add remote
4.將經(jīng)理最新的代碼提交到新人服務(wù)器
xcode -> source control -> push
5.經(jīng)理分配新人服務(wù)器的地址給新人
c.分支 —bug 修復(fù)
1.開發(fā)
2.發(fā)布
```
# 查看當(dāng)前標(biāo)簽
$ git tag
在本地代碼庫給項(xiàng)目打上一個(gè)標(biāo)簽
$ git tag -a v1.0 -m 'Version 1.0'
將標(biāo)簽添推送到遠(yuǎn)程代碼庫中
$ git push origin v1.0
```
3.保存穩(wěn)定版本
4.繼續(xù)開發(fā)
5.出現(xiàn)bug
6.分配員工到分支上修復(fù)bug
```
>員工從服務(wù)器下載最新代碼
$git clone /Users/lnj/Desktop/纵竖。漠烧。。
》員工利用git checkout v1.0指令快速切換到1.0版本
》根據(jù)提示:開啟一個(gè)新的分支開始修復(fù)代碼
$git checkout -b 1.0bug_fix
》修復(fù)完成之后再打個(gè)標(biāo)簽
$ git tag -a v1.1 -m 'Version 1.1'
$ git push origin v1.0 將標(biāo)簽添推送到遠(yuǎn)程代碼庫中
```
7.合并修復(fù)后的代碼到主線
在修復(fù)bug 的代碼中
![Snip20160126_6.png](http://upload-images.jianshu.io/upload_images/1482869-c551aa564d9a484e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
8.備份穩(wěn)定版本
d.如何使用/學(xué)習(xí)第三方框架
優(yōu)秀的第三方框架都在 github.com
1> 搜索
2> git clone 獲得完整版本
$ git clone https://github.com/AFNetworking/AFNetworking.git
3> 獲取最新版本 git pull
- 進(jìn)入clone的本地文件夾
$ git pull
4> 看github上的文檔,優(yōu)秀的第三方框架都有好的文檔
5> 編寫測試程序,看運(yùn)行結(jié)果
6> 針對(duì)感興趣的部分,看源代碼
7> 有問題去http://stackoverflow.com
e.通過Xcode將代碼提交到github上
1.注冊一個(gè) github賬號(hào)
2.新建遠(yuǎn)程倉庫
3.復(fù)制遠(yuǎn)程倉庫地址
4.添加遠(yuǎn)程倉庫
- a-
![Snip20160126_14.png](http://upload-images.jianshu.io/upload_images/1482869-be0d032e0b29b0ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_17.png](http://upload-images.jianshu.io/upload_images/1482869-6c6540bc4331f2ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_18.png](http://upload-images.jianshu.io/upload_images/1482869-9f14a056141ef826.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_20.png](http://upload-images.jianshu.io/upload_images/1482869-1fcf716895f09d83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_22.png](http://upload-images.jianshu.io/upload_images/1482869-20dffd907faae958.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- b-
通過 git clone 遠(yuǎn)程倉庫地址
5.在代碼倉庫創(chuàng)建工程靡砌,提交 SourceControl -> commit -> push
push 成功之后已脓,github上 就有了代碼倉庫。
6.配置SSH Keys
- 點(diǎn)擊昵稱來到個(gè)人主頁
- 點(diǎn)擊主頁中的設(shè)置(setting)
- 點(diǎn)擊SSH Keys
- 點(diǎn)擊 generating SSH keys
- 1.檢查本地的ssh keys
在“用戶目錄”下 ls -al ~/.ssh
- 2.如果文件夾不存在需要手動(dòng)創(chuàng)建一個(gè) mkdir .ssh(可不要)
- 3.根據(jù)github的提示2生成ssh keys
在.ssh目錄下執(zhí)行
`$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"`
輸入完成之后連續(xù)按下回車通殃, 知道出現(xiàn)牛逼的圖形位置
- 4.生成完公鑰和私鑰之后輸入
ls -la查看是否生成成功 id_rsa(私鑰) id_rsa.pub(公鑰)
- 5.根據(jù)提示3獲得公鑰
pbcopy < ~/.ssh/id_rsa.pub
打開id_rsa.pub文件拷貝里面的內(nèi)容
- 6.點(diǎn)擊 setting —》 ssh key —>add ssh key
將剛才獲取到得公鑰添加進(jìn)去
![Snip20160126_24.png](http://upload-images.jianshu.io/upload_images/1482869-55a83561ebc199e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Snip20160126_25.png](http://upload-images.jianshu.io/upload_images/1482869-57686487cdf35778.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 7.更具github第4步提示度液, 驗(yàn)證公鑰
驗(yàn)證成功網(wǎng)頁上的灰色圓點(diǎn)會(huì)變成綠色
- 8.拷貝到公鑰之后打開github主頁
》點(diǎn)擊倉庫(Repositories)
》再點(diǎn)擊new來到github創(chuàng)建倉庫界面
- 9.通過github提供的地址下載一個(gè)空得倉庫到本地
》創(chuàng)建一個(gè)新的項(xiàng)目到本地倉庫文件夾中
》利用Xcode提交代碼到github
》注意:要求輸入用戶名密碼時(shí)候,輸入的是github上顯示的昵稱而不是登錄賬號(hào)
```
6.刪除代碼倉庫
7.怎么把別人的代碼倉庫弄到自己的代碼倉庫