Git--代碼託管/協同開發

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
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    用戶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
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    用戶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   
相關文章
相關標籤/搜索