前言
- 有什麼問題或者建議,可以聯繫通過 [email protected] 聯繫我。
- 如果想了解SVN版本控制的朋友,請移步SVN使用。
更新公告:
- 客官,本文已經進行更新,更新內容如下:
- 優化排版。
- 新增 .gitignore 語法說明及使用,可以自己自定義,爽爽噠。
- 新增 將項目託管到 github 等平臺 命令行 方式
git工作原理
工作區(Working Directory):倉庫文件夾裏除.git目錄以外的內容。
版本庫(Repository):.git目錄,用於存儲記錄版本信息。
暫緩區(stage):也叫暫存區。
分支(master):.git自動創建的第一個分支。
HEAD指針:用於指向當前分支。
git add 和 git commit 原理:
- git add:把文件修改或者新添加文件添加到暫緩區(暫存區)。
- git commit:把暫緩區(暫存區)中的所有內容提交到當前分支。
什麼是分支?
git 可以創建無數個分支,且在創建一個 git倉庫 的同時會自動創建第一個分支。
分支的作用:舉個
栗子
==> 一個已經上架的項目,發現有重要Bug,爲了不影響主分支的開發進度,一般會開個分支出來專門修復 Bug 用,等到Bug修復後,再與主分支進行合併操作,這樣在不影響主分支的開發進度的同時,可以進行 Bug 的修復。
HEAD頭指針運作原理
- HEAD指針 就是爲了在各個分支間進行切換,我們開發哪個分支,它就會指向哪個分支
git初始化和訪問配置(命令行方式)
- 初始化一個本地版本庫
git init
- 設置用戶名和郵箱
git config user.name "用戶名"
git config user.email "[email protected]"
- 設置全局用戶名和郵箱(優先級較高,如果同時設置,優先使用全局)
git config --global user.name "用戶名"
git config --global user.email "[email protected]"
git 倉庫項目初始化操作
在 git工作區(同級目錄和同級目錄的子目錄)中創建一個文件
main.m
touch main.m
- 查看文件狀態(查看文件是否被管理)
git status
譯註:
- 如果文件的顏色爲紅色,說明該文件並沒有被添加到git的暫緩區中
- 如果文件顏色爲綠色,說明該文件已經被添加到git的暫緩區中
- 添加文件到暫緩區中,查看文件狀態
git add main.m
git status
- 提交到本地版本庫中
git commit -m "創建了main.m文件" main.m
譯註:
- 可以 直接 在後面跟上文件,表示把該文件提交到本地版本庫(不推薦)
- 不跟任何文件名稱,表示把當前所有暫緩區中的內容都提交到 本地版本庫 中
- 修改文件,重新提交更改到本地版本庫(git中如果修改了文件,需要重新將文件添加到暫緩區中才能提交)
git add main.m
git commit -m "修改了main文件" main.m
注意: git 中和 svn 不一樣的地方在於 —— 不管是創建文件還是修改文件都需要添加到暫緩區中然後再提交。
git 好用的功能 —— 別名
git 流行起來還有個原因,就是它貼心的功能 —— 別名,它支持我們對某些命令進行 別名 設置,讓使用者使用起來更加順手,更加效率,這邊我們通過下面的例子來看看怎麼給 git 起別名:
我們來給status起別名 st
基本方式:(只能在當前文件夾內的git工作區內使用)
git config alias.st "status"
- 這樣以後要查詢文件狀態就可以直接使用
git st
- 高級方式:(只能在當前文件夾內的git工作區內使用)
// git commit -m "註釋"
git config alias.ci "git commit -m"
- 這樣以後要提交文件就可以直接使用
git ci "註釋"
你以爲只能是 局部的別名?錯!它還支持 全局的別名,是不是感動到淚奔,怎麼可以這麼貼心,趕緊來看一下示例:
全局別名:(設置一次,電腦中所有的地方都可以使用)
git config --global alias.st "status"
譯註:全局別名和局部別名的使用區別就在於有沒有跟上 –global,所以其他方式就不再贅述!
git刪除文件
作爲一款主流的 版本控制器,怎麼可以少了刪除功能,馬上來看下面示例:
先創建一個新的文件:
touch test.m
- 將文件提交到暫緩區中:
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加密得到的密文。
版本回退操作
開發中,經常會發生我們或者其他開發人員因修改不當造成 軟件運行不正常等情況,這時候就需要用到版本回退功能,將代碼退回到之前正常運行的版本,再繼續進行開發,根據情況不同,git 提供了下面 2 種方式:
修改了本地版本庫文件,但還未提交
git reset --hard HEAD
- 修改了本地版本庫文件,且已經提交(這種情況只能回退到正常版本了),git 提供 3 種方式:
- 方式一(推薦,但如果需要回退多個版本時不推薦):
// 一個“^”號表示一個版本,下面表示退回到上個版本
// 上上個版本:^^,以此類推
git reset --hard HEAD^
- 方式二(不推薦,連續回退多個版本):
// ~號後面表示回退幾個版本(如10就是回退10個版本)
git reset --hard HEAD~1 ```
- 方式三(推薦,回退到指定版本):
```git
// 查看版本信息,看需要回退到哪個版本
git reflog
// 指定回退的版本號
// 複製需要的版本號,然後跟上版本號即可
git reset --hard 版本號(5位)
<div class="se-preview-section-delimiter"></div>
創建共享版本庫並初始化項目
創建共享版本庫方式:
自己搭建服務器,自己在服務器上配置(複雜)。
在U旁上創建共享版本庫。
把共享版本庫創建到文件夾中。
託管到github、oschina網站:
初始化一個空的git共享版本庫(和本地版本庫不同的是,共享版本庫不會生成.git文件夾)
git init --bare
<div class="se-preview-section-delimiter"></div>
- 管理者連接倉庫並下載倉庫到本地
git clone 共享版本庫路徑
<div class="se-preview-section-delimiter"></div>
初始化項目
在初始化項目前,我們需要先忽略一些不必要的文件
創建一個忽略文件.gitignore
cd git工程路徑
touch .gitignore
<div class="se-preview-section-delimiter"></div>
到github上搜索gitignore並拷貝Objective-OC文件中的內容到我自己創建的忽略文件內保存(文件中裏面包含了我們需要忽略的文件配置),
也可以自己自定義,語法在下面會提到!
添加並提交忽略文件到本地版本庫
git add .gitignore
git commit -m "新建.gitignore忽略文件" .gitignore
<div class="se-preview-section-delimiter"></div>
創建我們的Xcode工程
項目保存路徑選擇我們本地的版本庫(這是下面的 git選項就會變灰不可點擊,這是正常的,因爲我們當前的目錄下就有了 git 倉庫)
提交到本地版本庫:創建完成後點擊XCode上面的Source Control –> Commit –> 添加註釋 –> 提交
提交到遠程版本庫(共享版本庫):Source Control –> Push –> 選擇遠程版本庫 –> Push
譯註:
- 怎麼查看使用的版本庫是共享版本庫還是本地版本庫,我們可以打開git 中的config配置文件查看裏面的“bare”字段,如果顯示爲true表示爲共享版本庫。
.gitignore 語法
上面提到了 .gitignore 文件,那它到底是什麼東西呢?—— .gitignore 是 git 中常見想配置文件,它裏面包含了一些文件規則(如:忽略哪些文件等等)這邊就來說說其語法:
這邊先介紹下怎麼配置 .gitignore
/
:表示目錄*
:爲通配多個字符?
:通配單個字符[]
:包含單個字符的匹配列表!
:表示不忽略匹配到的文件和目錄
// 示例
// 忽略ios文件夾下的所有內容
/ios/*
// 忽略所有文件,除ios文件夾和.gitignore文件
/*
!.gitignore
!/ios/
<div class="se-preview-section-delimiter"></div>
- 知道了 gitignore 語法,我們就可以輕鬆控制文件的提交方式,感興趣的可以試一下。
XCode 使用 git(添加第三方框架)
開發中我們或多或少會使用到第三方框架,通常框架會使用
cocoapods
進管理,但偶爾會有公司與公司之間內部使用的框架,而我們將框架拖入工程的時候會發現git無法識別的情況,這個原因是因爲我們拖入的是整個文件夾,如果我們直接拖入的文件不是包含在文件夾下,那麼就可以識別。git中內部第三方框架(靜態庫)的處理方式:
方式一:直接創建和框架相對應的文件夾,然後將框架文件夾內的文件拖入到工程中
方式二:直接右擊需要添加的文件 –> source control –> add
方式三:點擊需要添加文件所屬的文件夾 –> Source Control –> Add “xxxx”
方式四(命令行):
cd 文件所在路徑
git add .
<div class="se-preview-section-delimiter"></div>
Xcode 回退操作
- 在 XCode 中,如果還沒提交到遠程版本庫中,我們要進行回退操作很簡單:Source Control –> Discard All Changes(取消所有的更改)就可以了 。
Xcode 多人開發衝突解決
在多人開發中,很容易出現版本之間的衝突問題,一般我們都是先提交代碼到本地倉庫,然後一段時間提交一次到遠程版本庫中,這段時間可能別的開發者已經提交過文件,並且修改了和你同一文件的同一行,那麼此時要提交就會報錯。
處理方式:
- Source Control –> Pull –> 修改衝突的代碼 —-> 確定
- Source Control –> push –> 提交
創建新成員的共享版本庫
有時候開發過程中會出現新的團隊成員,而考慮到新成員和老成員使用git方式不一樣或者不熟悉,爲了保證代碼的安全性,會新建一個專門給新成員的共享版本庫,以供觀察!
創建新成員共享版本庫(步驟):
在遠程共享版本庫中新建一個新成員文件夾
打開遠程共享版本庫
cd 遠程共享版本庫中新成員文件夾的路徑
<div class="se-preview-section-delimiter"></div>
- 初始化新的共享版本庫
git init --bare
<div class="se-preview-section-delimiter"></div>
爲確保拷貝到新成員共享版本庫中的工程爲最新版,操作之前先pull一次工程
Source Control –> 鼠標移至工程分支選項 –> 選擇彈出菜單中的Configure … –> 在彈出窗口中選擇 –> Remotes(遠程) –> 點擊左下角”+” –> Add Remote… –> name:分支標記 Address:需要添加的倉庫地址 –> Done –> Source Control –> Push –> 選擇新成員分支 –> push
到此,新成員拿到倉庫地址,進行下面步驟:
打開本地倉庫
cd 本地倉庫路徑
<div class="se-preview-section-delimiter"></div>
- 下載遠程倉庫中的工程
git clone 遠程倉庫路徑
<div class="se-preview-section-delimiter"></div>
如果要檢查新成員的工作成果,那麼也需要下載新人共享版本庫的工程:
先在本地創建一個存儲目錄
然後打開該目錄
cd 本地存儲目錄路徑
<div class="se-preview-section-delimiter"></div>
- 下載工程
git clone 新人共享版本庫的路徑
Xcode 查看提交日誌
- Source Control –> History…
- 在日誌中可以點擊對應日誌中右邊的 show 查看修改的情況
將工程託管到 github 或 osChina 平臺
github篇:
使用github有個比較不好的地方 – 要想免費必須開源,如果不開源只能付費使用
肯定要有賬號(步驟就不演示了)
創建遠程git版本庫
點擊右上角 “+” 號 –> New repository
repository name(一般爲項目名稱) –> Description(項目描述) –> 開源選擇“Public”(免費)不開源選擇”Private”(收費,7美元/1個月) –> 選擇是否生成README說明文檔 –> 忽略文件選擇(選擇Objective-OC)–> 選擇協議(一般選擇 Apache License 2.0協議)–> 創建
連接遠程版本庫配置
打開XCode –> XCode –> Preferences –> Accounts –> 左下角 “+” –> Add Repository… –> Address:遠程版本庫的HTTPS地址 Type:管理工具類型 Authentication:認證方式 User Name:用戶名 Password:密碼 –> Add
連接遠程版本庫:
Source Control –> Chack Out –> 在彈出的窗口中找到我們需要的版本庫並選擇 –> Next –> 在彈出窗口中選擇需要存儲的位置 。
創建工程:將項目添加到版本庫的目錄下 –> Source Control –> Commit –> 提交。
將本地版本庫的工程提交到遠程版本庫:Source Control –> Push –> 提交。
oschina篇:這邊就不寫了,因爲oschina可以看成是github的中文版,排版和操作都差不多,但是他比較好的一點就是全免費,而且服務器在國內,速度比較穩定且快,所以推薦使用。
github 刪除代碼倉庫
- 登錄github –> 找到倉庫 –> Settings –> 最下面有個Delete this repository – 輸入需要刪除的倉庫名 – 提交。
將項目託管到 github 等平臺 命令行 方式
這邊我們在來說說命令行的方式將項目託管到 github 平臺。
首先,電腦需要有 git 客戶端,否則會提示找不到命令等提示,(mac自帶)
其實方式有很多,這邊我比較習慣下面的步驟做:
在 github 上創建倉庫
複製 倉庫 網址
打開終端,輸入:
git clone 遠程倉庫網址
將下載下來的項目文件夾中所有的文件以及文件夾拷貝到需要託管的項目根目錄
進入 需要託管的項目根目錄,添加所有文件爲管理
cd 項目根目錄地址 git add .
- 提交到本地倉庫
git commit -m "註釋"
- 提交到遠程倉庫
git push -u origin master
輸入 github 賬號和密碼,等待提交完成即可。
要確定是否成功提交,登陸github查看下就知道了!
譯註:
感謝許多朋友給出的意見和建議,有什麼不好的地方,希望各位還是能夠提出來。
到這裏本篇內容更新完畢,很感謝大家對我的支持!