Git學習筆記(三)遠程庫(GitHub)協同開發,fork和忽略特殊文件
遠程庫
遠程庫,通俗的講就是不再本地的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和忽略特殊文件