一.git版本控制原理
master(主分支), develop(分支),雖然是主分支和分支,卻是平級關系,develop可以理解為開發庫,master為生產庫。
本地版本:master, develop GitHub上: master, develop
1.gitHub上master版本拉取代碼到本地master。 2.本地創建develop(分支),在分支里開發。 3.修改本地開發代碼后提交,提交到本地master(主分支)。 4.本地代碼提交到GitHub上的Develop分支。 5.要出新版本或測試沒什么問題后才提交到GitHub的master(主分支)。
注意:多人開發的情況下,都提交代碼到gitHub的develop(分支),從gitHub的develop(分支)拉去代碼到本地的develop(分支),再進行開發和代碼合並,所有都沒問題的時候才合並的gitHub的master(主分支),生成版本。
以上都是個人理解,如有異議,歡迎討論學習 郵箱:jiang_yongchang@126.com
二.gitHub上創建項目

獲取到項目地址:

三.上傳本地代碼到GitHub
提供兩種方法: 1.方法一: 在Mac的終端上cd到上傳代碼的.git目錄(要上傳的代碼必須有.git隱藏文件,Xcode創建工程的時候勾選的,默認就創建)

上傳代碼如下:
-
git init
-
git add . // add后 空格 加 點
-
git commit -m "first commit"
-
git remote add origin https://github.com/jiangyongchang126/hah.git
-
git push -u origin master
2.方法二:(推薦使用方法,下面也是按照這個方法)
①.在終端上cd到要存放的本地代碼目錄,
例如:cd /Users/jiangyongchang/work

②. 克隆GitHub的代碼到本地
git clone https://github.com/jiangyongchang126/MD5_RSA_AES_BASE64.git

現在在本地的/Users/jiangyongchang/work下已經有了MD5_RSA_AES_BASE64目錄,打開目錄看到:

README.md就是項目簡介,GitHub上創建了才有
.gitignore 是上傳git的忽略文件,比如cocopods導入的類庫不上傳等...
.git文件是鏈接本地和GitHub的橋梁,不能覆蓋(下面會用到)
把要上傳的代碼copy到MD5_RSA_AES_BASE64下,.git 文件不用拷貝,.DS_Store文件也不能capy

③.把添加代碼后的工程提交代GitHub master(本地master到GitHub master)
終端cd到本地庫.git隱藏文件目錄
-
git branch // 看到分支情況,默認是只有master
-
git status // 看當前分支的狀態
-
git add --all // 初始化時添加全部,平常提交代碼是 git add+提交的文 件名 例如提交podfile文件:git add podfile
-
git commit -m 'first' //添加成功后提交 first是提交的注釋
-
git push origin master:master // 提交本地代碼到GitHub,origin相當於網路,master:master就是本地master推到GitHub master
-
例如:// git push origin master:develop // 把本地master推到遠程develop
看到分支情況,默認是只有master

當前分支狀態,紅色文件為需要add的文件

add 后再看那些文件狀態變綠色

提交

提交代碼到GitHub master

此時,刷新GitHub,代碼已上傳
四.develop master版本控制
下面展開版本控制:終端的路徑一致不變.git目錄
版本控制時,可以邊操作邊打開GitHub的客戶端對比,當創建分支develop時,客戶端上就會多一個分支develop(還沒合並所有事空的),當把master的代碼合並到develop時,客戶端上的develop分支才有代碼! 參照學習更加明顯,在終端里面有時候顯示的不明確。

1.創建本地分支develop
git branch develop
現在 git branch一下發現有兩個多了一個develop分支,且當前分支為master


2.把本地master的代碼merge(合並)到develop
-
git checkout develop // 切換當前分支為develop
-
git merge master // 把master分支的代碼合並到當前分支(develop)

致此,代碼以合並到了develop,並且當前分支為develop
3.merge(合並)代碼到GitHUP develop(分支)
git push origin master:develop // GitHub上並沒有develop分支,執行這句命令后會自動創建一個GitHub develop分支

相應的GitHub上也出現了develop分支

4.到此,本地develop、master和GitHub上develop、master都一致啦!
重點來啦,怎么使用剛剛創建好的那些個develop、master?再創建一個本地分支develop1來模擬多人開發情況,本地的develope分支和develop1分支分別修改代碼,然后提交到GitHub的develop分支,提交、拉去、沖突就能模擬多人開發環境了:
①.開發就用本地develop分支:查看分支狀態,如果在master就切換當前分支到develop,
git checkout develop
打開Xcode寫代碼,之后把代碼提交到本地develop,
-
git branch
-
git status
-
git add podfile MD5/EncryptionMD5.m MD5.xcodeproj/project.pbxproj
-
git commit -m '修改了podfile,viewcontrller'

在develop分支下寫的代碼就會改變,而master和develop1中的不變,切換不同的分支,然后重新打開Xcode后發現確實如此! GitHub Desktop軟件上也一致。
②.本地develop分支代碼推到GitHub的develop分支。
-
// 應該先拉取 然后再推上去,
-
git pull origin develop:develop // 拉取到本地develop並合並,如果有沖突這個方法就不能用了,被拒絕拉取(下面的develop1分支會介紹另一種拉取方式)
-
git push origin develop:develop // 第一個develop是本地的,第二個是GitHub上的
看下GitHub上的master和develop確實有變動


③.OK,切換到develop1分支然后修改代碼,拉取,提交
-
git checkout develop1
-
git branch
-
git status
-
git add podfile
-
git commit -m '修改了podfile,添加了AFNetWorking'

現在GitHub上develop分支的podfile文件是 pod 'SDWebImage',但是本地develop1分支的podfile文件是 pod 'AFNetWorking',會產生沖突。
先拉取GitHub的develop分支到本地develop1,合並后再提交本地develop1到GitHub的develop分支。
git pull origin develop:develop1

rejected 被拒絕了,因為有沖突。
現在換一種方法:
-
git fetch origin develop //更新GitHub的develop分支到當前本地分支(develop1)
-
git log -p develop1..origin/develop // 比較本地分支(develop1)和GitHub的develop分支的差別
-
git merge origin/develop // 合並沖突。
-
git status // 查看develop1分支的狀態
-
vim podfile // 打開podfile文件
-
git add pod file
-
git commit -m '解決沖突'
-
git push origin develop1:develop // 將本地develop1合並到GitHub的develop

podfile 文件有沖突

④.切換本地分支到develop
-
git checkout develop
-
git pull origin develop:develop // 更新本地develop分支的代碼,如果遇到沖突,解決方法參考③里面的。
目前來說,本地的develop、develop1和GitHub的develop分支保持一致啦,假設測試庫的代碼都已經測試通過了,要發版本!
⑤.合並代碼到本地主master,合並代碼到GitHub的master主分支
-
git checkout master // 切換到本地master主分支
-
git merge develop // 合並本地develop分支到本地master主分支。
-
git push origin master:master // 合並本地master主分支到GitHub的master主分支。
⑥.發布版本。
五.參考的文章
$ git pull
$ git push
$ git fetch
$ fetch與push的區別
加密的demo集成了MD5、RSA、AES、Base64:MD5_RSA_AES_BASE64下載