使用GitHub分享代碼


  感謝優達的免費課程,還有網絡上熱心的網友,尤其是廖雪峰老師的教程幫我填補好多空缺。這是三個筆記中最后一個了,我的課外學習要先告一段落了,考驗要緊啊,還沒咋復習呢。心里好慌,希望自己能耐得住性子坐下來復習。加油!

  一定要從自己的賬號下clone倉庫,這樣你才能推送修改。如果從原作者的倉庫地址克隆,因為沒有權限,你將不能推送修改。所以為此必須在GitHub上新建一個空的倉庫。使用它來保存其他人的倉庫,並實現與本地的交互。每次更新GitHub時,更新的是一個分支,他會檢查該更新所有的提交,如果GitHub中存在就不需要再次上傳,如果沒有則會提交。  

  在創建一個新的GitHub倉庫時,會有選項“使用README來初始化倉庫”:如果這完全是一個新的倉庫並且本地也沒有任何相關內容的話,建議使用該選項,他會初始化一個commit。否則你無法克隆一個空的倉庫。在GitHub的遠程倉庫中可以直接創建純文本文件。

互聯設置:因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

注意:git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

 

查看和創建遠程倉庫:git remote。

  • 不加參數:查看所有遠程倉庫。
  • git remote add name HTTPS:添加遠程倉庫,name可以是任何字段,用來在本地指代GitHub中的遠程倉庫。如果只有一個遠程倉庫,建議使用origin。最后加上該庫的https地址。
  • git remote -v:輸出詳細信息。

更新遠程倉庫:

git push 遠程倉庫名 本地分支名

復制GitHub上其他人的庫 

對於GitHub上想要修改的倉庫,可以使用fork按鈕將其復制到自己的賬戶中,GitHub會自動給出原文件鏈接。想要對其進行修改,除非改動非常小,否則都需要clone到本地,使用git clone URL克隆時,git會自動地創建一個遠程倉庫並指向克隆的原始倉庫。可以食用git remote -v驗證。這里的URL是fork的主頁URL。

 

圖一GitHub上克隆到本地

 

  在自己創建一個庫的同時還有合作伙伴的時候,可以選用“合作者“一同開發,不過主人還是有主導權的,在setting選項卡中,有collaboration選項可以添加不同的合作者。

git會把你的所有遠程分支在本地保存一個副本,他會包含最后一次拉取、推送時分支的狀態。遠程分支的本地副本以“遠程倉庫名/分支名”為名,與遠程推送儲存在一起。

更新遠程分支本地副本

git fetch:更新遠程分支的本地副本,同時實際的本地版本不發生變化。

從遠程倉庫拉取最新的狀態

git pull:從遠程倉庫拉取最新的狀態,並把它與本地的分支進行合並。

合並機制

  這本來是要在上一篇中講的,上一篇內容太多了,正好這里也有合並的內容,就放在了這里。

  快速合並:你要git默認的合並方式,判斷依據是與本分支合並的分支是否是本分支的祖先。如果是這種情況,后面的分支會有前面的分支所有內容,沒有必要再產生一個標簽,只要把祖先的標簽移到最后即可。但是即使是使用快速合並,在GitHub上也會產生一個commit。也可以使用強制非快速合並,合並分支時,加上--no-ff參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。所以建議使用非快速合並。

 

圖二快速合並舉例

 分支策略

  在實際開發中,我們應該按照幾個基本原則進行分支管理:

  首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;那在哪干活呢?干活都在其他分支上如:easy-mode,也就是說,easy-mode分支是不穩定的,到某個時候,比如1.0版本發布時,再把easy-mode分支合並到master上,在master分支發布1.0版本;你和你的小伙伴們每個人都在easy-mode分支上干活,每個人都有自己的分支,時不時地往easy-mode分支上合並就可以了。

拉取請求

 如果在本地新建一個分支並在其上進行修改,將其推送到GitHub上時也會同樣創建一個分支。如果想讓其他人更改使用“pull request”拉取請求,即別人可以提交修改,你可以決定是否將其合並到master分支上。設置“pull request”時要注意,GitHub默認是將新分支合並到最原始的倉庫中,如果不想一定要更改。拉取請求其實就是合並請求,合作者把想合並到主分支的文本提交到GitHub上,如果主人同意就可以合並到主分支上了。

 

圖三更改請求提交位置

設置完之后,會在倉庫主頁中出現pull request選項卡,新的拉取請求在其中,選擇相應的請求,會看到最新的提交,你可以點開看到更改的內容。

 

圖四拉取請求位置

  如果有多個pull request,並且他們之間有沖突的話,一般的解決方法是先先判斷哪個請求要合並,不需要合並的請求直接刪除,減少沖突。如果兩個都需要的合並產生沖突可以先合並一個,刪除該分支,然后在本地電腦上解決沖突,並將解決方案與主分支(想要被合並的分支)合並到解決方案所在地分支中,然后將該分支push到GitHub中,用來更新“pull request”。使用“git pull 遠程倉庫名 分支名”來拉取遠程倉庫中相應的分支。

  不要直接將修改合並到主分支然后push,這樣會導致合作者無法看到你的更改。

  如果在你修改本地倉庫添加新內容時,原作者修改了他的文件導致你無法與最新版本進行合並,可以先創建一個指向源庫的遠程倉庫一般叫做upstream,在本地解決沖突,然后將其push到自己的GitHub上再次提出pull request

 

  

圖六 git中一些常用概念以及方法的關系

 

以下內容都是后加的。

凍結現場命令git stash

         如果遇到突發情況,需要立刻去其他分支上處理問題,但是有頭上的工作還沒做完無法commit,這時候可以使用命令git stash可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作。

         使用git stash命令后,用git status查看工作區,就是干凈的(除非有沒有被Git管理的文件),因此可以放心地創建分支來修復bug。

         用git stash list命令找到儲藏的工作現場,需要恢復一下,有兩個辦法:

  • 一是用git stash apply恢復,但是恢復后,stash內容並不刪除,你需要用git stash drop來刪除;
  • 另一種方式是用git stash pop,恢復的同時把stash內容也刪了,但是只能是只有一個stash文件的情況下使用。

你可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令

 

圖七 git stash命令使用情況

 

標簽tag

         這東西沒有聽老師講過,但是看了廖雪峰老師的教程后明白了,其實很簡單,給個原鏈接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000

標簽說白了就是一個代號罷了,為了簡化commit ID。

         使用也非常簡單添加標簽使用命令git tag <name>。通常會默認放在該分支的最新提交上。git tag -a <tagname> -m "blablabla..."可以指定標簽信息,git tag可以查看所有標簽。可以使用git tag <name> commitID給相應ID的commit補上一個標簽。

         因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以,打錯的標簽可以在本地安全刪除使用命令:git tag –d <name>

         命令git push origin <tagname>可以推送一個本地標簽到遠程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM