1. 程式人生 > >Git學習筆記(三)遠程庫(GitHub)協同開發,fork和忽略特殊文件

Git學習筆記(三)遠程庫(GitHub)協同開發,fork和忽略特殊文件

tex 情況 learn 多人 版本管理 獲得 logs 秘鑰 多個

遠程庫

  遠程庫,通俗的講就是不再本地的git倉庫!他的工作方式和我們本地的一樣,但是要使用他就需要先建立連接!
  遠程庫有兩種,一個是自己搭建的git服務器;另一種就是使用GitHub,這個網站就是提供Git倉庫托管服務的,所以,只要註冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。友情提示:在GitHub上免費托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放進去。
  遠程倉庫的好處:
  1、我們可以隨時隨地的與倉庫建立連接,以實時存放我們開發的內容;
  2、與他人實現協同開發,而不是再需要來回的發送修改過的代碼由他人整合在一起,git自動的幫我們完成了更新,這是最重要的也是無可比擬的!
  3、只要你不把提交到本地倉庫中的代碼提交到遠程庫,那麽別人一輩子也休想看到你的代碼!

一、創建遠程倉庫(GitHub)

1、GitHub網站地址:https://github.com/,這個網站就是提供Git倉庫托管服務的,所以,只要註冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。

2、由於本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要如下設置:

  第1步:創建SSH Key。在用戶主目錄下(例如:C:\Users\Administrator\),看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:

ssh-keygen.exe //創建SSH key 【公鑰和私鑰,連接省卻了用戶名密碼的輸入】git窗口下,直接執行ssh-keygen.exe,默認往下執行,然後把公鑰復制到github上

  如果一切順利的話,可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
  第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面,然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容,最後點擊“Add Key”按鈕完成。
  說明:為什麽GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。當然,GitHub允許你添加多個Key。
  假定你有若幹電腦,你一會兒在公司提交,一會兒在家裏提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。

二、添加遠程庫:

1、登錄GitHub網站,並按網站要求創建一個新的倉庫;

2、根據GitHub網站提示,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。

3、本地倉庫與GitHub上相應的倉庫建立關聯,代碼如下:([email protected]:zh605929205/LearnGit.git為我新建的倉庫路徑)

$ git remote add origin [email protected]:zh605929205/LearnGit.git

  添加後,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

4、把本地庫的內容推送到遠程庫上,用git push命令,實際是把當前分支master推送到遠程。

$ git push -u origin master

  由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令(不用帶-u參數)。當然也可以不寫!就需要你手動輸入yes
  當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告,這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub服務器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes回車即可。

5、通過GitHub上的倉庫來克隆出新的本地倉庫(可以在任意一個文件夾下,建議最好在一個固定的盤下方便於管理),要克隆一個倉庫,首先必須知道倉庫的地址,然後使用 git clone命令克隆從遠程庫克隆到本地(說白了就是下載版本庫)。代碼如下:

$ git clone [email protected]:zh605929205/LearnGit.git	//應用場景:切換辦公地點:家和公司,第一次都能從遠程庫上克隆然後進行開發!

  也許還註意到,GitHub給出的地址不止一個,還可以用 https://github.com/zh605929205/LearnGit.git 這樣的地址。實際上,Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。

三、本地與遠程庫協同開發

1、查看遠程庫:

$ git remote
$ git remote -v //加上-v參數可以查看詳細信息 ----> 顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址。

2、當本地更新完畢,提交到本地的版本庫,要推送分支到遠程庫分支。推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:

語法:$ git push origin 分支名
$ git push origin master // $ git push origin dev

  但是,並不是一定要把本地分支往遠程推送,那麽,哪些分支需要推送,哪些不需要呢?

    master分支是主分支,因此要時刻與遠程同步;

    dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;

    bug分支只用於在本地修復bug,就沒必要推到遠程了,除非老板要看看你每周到底修復了幾個bug;

  總之,就是在Git中,分支完全可以在本地自己藏著玩,是否推送,視你的心情而定!

3、若是有多個分支,創建遠程origin的dev分支到本地,需要創建本地分支並關聯遠程分支:

語法:$ git checkout -b 分支名 origin/分支名 //origin/dev為遠程分支路徑
$ git checkout -b dev origin/dev
$ git branch --set-upstream 分支名 origin/分支名 //若本地已有分支,可通過該命令來關聯遠程分支

4、從遠程庫中拉下分支新版本,用以更新本地庫:

$ git pull origin 分支名

5、遠程庫推送解決沖突:

  多人協同開發,向遠程推送提交時產生沖突【實質就是提交快慢的問題】,則需先用git pull把最新的提交從origin/dev抓下來,然後,在本地合並,解決沖突,再推送,如下:

$ git pull //從遠程獲取分支
$ git commit -m "marge files" //本地更新合並
$ git push origin dev //推送提交到遠程分支

  註意:如果你在公司開發某段代碼而忘記推送到遠程庫,別人又開發了別的功能並推送到遠程庫(此時遠程庫的版本已經與你本地庫版本不一致),遇到這種情況,一定要記住先把遠程庫中對應的分支拉下來,然後再本地提交到版本庫後,再重新推送到遠程庫!而且每次遇到解決沖突或是版本不一致的情況,一定要先看看是誰上一次做的操作,推送前一定要與其溝通!以免推送出錯!

因此,多人協作的工作模式通常是這樣:
  首先,可以試圖用git push origin branch-name推送自己的修改;
  如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;
  如果合並有沖突,則解決沖突,並在本地提交;
  沒有沖突或者解決掉沖突後,再用 git push origin branch-name 推送就能成功!
  如果git pull 提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name 關聯遠程分支。

6、遠程庫的操作都是先克隆或是把程序拉到本地,然後在本地對代碼進行修改,然後更新到本地版本庫,再推送到遠程庫!這裏邊兒肯定是會涉及到分支的問題,在上一文中已經詳細的說明了分支的操作!具體按照流程來即可!

協同開發

  1個遠程庫,多個人員使用,同時對某個業務線進行開發!

  既然要實現協同開發,那麽一個人鐵定是不行的。就需要創建組織,然後再對這個組件進行管理添加成員,點進去這個庫,在people欄下點擊邀請開發人員!發送邀請的同時可以對這個開發人員進行權限分配,以限制其都能有什麽權限!

  註意:非組織成員是不允許對這個倉庫進行操作的!

  協同開發的時候,共同使用一個項目,當需要對這個遠程庫提交的時候,一定是先進行拉取操作,然後再提交!否則就會因為版本庫內代碼不一致的問題導致報錯或是紊亂!

  兩人未溝通的情況下同時提交代碼到遠程庫,肯定是得取決於誰提交的快誰會提交到遠程庫!提交慢的人會被拒絕,就是因為慢的原因!所以如果遇到這種被拒絕的情況,不用驚慌,你先把遠程庫的代碼拉取下來,然後你再提交一次就OK了!【註意:解決沖突的時候,一定要先與上一個提交的人先溝通!】

奉上一張相關錯誤截圖,借用的老師的圖片,當遇到這個問題時,一定是版本沖突的問題!把遠程庫的代碼拉下來,重新提交就OK!

技術分享

四、參與開源項目 fork

1、首先你自己必需要有GitHub賬號並已登錄成功。

2、找到指定的開源項目GitHub地址,例如:

技術分享

3、點擊圖上的Fork按鈕,會在自己賬號下克隆一個相同的倉庫,例如:

技術分享

4、使用git clone命令克隆到本地倉庫,如:

$ git clone [email protected]:wheeky/learngit.git

5、在本地進行相應的操作,比如新增了一個文件(CTextBox.cs):

$ git add CTextBox.cs
$ git commit -m ‘add CTextBox.cs‘

6、使用git push命令推送更新到遠程倉庫:

$ git push origin master

此時遠程倉庫就可以看到相應的更新(紅色框內顯示最後提交的信息),如圖:

技術分享

7、創建pull request請求,向開源項目的作者發送更新請求,如下列圖示:

技術分享

  點擊“New pull request”按鈕,並在隨後的頁面裏填寫相應的標題、備註說明等信息提交即可,剩下的就是等原作者的處理。若提交成功可在作者的開源項目的Pull requests中可以看到自己請求記錄,如下:

技術分享

五、忽略特殊文件

  在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去(按照規則填寫),Git就會自動忽略這些類型的文件。不需要從頭寫.gitignore文件,GitHub已經為我們準備了所有語言的各種配置文件,只需要找到python的文件,組合一下就可以使用了。所有配置文件可以直接在線瀏覽https://github.com/github/gitignore

  註意:.gitignore文件本身要放到版本庫裏,並且可以對.gitignore做版本管理!

Git學習筆記(三)遠程庫(GitHub)協同開發,fork和忽略特殊文件