您好,登錄后才能下訂單哦!
理解Git的設計思想和基本的工作原理,對更好的使用Git至關重要。
直接記錄快照,而非比較差異。和其他版本控制系統不同的是,Git存儲數據時將數據看成小型的文件系統的一組快照,每次在修改文件提交更新后,它主要對當時的所有文件制作一個快照并保存到快照索引中。Git還對這一個保存過程進行了優化,也就是說當文件沒有本修改時,Git不會重新存儲文件而是只保留一個鏈接指向之前存儲的文件。這是Git與其他版本控制系統的重要區別。
近乎所有的操作都是在本地執行。Git的大多數操作都是在本地完成,當我們在沒有網絡或者沒有×××的情況下,同樣可以使用Git進行辦公。因為在本地磁盤上有項目的完整歷史,可以在任何時候瀏覽項目的歷史。
保證數據的完整性。Git為了保證數據的完整性在存儲前都會計算校驗和,通過校驗和來引用。校驗和機制叫做SHA-1散列,也叫哈希散列。Git通過對校驗和的檢查可以保證數據的完整性。
校驗和是40個十六進制組成的字符串。例如
24b9da6552252987aa493b52f8696cd6d3b00373
在Git中,所以文件都是通過校驗和進行查找的,而不是文件名。
為了更好的理解Git,需要理解其設計原理。在Git中,文件有三種狀態: 已提交(committed),已修改(modified)和已暫存(staged)。
對應文件的三種狀態,還引入了三個工作區域的概念: Git倉庫,工作目錄和暫存區域。
工作流程:
工作區域和文件狀態關系,如下圖:
首先在桌面創建一個文件夾
$ cd Desktop & mkdir GitDemo & cd GitDemo
初始化Git倉庫
git init
查看Git倉庫狀態
git status
// 輸出:
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
提示沒有可以提交的內容,因為現在工作區什么都沒有,下面添加A.md文件。
// 創建A.md文件
touch A.md
// 查看Git狀態
git status
// 輸出:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
A.md
nothing added to commit but untracked files present (use "git add" to track)
此時工作目錄中新添加了一個文件,也就是說A.md文件被修改。在查看倉庫狀態會發現Untracked files A.md
, 文件是未跟蹤狀態。可以使用git add <file>
命令提交跟蹤。
git add A.md
git status
// 輸出:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: A.md
輸出結果新的文件A.md
,通過git add <file>
命令,此時的A文件已經被提交到暫存區,文件的狀態是已暫存狀態。git rm --cached <file>...
可以將暫存的文件從暫存區移除。
git commit -m 'add A.md'
// 輸出;
[master (root-commit) af93fed] add A.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 A.md
輸出結果顯示了一些提交的基本信息,master分支,當前校驗和[af93fed]以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。通過此命令將文件提交到倉庫中,此時文件的狀態是已提交狀態。
前面的提到,Git的大部分操作都是在本地完成的,但是為了多人協作就需要進行遠程倉庫管理。一些基本操作:
// 查看遠程倉庫服務器
git remote -v
// 添加遠程倉庫
git remote add <name> <url>
// 拉取倉庫信息
git fetch <name>
// 推送到遠程倉庫
git push origin master
// 查看遠程倉庫
git remote show origin
// 遠程倉庫的移除和重命名
git remote rename <oldName> <newName>
git remote rm <name>
標簽操作
// 查看所有標簽
git tag
// 添加標簽
git tag -a 0.1.1 -m 'message'
// 顯示標簽信息
git show 0.1.1
// 提價標簽到遠程(--tags所有標簽)
git push origin --tags
以上,只是Git的基本原理,其他內容請看官方文檔。Git
作為iOS開發者,想必對Cocoapods都不會陌生,那么有沒有思考過這些問題?它的是如何查找庫,如何集成庫的,它的工作原理是什么。那么接下來我們學習一下Cocoapods的工作原理。
理解其工作原理需要知道幾個概念:代碼庫,索引庫,本地索引庫,podspec。
pod repo
查看索引庫信息。工作流程:
Pod install
時,默認情況下,會去更新本地索引庫,可以在后面添加--no-repo-update
忽略更新。Podfile
文件內容查找索引表,找到庫所對應的的Podspec
文件,獲取庫的真是地址。關于
Podfile
設置請看The Podfile。
Podspec
后面在做講解,也可以查看Podspec Syntax Reference
理解了Git
和Cocoapods
的工作原理,我們需要學以致用。本節我們學習創建私有索引庫,可以說這是組件化的基礎。
前面提到通過命令pod repo
可以查看本地的索引庫。
master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/lqq/.cocoapods/repos/master
上面的URL
地址就是公共索引庫的地址,瀏覽器打開其實就是一個倉庫。里面存放著所有支持cocoapods
的庫的索引文件podspec
。因為該庫是公共的,任何人都可訪問,所以為了使我們私有的庫也支持cocoapods
就需要創建私有的索引庫。
下面我們看如何創建私有索引庫,其實很簡單。你可以選用一些代碼托管平臺,例如:碼云, Coding。這里以碼云為例。
在碼云中創建一個私有索引庫,命名為LQQSpecs
。
OK私有庫就創建好了。接下來將私有索引庫添加到本地。通過命令pod repo add <Name> <URL>
pod repo add LQQSpecs <URL>
添加完成后運行pod repo
就可以看到私有索引庫了。
至此,私有索引庫創建完成。
Cocoapods
提供了創建代碼庫的命令。
pod lib create <Name> // 創建倉庫
// 拉取模板庫
// 1. 設置:編程語言 OC 、Swift
// 2. 是否生成Demo?
// 3. 是否生成單元測試
// 4. 是否生成UI測試
// 5. 文件前綴
文件目錄結構如下。
├── Example
│?? ├── LQQSegmentBar
│?? ├── LQQSegmentBar.xcodeproj
│?? ├── LQQSegmentBar.xcworkspace
│?? ├── Podfile
│?? ├── Podfile.lock
│?? ├── Pods
│?? └── Tests
├── LICENSE
├── LQQSegmentBar
│?? ├── Assets
│?? └── Classes
├── LQQSegmentBar.podspec
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
這里需要注意是,當封裝庫更新時,
Example
需要使用pod install
更新,才能正常使用修改過的庫。
下面我們來看一下Podspec
文件。 由于上面使用pod
提供的模板庫創建的項目,所以默認生成了該文件。如果為現有的庫添加該文件,需要使用命令
pod spec create <name> //創建Podspec
Podspec文件創建成功。那么文件里有什么內容,如何設置。由于涉及到的參數較多,所以這里只找幾個關鍵的。其他請看Podspec Syntax Reference
下面以AFNworking
的Podspec
文件為例。
Pod::Spec.new do |s|
s.name = 'AFNetworking' // 名稱
s.version = '3.2.0' // 版本
s.license = 'MIT' // License
s.summary = 'A delightful iOS and OS X networking framework.' // 簡介
s.homepage = 'https://github.com/AFNetworking/AFNetworking' // 項目主頁
s.authors = { 'Mattt Thompson' => 'm@mattt.me' } // 作者
s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } // 倉庫地址
s.public_header_files = 'AFNetworking/AFNetworking.h' // 頭文件
s.source_files = 'AFNetworking/AFNetworking.h' // 源文件
#......
end
上面只是涉及最基礎的設置,其他的請查看官方文檔。
封裝好代碼并且修改好Podspec
文件,我們可以將項目上傳到私有倉庫了。
上傳完成后需要為項目打標簽,這個標簽與Podspec
文件中的版本號對應。
接下來將Podspec
上傳到私有索引庫就可以,在上傳之前最好驗證Podspec
文件是否有錯誤。
pod lib lint // 本地驗證
pod spec lint // 遠程驗證
上傳到私有索引庫pod repo push <索引庫名> <Podspec文件>
pod repo push LQQSpecs xxx.podspec
OK!至此,私有索引庫,私有倉庫,添加到私有索引庫都完成了。
檢驗成果的時候到了。
pod search 'xxx'
// [!] Unable to find a pod with name, author, summary, or description matching `xxx`
WTF! 這是什么情況呢, 不要著急,并不是上述沒有成功,是因為電腦有緩存。
資料庫->Caches->Cocoapods
那么,如何將個人開源庫發送到共有索引庫,想必也回來。唯一的區別是Podspec
上傳的位置不同。
本文學習了Git和Cocoapods工作原理。以及通過Cocoapods創建私有庫,并集成Cocoapods
功能。
本文作者: Owenli
本文鏈接: https://jesusLove.github.io/2018/01/03/Git&Cocoapods/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。