前言
- 有什么問題或者建議遏弱,可以聯(lián)系通過 277511806@qq.com 聯(lián)系我蜒灰。
- 如果想了解SVN版本控制的朋友弦蹂,請移步SVN使用。
更新公告:
- 客官强窖,本文已經進行更新凸椿,更新內容如下:
- 優(yōu)化排版。
- 新增 .gitignore 語法說明及使用毕骡,可以自己自定義削饵,爽爽噠。
- 新增 將項目托管到 github 等平臺 命令行 方式
git工作原理
工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內容未巫。
版本庫(Repository):.git目錄窿撬,用于存儲記錄版本信息。
暫緩區(qū)(stage):也叫暫存區(qū)叙凡。
分支(master):.git自動創(chuàng)建的第一個分支劈伴。
HEAD指針:用于指向當前分支。
git add 和 git commit 原理:
git add:把文件修改或者新添加文件添加到暫緩區(qū)(暫存區(qū))握爷。
git commit:把暫緩區(qū)(暫存區(qū))中的所有內容提交到當前分支跛璧。
什么是分支?
git 可以創(chuàng)建無數(shù)個分支新啼,且在創(chuàng)建一個 git倉庫 的同時會自動創(chuàng)建第一個分支追城。
分支的作用:舉個
栗子
==> 一個已經上架的項目,發(fā)現(xiàn)有重要Bug燥撞,為了不影響主分支的開發(fā)進度座柱,一般會開個分支出來專門修復 Bug 用,等到Bug修復后物舒,再與主分支進行合并操作色洞,這樣在不影響主分支的開發(fā)進度的同時,可以進行 Bug 的修復冠胯。
HEAD頭指針運作原理
- HEAD指針 就是為了在各個分支間進行切換火诸,我們開發(fā)哪個分支,它就會指向哪個分支
git初始化和訪問配置(命令行方式)
- 初始化一個本地版本庫
git init
- 設置用戶名和郵箱
git config user.name "用戶名"
git config user.email "xxxxxx@qq.com"
- 設置全局用戶名和郵箱(優(yōu)先級較高荠察,如果同時設置园细,優(yōu)先使用全局)
git config --global user.name "用戶名"
git config --global user.email "xxxxxx@qq.com"
git 倉庫項目初始化操作
在 git工作區(qū)(同級目錄和同級目錄的子目錄)中創(chuàng)建一個文件
main.m
touch main.m
- 查看文件狀態(tài)(查看文件是否被管理)
git status
譯注:
- 如果文件的顏色為紅色割以,說明該文件并沒有被添加到git的暫緩區(qū)中
- 如果文件顏色為綠色拼坎,說明該文件已經被添加到git的暫緩區(qū)中
- 添加文件到暫緩區(qū)中怎静,查看文件狀態(tài)
git add main.m
git status
- 提交到本地版本庫中
git commit -m "創(chuàng)建了main.m文件" main.m
譯注:
- 可以 直接 在后面跟上文件,表示把該文件提交到本地版本庫(不推薦)
- 不跟任何文件名稱舀瓢,表示把當前所有暫緩區(qū)中的內容都提交到 本地版本庫 中
- 修改文件廷雅,重新提交更改到本地版本庫(git中如果修改了文件,需要重新將文件添加到暫緩區(qū)中才能提交)
git add main.m
git commit -m "修改了main文件" main.m
注意: git 中和 svn 不一樣的地方在于 —— 不管是創(chuàng)建文件還是修改文件都需要添加到暫緩區(qū)中然后再提交。
git 好用的功能 —— 別名
git 流行起來還有個原因航缀,就是它貼心的功能 —— 別名商架,它支持我們對某些命令進行 別名 設置,讓使用者使用起來更加順手芥玉,更加效率蛇摸,這邊我們通過下面的例子來看看怎么給 git 起別名:
我們來給status起別名 st
基本方式:(只能在當前文件夾內的git工作區(qū)內使用)
git config alias.st "status"
- 這樣以后要查詢文件狀態(tài)就可以直接使用
git st
- 高級方式:(只能在當前文件夾內的git工作區(qū)內使用)
// git commit -m "注釋"
git config alias.ci "git commit -m"
- 這樣以后要提交文件就可以直接使用
git ci "注釋"
你以為只能是 局部的別名?錯灿巧!它還支持 全局的別名赶袄,是不是感動到淚奔,怎么可以這么貼心抠藕,趕緊來看一下示例:
全局別名:(設置一次饿肺,電腦中所有的地方都可以使用)
git config --global alias.st "status"
譯注:全局別名和局部別名的使用區(qū)別就在于有沒有跟上 --global,所以其他方式就不再贅述盾似!
git刪除文件
作為一款主流的 版本控制器敬辣,怎么可以少了刪除功能,馬上來看下面示例:
先創(chuàng)建一個新的文件:
touch test.m
- 將文件提交到暫緩區(qū)中:
git add test.m
- 提交刪除操作到本地版本庫:
git commit -m "刪除了test.m"文件
- 刪除test.m文件
git rm test.m
查看 git 版本信息
版本信息也是重要的一部分零院,一定要會溉跃,知道么!告訴我告抄,你知道撰茎。
首先肯定要進到我們需要查看的 git 工程目錄下,接著 git 給我們提供了下面2種方式查看版本信息:
基礎方式:
git log
- 高級方式:(可查看版本回退操作)
git reflog
- 因為 git 是分布式版本控制打洼,有 多個git本地版本庫乾吻,為了使版本號之間不互相沖突,所以 git版本號是通過SHA1加密得到的密文拟蜻。
版本回退操作
開發(fā)中,經常會發(fā)生我們或者其他開發(fā)人員因修改不當造成 軟件運行不正常等情況枯饿,這時候就需要用到版本回退功能酝锅,將代碼退回到之前正常運行的版本,再繼續(xù)進行開發(fā)奢方,根據(jù)情況不同搔扁,git 提供了下面 2 種方式:
修改了本地版本庫文件,但還未提交
git reset --hard HEAD
- 修改了本地版本庫文件蟋字,且已經提交(這種情況只能回退到正常版本了)稿蹲,git 提供 3 種方式:
- 方式一(推薦,但如果需要回退多個版本時不推薦):
// 一個“^”號表示一個版本鹊奖,下面表示退回到上個版本
// 上上個版本:^^,以此類推
git reset --hard HEAD^
- 方式二(不推薦苛聘,連續(xù)回退多個版本):
// ~號后面表示回退幾個版本(如10就是回退10個版本)
git reset --hard HEAD~1 ```
- 方式三(推薦,回退到指定版本):
```git
// 查看版本信息,看需要回退到哪個版本
git reflog
// 指定回退的版本號
// 復制需要的版本號设哗,然后跟上版本號即可
git reset --hard 版本號(5位)
創(chuàng)建共享版本庫并初始化項目
創(chuàng)建共享版本庫方式:
自己搭建服務器唱捣,自己在服務器上配置(復雜)。
在U旁上創(chuàng)建共享版本庫网梢。
把共享版本庫創(chuàng)建到文件夾中震缭。
托管到github、oschina網(wǎng)站:
初始化一個空的git共享版本庫(和本地版本庫不同的是战虏,共享版本庫不會生成.git文件夾)
git init --bare
- 管理者連接倉庫并下載倉庫到本地
git clone 共享版本庫路徑
初始化項目
在初始化項目前拣宰,我們需要先忽略一些不必要的文件
創(chuàng)建一個忽略文件.gitignore
cd git工程路徑
touch .gitignore
到github上搜索gitignore并拷貝Objective-OC文件中的內容到我自己創(chuàng)建的忽略文件內保存(文件中里面包含了我們需要忽略的文件配置),
也可以自己自定義烦感,語法在下面會提到巡社!
添加并提交忽略文件到本地版本庫
git add .gitignore
git commit -m "新建.gitignore忽略文件" .gitignore
創(chuàng)建我們的Xcode工程
項目保存路徑選擇我們本地的版本庫(這是下面的 git選項就會變灰不可點擊,這是正常的啸盏,因為我們當前的目錄下就有了 git 倉庫)
提交到本地版本庫:創(chuàng)建完成后點擊XCode上面的Source Control --> Commit --> 添加注釋 --> 提交
提交到遠程版本庫(共享版本庫):Source Control --> Push --> 選擇遠程版本庫 --> Push
譯注:
- 怎么查看使用的版本庫是共享版本庫還是本地版本庫重贺,我們可以打開git 中的config配置文件查看里面的“bare”字段,如果顯示為true表示為共享版本庫回懦。
.gitignore 語法
上面提到了 .gitignore 文件气笙,那它到底是什么東西呢?—— .gitignore 是 git 中常見想配置文件怯晕,它里面包含了一些文件規(guī)則(如:忽略哪些文件等等)這邊就來說說其語法:
這邊先介紹下怎么配置 .gitignore
/
:表示目錄*
:為通配多個字符?
:通配單個字符[]
:包含單個字符的匹配列表!
:表示不忽略匹配到的文件和目錄
// 示例
// 忽略ios文件夾下的所有內容
/ios/*
// 忽略所有文件潜圃,除ios文件夾和.gitignore文件
/*
!.gitignore
!/ios/
- 知道了 gitignore 語法,我們就可以輕松控制文件的提交方式舟茶,感興趣的可以試一下谭期。
XCode 使用 git(添加第三方框架)
開發(fā)中我們或多或少會使用到第三方框架,通嘲闪梗框架會使用
cocoapods
進管理隧出,但偶爾會有公司與公司之間內部使用的框架,而我們將框架拖入工程的時候會發(fā)現(xiàn)git無法識別的情況阀捅,這個原因是因為我們拖入的是整個文件夾胀瞪,如果我們直接拖入的文件不是包含在文件夾下,那么就可以識別饲鄙。git中內部第三方框架(靜態(tài)庫)的處理方式:
方式一:直接創(chuàng)建和框架相對應的文件夾凄诞,然后將框架文件夾內的文件拖入到工程中
方式二:直接右擊需要添加的文件 --> source control --> add
方式三:點擊需要添加文件所屬的文件夾 --> Source Control --> Add "xxxx"
方式四(命令行):
cd 文件所在路徑
git add .
Xcode 回退操作
- 在 XCode 中,如果還沒提交到遠程版本庫中忍级,我們要進行回退操作很簡單:Source Control --> Discard All Changes(取消所有的更改)就可以了 帆谍。
Xcode 多人開發(fā)沖突解決
在多人開發(fā)中,很容易出現(xiàn)版本之間的沖突問題轴咱,一般我們都是先提交代碼到本地倉庫汛蝙,然后一段時間提交一次到遠程版本庫中烈涮,這段時間可能別的開發(fā)者已經提交過文件,并且修改了和你同一文件的同一行患雇,那么此時要提交就會報錯跃脊。
處理方式:
Source Control --> Pull --> 修改沖突的代碼 —-> 確定
Source Control --> push --> 提交
創(chuàng)建新成員的共享版本庫
有時候開發(fā)過程中會出現(xiàn)新的團隊成員,而考慮到新成員和老成員使用git方式不一樣或者不熟悉苛吱,為了保證代碼的安全性酪术,會新建一個專門給新成員的共享版本庫,以供觀察翠储!
創(chuàng)建新成員共享版本庫(步驟):
在遠程共享版本庫中新建一個新成員文件夾
打開遠程共享版本庫
cd 遠程共享版本庫中新成員文件夾的路徑
- 初始化新的共享版本庫
git init --bare
為確被嫜悖拷貝到新成員共享版本庫中的工程為最新版,操作之前先pull一次工程
Source Control --> 鼠標移至工程分支選項 --> 選擇彈出菜單中的Configure ... --> 在彈出窗口中選擇 --> Remotes(遠程) --> 點擊左下角"+" --> Add Remote... --> name:分支標記 Address:需要添加的倉庫地址 --> Done --> Source Control --> Push --> 選擇新成員分支 --> push
到此援所,新成員拿到倉庫地址,進行下面步驟:
打開本地倉庫
cd 本地倉庫路徑
- 下載遠程倉庫中的工程
git clone 遠程倉庫路徑
如果要檢查新成員的工作成果庐舟,那么也需要下載新人共享版本庫的工程:
先在本地創(chuàng)建一個存儲目錄
然后打開該目錄
cd 本地存儲目錄路徑
- 下載工程
git clone 新人共享版本庫的路徑
Xcode 查看提交日志
- Source Control --> History...
- 在日志中可以點擊對應日志中右邊的 show 查看修改的情況
將工程托管到 github 或 osChina 平臺
github篇:
使用github有個比較不好的地方 -- 要想免費必須開源,如果不開源只能付費使用
肯定要有賬號(步驟就不演示了)
創(chuàng)建遠程git版本庫
點擊右上角 “+” 號 --> New repository
repository name(一般為項目名稱) --> Description(項目描述) --> 開源選擇“Public”(免費)不開源選擇"Private"(收費住拭,7美元/1個月) --> 選擇是否生成README說明文檔 --> 忽略文件選擇(選擇Objective-OC)--> 選擇協(xié)議(一般選擇 Apache License 2.0協(xié)議)--> 創(chuàng)建
連接遠程版本庫配置
打開XCode --> XCode --> Preferences --> Accounts --> 左下角 “+” --> Add Repository... --> Address:遠程版本庫的HTTPS地址 Type:管理工具類型 Authentication:認證方式 User Name:用戶名 Password:密碼 --> Add
連接遠程版本庫:
Source Control --> Chack Out --> 在彈出的窗口中找到我們需要的版本庫并選擇 --> Next --> 在彈出窗口中選擇需要存儲的位置 挪略。
創(chuàng)建工程:將項目添加到版本庫的目錄下 --> Source Control --> Commit --> 提交。
將本地版本庫的工程提交到遠程版本庫:Source Control --> Push --> 提交滔岳。
oschina篇:這邊就不寫了杠娱,因為oschina可以看成是github的中文版,排版和操作都差不多谱煤,但是他比較好的一點就是全免費摊求,而且服務器在國內,速度比較穩(wěn)定且快刘离,所以推薦使用室叉。
github 刪除代碼倉庫
- 登錄github --> 找到倉庫 --> Settings --> 最下面有個Delete this repository -- 輸入需要刪除的倉庫名 -- 提交。
將項目托管到 github 等平臺 命令行 方式
-
這邊我們在來說說命令行的方式將項目托管到 github 平臺硫惕。
首先茧痕,電腦需要有 git 客戶端,否則會提示找不到命令等提示恼除,(mac自帶)
-
其實方式有很多踪旷,這邊我比較習慣下面的步驟做:
在 github 上創(chuàng)建倉庫
復制 倉庫 網(wǎng)址
打開終端,輸入:
git clone 遠程倉庫網(wǎng)址
將下載下來的項目文件夾中所有的文件以及文件夾拷貝到需要托管的項目根目錄
進入 需要托管的項目根目錄缚柳,添加所有文件為管理
cd 項目根目錄地址 git add .
- 提交到本地倉庫
git commit -m "注釋"
- 提交到遠程倉庫
git push -u origin master
輸入 github 賬號和密碼,等待提交完成即可搪锣。
要確定是否成功提交秋忙,登陸github查看下就知道了!
譯注:
感謝許多朋友給出的意見和建議构舟,有什么不好的地方灰追,希望各位還是能夠提出來。
到這里本篇內容更新完畢,很感謝大家對我的支持弹澎!