標籤:
一:準備工作
1.什麼是git?
git是一款開源的分布式版本控制工具。
在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的。
2.git和SVN的簡單對比
速度
在很多情況下,git的速度遠遠比SVN快
結構
SVN是集中式管理,git是分布式管理。分布式和集中式的最大區別在於:在分布式下開發人員可以本地提交,每個開發人員機器上都有一個伺服器的資料庫。
其他
SVN使用分支比較笨拙,git可以輕鬆擁有無限個分支
SVN必須連網才能正常工作,git支援本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git
二.git的本地操作
1.建立一個“本地倉庫”
$ git init
2.配置倉庫
》告訴git你是誰
git config user.name yoowei
》告訴git怎麼聯絡你
git config user.email [email protected]
》上面一種配置方式是一次性的配置, 會配置到被管理檔案的.git檔案夾下的config檔案裡,可以開啟查看配置資訊。
》下面一種配置方式是一勞永逸的方式,會將使用者資訊儲存在使用者目錄下的 .gitconfig 檔案中。(Finder - 前往 - 個人 -apple -.gitconfig)
git config --global user.name yoowei
git config --global user.email [email protected]
# 只有配置了使用者和郵箱之後,git才能識別出操作的人員資訊,通過鉤子(hooks)程式可以設定一些動作
# 例如單元測試發現問題後,自動給相關人員寄送電子郵件
》 查看當前所有配置
$ git config -l
3.如何學習git指令
>學習git指令和SVN指令的學習其實是一樣的, 只不過展現的方式不太一樣, git是通過使用指南的方式告訴我們某一個指令如何使用
>例如git help clone這個指南其實是一個不可編輯的vim
Q:退出指南
按空格:下一頁
control + B :上一頁
/需要搜尋的內容 :可以進行搜尋
4. 實際開發
1> 建立代碼,開始開發
$ touch main.c
$ open main.c
2> 將代碼添加到程式碼程式庫
# 查看當前程式碼程式庫狀態
$ git status
# 將檔案添加到程式碼程式庫
$ git add main.c
# 將修改提交到程式碼程式庫
$ git commit -m "添加了main.c"
注意:如果沒有在commit後面加上 -m說明修改了什麼, 會自動進入vim介面, 要求我們輸入修改資訊
按鍵盤上的 i 代表開始輸入內容
輸入完畢之後按 esc 然後按 :wq
所以: 如果以後在終端中提交最好在後面加上-m
》注意: git中的add和SVN中的add不太一樣, SVN中只需要add一次, 而git中每次建立或者修改之後都需要重新add
# 將當前檔案夾下的所有建立或修改的檔案一次性添加到程式碼程式庫
$ git add *
》添加之前的顏色
紅色 代表在”工作區“
》添加到暫存區之後的顏色
綠色 代碼在”暫存區“
工作原理:
如果想瞭解git的工作原理,有幾個核心概念必須知道
工作區(Working Directory):倉庫檔案夾裡除.git目錄以外的內容
版本庫(Repository):.git目錄,用於儲存記錄版本資訊
暫存區(stage)
分支(master):git自動建立的第一個分支
HEAD指標:用於指向當前分支
git add和git commit的原理
git add :把檔案修改添加到暫存區
git commit :把暫存區的所有內容提交到當前分支
5. 別名 & 日誌
$ git config alias.st status
$ git config alias.ci "commit -m"
個人建議:除非特殊原因,最好不要設定別名,否則換一台機器就不會用了
# 查看所有版本庫日誌
$ git log
# 查看指定檔案的版本庫日誌
$ git log 檔案名稱
# 配置帶顏色的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中的版本號碼是一個”40位“的雜湊值, 而SVN中的版本號碼是一個遞增的整數
版本號碼,讓我們在任意版本之間穿梭
》已經提交
git reset —hard HEAD^ 返回上一個版本
其中—hard代表強制重設
git reset —hard 版本號碼(只需要寫前7位)
》未提交
git checkout 檔案名稱 回退到上一次提交的版本
git reset —hard HEAD 回退到上一次提交的版, 注意HEAD後面沒有尖號^
>git reflog 查看所有修改資訊(所有版本)
6. 單個檔案的修改管理
》查看檔案被修改的什麼地方
#git diff 檔案名稱
如果顯示綠色代表新增
如果顯示紅色代表刪除
# 撤銷對檔案做的修改
$ git checkout Person.h
二.git的遠程操作(用於團隊開發)
如果是多人團隊開發,最好還是搭建一個遠程倉庫
SVN需要一個單獨的伺服器。
Git不需要: 檔案中、隨身碟中、雲上、github、OSChina...都可以
搭建遠程倉庫的途徑:
自己搭建一個git伺服器:費時費力
在GitHub上託管項目:公開項目免費、私人項目收費,很多第三方開源項目
在oschina上託管項目:完全免費,在國內訪問速度快(推薦使用)
1.建立git遠程倉庫(由於示範,本人將遠程倉庫也建立在本人電腦上面了,實際工作中有很多git遠程倉庫管理的工具,例如GitHub,在那些工具裡面建立倉庫即可)
》git init —bare
注意: 這個倉庫僅僅是用於管理代碼, 不參與開發
2.專案經理初始化項目(由於示範,本人將遠程倉庫也建立在本人電腦上面了)
》2.1先複製一份空的倉庫到本地
git clone /Users/apple/Desktop/working/公司遠程倉庫
# 個人資訊配置(因為要示範一台機器上的多人協作,日常開發可以忽略)
$ git config user.name yoowei
$ git config user.email [email protected]
》2.2忽略不需要加入版本控制器的檔案以及檔案夾
.gitignore
注意: 配置忽略檔案只需要到github上搜尋.gitignore拷貝別人寫好的代碼即可
參考網址:https://github.com/github/gitignore
配置.gitignore一定要和.git在同一級的目錄下
將以下命令一次性粘貼到終端中:
echo -e "# Xcode
#
build/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
# Pods/" > .gitignore
》2.3產生好.gitignore檔案之後, 還需要將.gitignore檔案添加到版本控制
git add .gitignore
git commit .gitignore -m”添加.gitignore ”
》2.4建立項目(利用xcode)
》 source conrol—>commit 將代碼提交到本地倉庫
》 source conrol—>push 將代碼提交到遠程倉庫
git中預設就會建立一個分支, 這個分支叫做origin/master, 相當於svn中的trunk
專業人員只需要在git倉庫的hooks檔案夾中寫一些指令, 就可以完成自動化的測試(壓力測試、自動化的測試、整合測試、煙霧測試 (Smoke Test)、。。。)
》 和SVN一樣, 如果伺服器倉庫的代碼被修改了, 我們再提交代碼也會報錯。
fetch first == out of data
總結:
git和svn最大的區別
》1.git每次修改新增都需要add
》2.git每台電腦都有一個倉庫
》3.git是先提交到本地倉庫, 再提交到遠程倉庫
3.新人伺服器搭建
公司來了新人以後一般會給他搭建一個新人伺服器。
1》.建立一個新人伺服器
2》.初始化倉庫
git init --bare
3》添加一個新的遠程倉庫
source control —> master —>config —>remotes —>add —> add remote
4》.將經理最新的代碼提交到新人伺服器
5》經理分配新人伺服器的地址給新人
4. 分支管理 - Tag
# 查看當前標籤
$ git tag
# 在本地程式碼程式庫給項目打上一個標籤
注意: 此時此刻打上的這個標籤僅僅是一個本地標籤。(和伺服器沒有關係)
$ git tag -a v1.0 -m ‘Version 1.0‘
# 將標籤添推送到遠程程式碼程式庫中
$ git push origin v1.0
# 使用tag,就能夠將項目快速切換到某一個中間狀態,例如產品開發線上的某一個穩定版本
# 簽出v1.0標籤
$ git checkout v1.0
# 從簽出狀態建立v1.0bugfix分支(發現已經提交的1.0版本有bug,那麼我們git checkout v1.0簽出1.0版本,再如下給1.0版本設定一個分支)
$ git checkout -b bugfix1.0
# 查看遠程分支
$ git branch -r
# 刪除遠程分支
$ git branch -r -d origin/bugfix1.0
1.開發
2.發布
3.儲存穩定版本
4.繼續開發
5.原來發布的版本出現bug
6.分配員工到分支上修複bug
>員工從伺服器下載最新代碼
》員工利用git checkout v1.0指令快速切換到1.0版本
》根據提示:開啟一個新的分支開始修複代碼
git checkout -b 1.0bug_fix
7.合并修複後的代碼到主線
8.備份穩定版本
5.通過Xcode將代碼提交到github上, 把倉庫放在github上
》1.註冊一個github帳號
》2.配置SSH Keys, 只要配置了SSH Keys就可以和github無縫銜接
》點擊暱稱來到個人首頁
》 點擊首頁中的設定(setting)
》 點擊SSH Keys
》 點擊 generating SSH keys
》1.檢查本地的ssh keys
在“使用者目錄”下 ls -al ~/.ssh
2.如果檔案夾不存在需要手動建立一個
mkdir .ssh
3.根據github的提示2產生ssh keys
在.ssh目錄下執行 ssh-keygen -t rsa -C "[email protected]”
輸入完成之後連續按下斷行符號, 知道出現牛逼的圖形位置
4.產生完公開金鑰和私密金鑰之後輸入
ls -la查看是否產生成功 id_rsa(私密金鑰) id_rsa.pub(公開金鑰)
5.根據提示3獲得公開金鑰
pbcopy < ~/.ssh/id_rsa.pub
6.點擊 setting —》 ssh key —>add ssh key
將剛才擷取到得公開金鑰添加進去
7.更具github第4步提示, 驗證公開金鑰
驗證成功網頁上的灰色圓點會變成綠色
8.拷貝到公開金鑰之後開啟github首頁
》點擊倉庫(Repositories)
》再點擊new來到github建立倉庫介面
9.通過github提供的地址下載一個空得倉庫到本地
》建立一個新的項目到本地倉庫檔案夾中
》利用Xcode提交代碼到github
》注意: 要求輸入使用者名稱密碼時候, 輸入的是github上顯示的暱稱而不是登入帳號
6. 如何使用/學習第三方架構?
優秀的第三方架構都在 github.com
1> 搜尋
2> git clone 獲得完整版本
$ git clone https://github.com/AFNetworking/AFNetworking.git
3> 擷取最新版本 git pull
* 進入clone的本地檔案夾
$ git pull
4> 看github上的文檔,優秀的第三方架構都有好的文檔
5> 編寫測試程式,看運行結果
6> 針對感興趣的部分,看原始碼
7> 有問題去http://stackoverflow.com
iOS版本控制git小結--yoowei