遠程私有庫(實操)
本教程一步一步教會如何制作自己的遠程私有庫,一步一步實操,制作過程還是有點小繁瑣的。
目錄:
寫在前面:所需要的幾種倉庫
主工程(宿主工程)倉庫 【1個】
-
組件倉庫 【1個或多個】
- 功能組件
- 業(yè)務組件
索引倉庫 【1個或多個】
如果是多個,可按項目來分類或自定義分類。每個索引倉庫可管理多個組件倉庫。
〇、準備工作-創(chuàng)建遠程私有索引庫(管理私有組件spec文件)
創(chuàng)建遠程私有倉庫存放私有的spec文件并將源添加到本地索引庫repo
因為spec文件中保存著庫的源碼地址,而我們制作的遠程私有庫是不希望別人看到源碼的,所以要將spec文件也變?yōu)樗接小_@樣,就需要另一個專門管理多個spec的遠程私有倉庫。
在遠程創(chuàng)建一個專用存放多個spec文件的遠程私有倉庫
先查看本地repo
$ pod repo將這個倉庫地址添加到本地repo源
兩種方式:01-https方式;02-ssh方式(ssh方式需提前配置SSH)
$ pod repo add YourName git@xxx.git
‘YourName’為給spec源起的名稱再次查看本地repo
$ pod repo
可以發(fā)現(xiàn),本地多了一個剛添加的源-
補充命令:
- 刪除本地repo
$ pod repo remove name - 更新本地的Pod 索引庫的緩存信息
$ pod repo update [--verbose]
- 刪除本地repo
一、遠程私有組件庫制作、發(fā)布與使用
第一步 創(chuàng)建本地私有組件庫
-
手動創(chuàng)建 (按照本地私有庫的步驟一步一步手動配置)
- cd進入到將要創(chuàng)建倉庫的文件夾
# 全局設置默認分支為master (可設置可不設置) $ git config --global init.defaultBranch master # 使用init命令初始化本地倉庫 $ git init - 創(chuàng)建并配置.podspec文件
- 創(chuàng)建庫對應的測試工程
- 測試工程可以使用pod本地依賴的方式引入私有庫來使用
- cd進入到將要創(chuàng)建倉庫的文件夾
-
使用模板自動創(chuàng)建一個庫和對應的測試工程
- 創(chuàng)建
$ pod lib create xxx - 測試工程使用pod本地依賴的方式引入私有庫來使用
- 創(chuàng)建
第二步、創(chuàng)建遠程私有倉庫并與本地組件倉庫關聯(lián)
創(chuàng)建遠程私有倉庫,用于存儲庫源碼
將本地和遠程關聯(lián)
$ git remote add origin git@xxx.git
沒有輸出就表示關聯(lián)成功將遠程倉庫pull到本地
$ git pull
關聯(lián)成功后,一定要先做這步pull操作!否則會出現(xiàn)分支沖突的問題-
本地添加文件,提交代碼
$ git add . $ git commit -m '描述' $ git push
注意:
- 一般會出現(xiàn)這樣的提示
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
這里系統(tǒng)給了2中提示,如果先用方式二git branch --set-upstream-to=origin/<branch> master來處理,即
$ git branch --set-upstream-to=origin/master master
之后提示
Branch 'master' set up to track remote branch 'master' from 'origin'.
設置好了之后,再進行拉取
$ git pull
或者直接用方式一git pull <remote> <branch> 的方式處理,如:
$ git pull git@xxx.git master
需要注意的是,不管用那種方式都需要拉取,拉取就可能會有下面的提示:
“refusing to merge unrelated histories”(拒絕合并無關歷史記錄),還有一堆提示
hint: Pulling without specifying how to reconcile divergent branches is
hint: discouraged. You can squelch this message by running one of the following
hint: commands sometime before your next pull:
hint:
hint: git config pull.rebase false # merge (the default strategy)
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
那我們就按照提示使用命令git config pull.rebase false # merge (the default strategy),即
$ git config pull.rebase false
會發(fā)現(xiàn)還是提示“refusing to merge unrelated histories”(拒絕合并無關歷史記錄)
這時候可以允許合并不同的版本,使用下面的命令
$ git pull origin master --allow-unrelated-histories
這樣會將遠程倉庫的下載下來,但是會發(fā)生不同版本的沖突。
一般是發(fā)生在 README.md 文件,所以我們就要打開這個文件來解決沖突。
解決沖突之后,正常提交代碼
$ git add .
$ git commit -m '描述'
最后推送代碼
$ git push --set-upstream origin master
或者
$ git push -u origin master
問題解決。
- 還可能出現(xiàn)以下情況
- 如果本地已經(jīng)commit提交過代碼,那么使用如下方式
- 本地修改代碼commit
- 關聯(lián)遠程
$ git remote add origin https://xxxxx.git - push到遠程倉庫
$ git push -u origin master
- 如果出現(xiàn)錯誤如 【 ![rejected] master -> master (non-fast-forward) error:failed to pus some refs to xxxxxx】之類的,有兩種解決方法:
- 第一種,先備份,再拉取覆蓋本地(一定先踏馬的備份?。?/strong>)
- 備份代碼
- 強制拉取到本地
$ git pull --rebase origin master - 推送
$ git push origin master
- 第二種,強制推送覆蓋遠程文件(這個命令在團隊開發(fā)的時候最好不要用,否則可能會有踏馬的‘生命, 危, 險. Danger to life’)
$ git push -f origin master
- 綜上所述,還是用第一種方法吧?。?!
- 第一種,先備份,再拉取覆蓋本地(一定先踏馬的備份?。?/strong>)
- 如果本地已經(jīng)commit提交過代碼,那么使用如下方式
第三步、配置spec文件與發(fā)布
查看本地repo源,并找到管理spec的源
$ pod repo-
配置spec文件
version-
homepage其url使用遠程私有庫主頁 licence-
source- ①git 設置為倉庫的地址
- ②tag: s.version.to_s
source_files- 等
commit提交代碼并push到遠程倉庫
-
給庫打tag,并將tag推送push到遠程倉庫
- 查看tag
$ git tag - 設置tag 【跟version一致!】
$ git tag '0.1.1' - 將設置好的tag推送到遠程
$ git push --tags - 補充命令:刪除某個tag并將改動推送到遠程
01-本地刪除tag
$ git tag -d 0.1.1
02-將刪除改動推送到遠端
$ git push origin :0.1.1
- 查看tag
-
檢測驗證spec文件
- 驗證本地spec文件
$ pod lib lint --verbose --no-clean
注意homepage的設置 - 驗證遠程spec文件
$ pod spec lint --verbose --no-clean
遠程必須要有對應版本的tag提示:
-> xxx (0.1.0)
驗證成功會提示:xxx.podspec passed validation.
- 驗證本地spec文件
-
發(fā)布,將spec文件push到遠程私有索引庫
- 查看本地源
$ pod repo - 發(fā)布,將spec提交到本地源關聯(lián)的遠程私有索引庫
注意:$ pod repo push YourName xxx.podspec [--verbose] [--allow-warnings] # ‘YourName’為spec源的名稱,使用【$ pod repo】命令可以查看 # ‘xxx.podspec’為組件的podspec文件名- 如果出現(xiàn)錯誤,建議直接刪除本地源,之后重新關聯(lián)
- 如果為 repo not clean 的錯誤,如下:
[!] The repo 'YourName' at '../xxxxx/.cocoapods/repos/NAME' is not clean
則可以cd到對應路徑下,執(zhí)行clean命令來清理
$ git clean -f
- 本地源對應的文件夾中,也會出現(xiàn)剛提交的庫及版本文件夾
- 查看本地源
搜索遠程私有庫
$ pod search xxx
注意:如果私有庫提交成功但還是搜索不到,有可能是CocoaPods緩存的問題資源庫-Caches-CocoaPods-search_idnex.json,可以將索引文件刪除,重新執(zhí)行search命令,會重新生成本地索引文件。-
更新遠程私有庫
- 修改庫代碼
- 更新xxx.podspec文件中的version
- 提交代碼commit并push到遠程
- 給庫打新的tag,對應新的version,并push --tags
- 驗證spec
$ pod spec lint - 發(fā)布
$ pod repo push YourName xxx.podspec
第四步、使用遠程私有庫
發(fā)布成功之后,庫的測試工程和主工程都可以按照遠程pod的方式來使用遠程私有庫
-
配置
Podfile文件
遠程私有庫不能像公有庫那樣直接pod使用,需要在Podfile文件中設置遠程私有庫的源- 查看源
$ pod repo - Podfile文件中,target外層設置遠程私有庫的源(一般在文件一開始設置)
source 'git@xxx.git'
- 查看源
安裝遠程私有庫
$ pod install
二、遠程私有庫依賴別的框架
修改spec文件中的s.dependency
s.dependency 'AFNetworking', '~> 3.0'提交、tag、驗證、發(fā)布
-
使用遠程私有庫
- Podfile文件中要同時添加所依賴的別的框架的源
source 'https://xxxxx' #遠程私有庫源 source 'https://xxxxx' #其他框架源 - 重新安裝
$ pod install
- Podfile文件中要同時添加所依賴的別的框架的源
三、單個子庫的安裝
首先,CocoaPods中默認只有兩層文件結(jié)構(gòu),要想在pod安裝之后的文件系統(tǒng)中分層次顯示,需要給庫設置子庫分類。
其次,設置好子庫之后,如果僅僅某個子庫依賴別的框架,那么只給這個子庫設置依賴。
-
配置spec文件
在s.source_files下面,做子庫配置s.source_files = 'xxx/Classes/**/*' # 常用工具 s.subspec 'Tool' do |t| t.source_files = 'xxx/Classes/Tool/**/*' end # # 網(wǎng)絡工具 s.subspec 'MyAFNetworkingTool' do |nt| nt.source_files = 'xxx/Classes/MyAFNetworkingTool/**/*' nt.dependency 'AFNetworking', '~> 3.0' end注意:
- 注意
s.subspec全部小寫 - 每個子庫中都要配置其
source_files - 由于
MyAFNetworkingTool才依賴AFN,所以要保證安裝了MyAFNetworkingTool才會同時安裝所依賴的AFN,所以把對應的dependency配置放在對應的子庫下。
- 注意
走更新遠程私有庫步驟
提交、tag、驗證、發(fā)布搜索
$ pod search xxxxx單獨使用子庫
Podfile文件中這樣使用
pod 'xxxxx/MyAFNetworkingTool'
注意:如果子庫引用了第三方庫,還需要在Podfile中設置第三方庫的源URL安裝使用
$ pod install
因為spec文件中保存著庫的源碼地址,而我們制作的遠程私有庫是不希望別人看到源碼的,所以要將spec文件也變?yōu)樗接?。這樣,就需要另一個專門管理多個spec的遠程私有倉庫。
- 注冊
- 首先使用您的電子郵件注冊一個賬戶。這樣的話就會在當前的設備上開啟一個會話。建議再會話中添加描述信息,便于區(qū)分。
$ pod trunk register youremail@xxx.com 'NAME名稱' [--description='描述-比如你的設備'] [--verbose] [--allow-warnings]
中括號內(nèi)容可以省略;--verbose為顯示一些詳細信息到控制臺 - 單擊電子郵件剛收到的鏈接,以驗證Trunk賬戶和當前計算機之間的鏈接。
- 列出會話
$ pod trunk me
- 首先使用您的電子郵件注冊一個賬戶。這樣的話就會在當前的設備上開啟一個會話。建議再會話中添加描述信息,便于區(qū)分。
- 提交
$ pod trunk push xxx.podspec