Git--代碼託管
我愛寫代碼,公司寫,家裏寫,若是天天來回帶一個U盤拷貝着實麻煩,Git有沒有相似於雲盤似得東西能夠進行數據同步呢?答案確定是有。git
GitHub,一個基於Git實現的代碼託管的平臺,能夠將內容以及版本記錄在遠程也保存一份,這樣就不用U盤咯(相似於雲盤)。PS: 相似GitHub的產品還有許多,如:GitLab、Bitbucket、碼雲等。github
基於GitHub實現代碼託管,須要一下步驟:vim
- 註冊GitHub
- 建立倉庫,建立完倉庫後會有一個URL代指該倉庫,如:
- git能夠是用該URL進行向遠程推送版本信息或獲取版本信息
學會使用Git和GitHub以後,就能夠基於GitHub進行代碼遠程託管。bash
在家裏,開發完畢部分功能將代碼推送到GitHub。app
MacBook-Pro-4:pondo gaoshengyue$ git remote add origin https://github.com/Ggaoshengyue/pondo.git # 爲地址起一個別名origin MacBook-Pro-4:pondo gaoshengyue$ git push origin master # 將本地master分支內容以及版本信息推送到GitHub Username for 'https://github.com': # 輸入GitHub用戶名 Password for 'https://gaoshengyue@github.com': # 輸入GitHub密碼 Counting objects: 2, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 270 bytes | 0 bytes/s, done. Total 2 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/Gaoshengyue/pondo.git 634aac4..274f1e4 master -> master MacBook-Pro-4:pondo gaoshengyue$ git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/Gaoshengyue/pondo.git 274f1e4..50e2169 dev -> dev
在公司,新電腦第一次使用,須要將代碼從GitHub中獲取並繼續開發,開發完事下班就下班回家。fetch
MacBook-Pro-4:github gaoshengyue$ git clone https://github.com/Gaoshengyue/pondo.git # 將項目從GitHub中獲取 Cloning into 'pondo'... remote: Counting objects: 31, done. remote: Compressing objects: 100% (26/26), done. remote: Total 31 (delta 2), reused 30 (delta 1), pack-reused 0 Unpacking objects: 100% (31/31), done. MacBook-Pro-4:github gaoshengyue$ cd pondo/ MacBook-Pro-4:pondo gaoshengyue$ git Branch # 默認獲取到得只有master分支 * master MacBook-Pro-4:pondo gaoshengyue$ git branch dev origin/dev # 建立dev分支且和遠程dev分支同步 Branch dev set up to track remote branch dev from origin. MacBook-Pro-4:pondo gaoshengyue$ git checkout dev # 切換到dev分支 Switched to branch 'dev' MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py # 繼續開發新功能 MacBook-Pro-4:pondo gaoshengyue$ git add . # 添加文件到版本庫的暫存狀態 MacBook-Pro-4:pondo gaoshengyue$ git commit -m '公司開發功能1' # 提交新功能到版本庫的分支 [dev 9281447] 公司開發功能1 1 file changed, 1 insertion(+), 1 deletion(-) MacBook-Pro-4:pondo gaoshengyue$ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支 Username for 'https://github.com': Password for 'https://gaoshengyue@github.com': Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 427 bytes | 0 bytes/s, done. Total 4 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/Gaoshengyue/pondo.git 50e2169..9281447 dev -> dev
在家裏,因爲白天在公司已經開發一部分功能並提交到GitHub,家裏電腦的代碼仍是昨晚的版本,因此須要從GitHub拉去最新代碼,而後繼續開發。spa
MacBook-Pro-4:pondo gaoshengyue$ git checkout dev # 切換到dev分支 Already on 'dev' MacBook-Pro-4:pondo gaoshengyue$ git pull origin dev # 從遠程GitHub倉庫獲取dev分支最新內容,併合併到本地 remote: Counting objects: 4, done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0 Unpacking objects: 100% (4/4), done. From https://github.com/Gaoshengyue/pondo * branch dev -> FETCH_HEAD 50e2169..9281447 dev -> origin/dev Updating 50e2169..9281447 Fast-forward app01/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py # 繼續開發新功能 MacBook-Pro-4:pondo gaoshengyue$ git add . # 添加文件到版本庫的暫存狀態 MacBook-Pro-4:pondo gaoshengyue$ git commit -m '家裏開發功能1' # 提交新功能到版本庫的分支
在公司,因爲昨天晚上在家已經開發了一部分功能,在公司須要先把昨晚開發的功能從GitHub中拉取,並繼續開發。3d
MacBook-Pro-4:pondo gaoshengyue$ git checkout dev # 切換到dev分支 MacBook-Pro-4:pondo gaoshengyue$ git fetch origin dev # 從GitHub倉庫獲取dev分支最新內容到版本庫的分支 remote: Counting objects: 3, done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/Gaoshengyue/pondo * branch dev -> FETCH_HEAD 150d891..65b6604 dev -> origin/dev MacBook-Pro-4:pondo gaoshengyue$ git merge origin/dev # 將版本庫的分支內容合併到工做區 Updating 150d891..65b6604 Fast-forward readme | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py # 繼續開發新功能 MacBook-Pro-4:pondo gaoshengyue$ git add . # 添加文件到版本庫的暫存狀態 MacBook-Pro-4:pondo gaoshengyue$ git commit -m 'xxxxxxxxxxx' # 提交新功能到版本庫的分支
Git--協同開發
公司或者項目的發展前景愈來愈好,咱們須要其餘工程師來協同開發,這時候咱們也要利用github和git來進行協同開發。日誌
GitHub中多人協同開發和單人開發仍是有點差異,協同開發通常有兩種方式:code
- 合做者,將其餘用戶添加到倉庫合做者中以後,該用戶就具備向當前倉庫提交代碼。
- 組織,建立一個組織,而後再該組織下能夠建立多個項目,組內成員能夠向組內全部項目提交代碼。PS:也能夠對某個項目指定合做者
協同開發命令和以上步驟相似,此處就再也不從新寫代碼,而是使用文件描述三人協同開發整個過程。
- 建立程序
- 用戶A建立程序,提交到GitHub
- 用戶B克隆項目
- 用戶C克隆項目
- 開發功能
- 用戶A開發功能1
- 用戶B開發功能2
- 用戶C開發功能3
- 提交
- 用戶A提交功能1,並push(A用戶手速快,先提交。)
- 用戶B提交功能2,沒法push,由於GitHub上已經有其餘人提交的新代碼。
解決方法:從GitHub上獲取最新代碼併合併到本地,提交本身開發的功能2。 - 用戶C提交功能3,沒法push,沒法提交,由於GitHub上已經有其餘人提交的新代碼。
解決方法:從GitHub上獲取最新代碼併合併到本地,提交本身開發的功能3。 - 獲取最新代碼
- 用戶A獲取最新代碼
- 用戶B獲取最新代碼
- 用戶C獲取最新代碼
在上面紅色標註的解決方法位置能夠有三種方式操做,三者均可以完成合並並提交新功能,可是日誌記錄會有差別,如:前二者版本記錄中會出現合併,而第三種能夠保證版本記錄乾淨整潔。
- 先 git pull origin master 而後 git push origin master
- 先 git fetch origin master 而後 git merge origin/master 再 git push origin master
12345678910111213141516用戶A:
touch
4.py
git add .
git commit -m
'功能4'
git push origin master
用戶B:
touch
5.py
git add .
git commit -m
'功能5'
git push origin master
# 報錯,由於GitHub中已經有人提交新代碼
git pull origin master
git push origin master
- 先 git fetch origin master 而後 git rebase origin/master 再 git push origin master
123456789101112131415161718用戶A:
touch
4.py
git add .
git commit -m
'功能4'
git push origin master
用戶B:
touch
5.py
git add .
git commit -m
'功能5'
git push origin master
# 報錯,由於GitHub中已經有人提交新代碼
git fetch origin master
git rebase origin
/master
git push origin master