桑植ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
理解Git的設(shè)計(jì)思想和基本的工作原理,對(duì)更好的使用Git至關(guān)重要。
直接記錄快照,而非比較差異。和其他版本控制系統(tǒng)不同的是,Git存儲(chǔ)數(shù)據(jù)時(shí)將數(shù)據(jù)看成小型的文件系統(tǒng)的一組快照,每次在修改文件提交更新后,它主要對(duì)當(dāng)時(shí)的所有文件制作一個(gè)快照并保存到快照索引中。Git還對(duì)這一個(gè)保存過(guò)程進(jìn)行了優(yōu)化,也就是說(shuō)當(dāng)文件沒(méi)有本修改時(shí),Git不會(huì)重新存儲(chǔ)文件而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件。這是Git與其他版本控制系統(tǒng)的重要區(qū)別。
近乎所有的操作都是在本地執(zhí)行。Git的大多數(shù)操作都是在本地完成,當(dāng)我們?cè)跊](méi)有網(wǎng)絡(luò)或者沒(méi)有×××的情況下,同樣可以使用Git進(jìn)行辦公。因?yàn)樵诒镜卮疟P(pán)上有項(xiàng)目的完整歷史,可以在任何時(shí)候?yàn)g覽項(xiàng)目的歷史。
保證數(shù)據(jù)的完整性。Git為了保證數(shù)據(jù)的完整性在存儲(chǔ)前都會(huì)計(jì)算校驗(yàn)和,通過(guò)校驗(yàn)和來(lái)引用。校驗(yàn)和機(jī)制叫做SHA-1散列,也叫哈希散列。Git通過(guò)對(duì)校驗(yàn)和的檢查可以保證數(shù)據(jù)的完整性。
校驗(yàn)和是40個(gè)十六進(jìn)制組成的字符串。例如
24b9da6552252987aa493b52f8696cd6d3b00373
在Git中,所以文件都是通過(guò)校驗(yàn)和進(jìn)行查找的,而不是文件名。
為了更好的理解Git,需要理解其設(shè)計(jì)原理。在Git中,文件有三種狀態(tài): 已提交(committed),已修改(modified)和已暫存(staged)。
對(duì)應(yīng)文件的三種狀態(tài),還引入了三個(gè)工作區(qū)域的概念: Git倉(cāng)庫(kù),工作目錄和暫存區(qū)域。
工作流程:
工作區(qū)域和文件狀態(tài)關(guān)系,如下圖:
首先在桌面創(chuàng)建一個(gè)文件夾
$ cd Desktop & mkdir GitDemo & cd GitDemo
初始化Git倉(cāng)庫(kù)
git init
查看Git倉(cāng)庫(kù)狀態(tài)
git status
// 輸出:
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
提示沒(méi)有可以提交的內(nèi)容,因?yàn)楝F(xiàn)在工作區(qū)什么都沒(méi)有,下面添加A.md文件。
// 創(chuàng)建A.md文件
touch A.md
// 查看Git狀態(tài)
git status
// 輸出:
On branch master
No commits yet
Untracked files:
(use "git add ..." to include in what will be committed)
A.md
nothing added to commit but untracked files present (use "git add" to track)
此時(shí)工作目錄中新添加了一個(gè)文件,也就是說(shuō)A.md文件被修改。在查看倉(cāng)庫(kù)狀態(tài)會(huì)發(fā)現(xiàn)Untracked files A.md
, 文件是未跟蹤狀態(tài)。可以使用git add <file>
命令提交跟蹤。
git add A.md
git status
// 輸出:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file: A.md
輸出結(jié)果新的文件A.md
,通過(guò)git add <file>
命令,此時(shí)的A文件已經(jīng)被提交到暫存區(qū),文件的狀態(tài)是已暫存狀態(tài)。git rm --cached <file>...
可以將暫存的文件從暫存區(qū)移除。
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
輸出結(jié)果顯示了一些提交的基本信息,master分支,當(dāng)前校驗(yàn)和[af93fed]以及在本次提交中,有多少文件修訂過(guò),多少行添加和刪改過(guò)。通過(guò)此命令將文件提交到倉(cāng)庫(kù)中,此時(shí)文件的狀態(tài)是已提交狀態(tài)。
前面的提到,Git的大部分操作都是在本地完成的,但是為了多人協(xié)作就需要進(jìn)行遠(yuǎn)程倉(cāng)庫(kù)管理。一些基本操作:
// 查看遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器
git remote -v
// 添加遠(yuǎn)程倉(cāng)庫(kù)
git remote add
// 拉取倉(cāng)庫(kù)信息
git fetch
// 推送到遠(yuǎn)程倉(cāng)庫(kù)
git push origin master
// 查看遠(yuǎn)程倉(cāng)庫(kù)
git remote show origin
// 遠(yuǎn)程倉(cāng)庫(kù)的移除和重命名
git remote rename
git remote rm
標(biāo)簽操作
// 查看所有標(biāo)簽
git tag
// 添加標(biāo)簽
git tag -a 0.1.1 -m 'message'
// 顯示標(biāo)簽信息
git show 0.1.1
// 提價(jià)標(biāo)簽到遠(yuǎn)程(--tags所有標(biāo)簽)
git push origin --tags
以上,只是Git的基本原理,其他內(nèi)容請(qǐng)看官方文檔。Git
作為iOS開(kāi)發(fā)者,想必對(duì)Cocoapods都不會(huì)陌生,那么有沒(méi)有思考過(guò)這些問(wèn)題?它的是如何查找?guī)?,如何集成?kù)的,它的工作原理是什么。那么接下來(lái)我們學(xué)習(xí)一下Cocoapods的工作原理。
理解其工作原理需要知道幾個(gè)概念:代碼庫(kù),索引庫(kù),本地索引庫(kù),podspec。
pod repo
查看索引庫(kù)信息。工作流程:
Pod install
時(shí),默認(rèn)情況下,會(huì)去更新本地索引庫(kù),可以在后面添加--no-repo-update
忽略更新。Podfile
文件內(nèi)容查找索引表,找到庫(kù)所對(duì)應(yīng)的的Podspec
文件,獲取庫(kù)的真是地址。關(guān)于
Podfile
設(shè)置請(qǐng)看The Podfile。
Podspec
后面在做講解,也可以查看Podspec Syntax Reference
理解了Git
和Cocoapods
的工作原理,我們需要學(xué)以致用。本節(jié)我們學(xué)習(xí)創(chuàng)建私有索引庫(kù),可以說(shuō)這是組件化的基礎(chǔ)。
前面提到通過(guò)命令pod repo
可以查看本地的索引庫(kù)。
master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/lqq/.cocoapods/repos/master
上面的URL
地址就是公共索引庫(kù)的地址,瀏覽器打開(kāi)其實(shí)就是一個(gè)倉(cāng)庫(kù)。里面存放著所有支持cocoapods
的庫(kù)的索引文件podspec
。因?yàn)樵搸?kù)是公共的,任何人都可訪問(wèn),所以為了使我們私有的庫(kù)也支持cocoapods
就需要?jiǎng)?chuàng)建私有的索引庫(kù)。
下面我們看如何創(chuàng)建私有索引庫(kù),其實(shí)很簡(jiǎn)單。你可以選用一些代碼托管平臺(tái),例如:碼云, Coding。這里以碼云為例。
在碼云中創(chuàng)建一個(gè)私有索引庫(kù),命名為LQQSpecs
。
OK私有庫(kù)就創(chuàng)建好了。接下來(lái)將私有索引庫(kù)添加到本地。通過(guò)命令pod repo add <Name> <URL>
pod repo add LQQSpecs
添加完成后運(yùn)行pod repo
就可以看到私有索引庫(kù)了。
至此,私有索引庫(kù)創(chuàng)建完成。
Cocoapods
提供了創(chuàng)建代碼庫(kù)的命令。
pod lib create // 創(chuàng)建倉(cāng)庫(kù)
// 拉取模板庫(kù)
// 1. 設(shè)置:編程語(yǔ)言 OC 、Swift
// 2. 是否生成Demo?
// 3. 是否生成單元測(cè)試
// 4. 是否生成UI測(cè)試
// 5. 文件前綴
文件目錄結(jié)構(gòu)如下。
├── 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
這里需要注意是,當(dāng)封裝庫(kù)更新時(shí),
Example
需要使用pod install
更新,才能正常使用修改過(guò)的庫(kù)。
下面我們來(lái)看一下Podspec
文件。 由于上面使用pod
提供的模板庫(kù)創(chuàng)建的項(xiàng)目,所以默認(rèn)生成了該文件。如果為現(xiàn)有的庫(kù)添加該文件,需要使用命令
pod spec create //創(chuàng)建Podspec
Podspec文件創(chuàng)建成功。那么文件里有什么內(nèi)容,如何設(shè)置。由于涉及到的參數(shù)較多,所以這里只找?guī)讉€(gè)關(guān)鍵的。其他請(qǐng)看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.' // 簡(jiǎn)介
s.homepage = 'https://github.com/AFNetworking/AFNetworking' // 項(xiàng)目主頁(yè)
s.authors = { 'Mattt Thompson' => 'm@mattt.me' } // 作者
s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } // 倉(cāng)庫(kù)地址
s.public_header_files = 'AFNetworking/AFNetworking.h' // 頭文件
s.source_files = 'AFNetworking/AFNetworking.h' // 源文件
#......
end
上面只是涉及最基礎(chǔ)的設(shè)置,其他的請(qǐng)查看官方文檔。
封裝好代碼并且修改好Podspec
文件,我們可以將項(xiàng)目上傳到私有倉(cāng)庫(kù)了。
上傳完成后需要為項(xiàng)目打標(biāo)簽,這個(gè)標(biāo)簽與Podspec
文件中的版本號(hào)對(duì)應(yīng)。
接下來(lái)將Podspec
上傳到私有索引庫(kù)就可以,在上傳之前最好驗(yàn)證Podspec
文件是否有錯(cuò)誤。
pod lib lint // 本地驗(yàn)證
pod spec lint // 遠(yuǎn)程驗(yàn)證
上傳到私有索引庫(kù)pod repo push <索引庫(kù)名> <Podspec文件>
pod repo push LQQSpecs xxx.podspec
OK!至此,私有索引庫(kù),私有倉(cāng)庫(kù),添加到私有索引庫(kù)都完成了。
檢驗(yàn)成果的時(shí)候到了。
pod search 'xxx'
// [!] Unable to find a pod with name, author, summary, or description matching `xxx`
WTF! 這是什么情況呢, 不要著急,并不是上述沒(méi)有成功,是因?yàn)殡娔X有緩存。
資料庫(kù)->Caches->Cocoapods
那么,如何將個(gè)人開(kāi)源庫(kù)發(fā)送到共有索引庫(kù),想必也回來(lái)。唯一的區(qū)別是Podspec
上傳的位置不同。
本文學(xué)習(xí)了Git和Cocoapods工作原理。以及通過(guò)Cocoapods創(chuàng)建私有庫(kù),并集成Cocoapods
功能。
本文作者: Owenli
本文鏈接: https://jesusLove.github.io/2018/01/03/Git&Cocoapods/