總覽python
如你所見,當我再次添加文件時,Git很是聰明,知道我只對單個文件進行了更改,這反映在其輸出中。在此以後我所作的提交僅更新了該特定文件,而沒有更新其餘文件。
查看日誌
版本控制的重點是保留所作更改的記錄,你可使用git log命令(https://git-scm.com/docs/git-log) 執行此操做,它爲你提供了按時間順序進行的全部提交的完整視圖:
如你所見,個人姓名,電子郵件地址,時間戳和提交消息都反映在日誌中,這使得跟蹤誰進行了哪些更改以及肯定bug什麼時候首次引入到項目中變得至關容易。
在GitHub上上傳到遠程存儲庫
到目前爲止,咱們都還在本地存儲庫上工做,這意味着所作的全部更改都已在你的本地計算機上進行了跟蹤,而咱們的開發人員目前還看不到它們,爲此你須要建立一個遠程存儲庫——一個任何地方任何人均可以訪問的存儲庫,這就是GitHub的用武之地!
你的遠程存儲庫位於GitHub服務器上,任何人均可以訪問它,所以讓咱們建立一個遠程存儲庫!
注意:你須要爲此建立一個GitHub賬戶。
建立遠程存儲庫的步驟
在右上角,單擊+號,而後單擊新建存儲庫:
在下一頁上,爲你的存儲庫命名並提供簡短描述,完成後,點擊建立存儲庫:
太棒了!你剛剛建立了第一個遠程存儲庫。
GitHub在2019年1月向我的免費提供了私有存儲庫。在2020年4月,GitHub對全部人(包括組織)免費提供了私有存儲庫。
將Git遠程添加到你的存儲庫
建立GitHub存儲庫後,GitHub將提示你將文件上傳到遠程存儲庫:
因爲咱們已經建立了本地存儲庫,所以首先須要同步本地和遠程存儲庫。咱們可使用git remote add origin <URL>來作到這一點
該命令在本地和遠程存儲庫之間建立鏈接。一旦這樣作,咱們就再也不須要每次都經過URL引用遠程存儲庫,咱們可使用名稱origin來引用遠程存儲庫。
使用Push
如今已經添加了遠程存儲庫,你所要作的就是將你的提交從本地存儲庫推送到遠程存儲庫,以便全部開發人員均可以查看更改。
你可使用git push -u origin <branch-name>將本地存儲庫轉移到GitHub服務器上的遠程存儲庫
Origin是咱們的遠程存儲庫的名稱。
如今,咱們全部的合做者均可以訪問此新更新的存儲庫。
克隆GitHub存儲庫
咱們知道了如何建立本身的本地存儲庫並將其推送到GitHub上。如今,若是你不是建立此存儲庫的人,則必須在本地計算機上覆制此存儲庫。
將項目上載到遠程存儲庫後,開發人員可使用git clone命令(https://git-scm.com/docs/git-clone) 得到此存儲庫的副本,而後開發人員能夠處理其本地存儲庫副本,對其進行更改,而後將其上傳到遠程存儲庫上。
從GitHub克隆遠程存儲庫很容易,只需轉到要克隆的存儲庫,而後單擊「克隆」或「下載」按鈕便可複製URL:
你也能夠直接今後處以Zip文件的形式下載存儲庫,可是咱們將使用Git從咱們的終端下載它。
要將其克隆到本地計算機,你須要轉到終端並在如下命令中提供URL
git clone < URL >
這將在本地計算機上製做該存儲庫的本地副本。
你會注意到,在當前目錄內建立了一個與遠程存儲庫同名的文件夾,該文件夾是你的項目/工做目錄,其中包含本地Git存儲庫,你須要在此目錄中導航以更改本地存儲庫。
使用cd <存儲庫名稱> /在你的工做目錄中導航:
如今你已經在工做目錄中,能夠進行所需的任何更改。若是你喜歡這些更改並認爲它將解決一個錯誤或爲該項目添加一個很是酷的功能,則只需先提交你的本地存儲庫,而後將其推送到GitHub上的遠程存儲庫,以使你的開發人員能夠及時瞭解最新信息、新的變化。
分支與合併
分支是Git的最基本特徵之一。分支使你能夠處理master分支上存在的主要項目代碼的新功能或錯誤修復。
分支就像對提交的引用。你能夠對分支進行任何更改,即便你搞砸了這一分支,也請放心,由於它不會損害你的實際工做代碼。
分支使你能夠試驗新功能或新想法,甚至能夠並行建立多個分支以試驗不一樣功能。任何數量的人均可以在特定分支上工做,而且你能夠根據須要擁有任意數量的分支。
你可使用git branch建立一個新分支,這將包含master分支中存在的全部文件,你也能夠在此分支上更改文件。一旦確信代碼運行良好,就可使用git merge命令(https://git-scm.com/docs/git-merge) 將其與master分支集成。
到目前爲止,咱們一直在master分支上工做。如今,咱們將看到如何使用git branch <branch-name>建立一個新分支。
這將建立一個新分支,你可使用git branch命令檢查:
Git將始終經過在每一個命令的括號中提到它來更新你正在處理的分支,這能夠確保你在正確的分支上工做。
如今讓咱們使用git checkout <branch-name>在另外一個分支中工做
如今,我正在循環分支中工做,我想經過在個人代碼中添加一個for循環來更改存儲庫中的文件之一,而後提交更改:
完成以後,讓我回到主分支並檢查所作的更改:
這是怎麼回事?我所作的更改未反映在master分支中!這正是應該發生的狀況。進行提交時,我位於循環分支內,所以所作的更改保存在該特定分支中,所以更改未提交給master分支,個人master分支上的代碼仍是安全的。
接下來,若是我想將這些更改提交到master分支,由於它沒有任何錯誤,並且我喜歡新的「循環」功能,則可使用 git merge <branch name> -m 「<message>」命令從要將其合併到的分支上(在本例中是主分支)執行此操做,這將使循環分支與主分支合併:
太棒了!咱們在主代碼中添加了功能齊全的新功能,如今剩下要作的就是將這些更改提交到遠程存儲庫!
使用Pull
你須要知道的最後一個Git命令是pull,這使你能夠從遠程存儲庫中獲取任何更新,並將其與本地存儲庫合併。例如,克隆了遠程存儲庫後,有人在某個分支上對遠程存儲庫進行了更新,如今你須要獲取這些更改並與本地存儲庫合併,以便你能夠及時瞭解這個新的更改。
假設我在Python代碼文件中添加了for循環以後,有人在Java代碼文件中添加了for循環,由於個人代碼文件沒有for循環:
我可使用pull命令更新本地存儲庫。你所要作的就是鍵入git pull origin <branch-name>
這將更新個人本地存儲庫,如今在個人Java文件中也有一個for循環!
爲世界貢獻力量
使用GitHub,你能夠瀏覽任何人的存儲庫,想必那就是開源之美吧! 有時候,你會真正喜歡某我的的項目,而且很想爲該項目作出貢獻,或者若是你想建議某人的項目最好進行某些修復,而後發送請求,以便你能夠爲他們的項目作出貢獻。
這能夠經過稱爲fork的過程來實現。
fork某人的存儲庫,請轉到存儲庫頁面,而後在頂部單擊Fork,這將在你的賬戶中建立存儲庫的副本。
我已經fork了Analytics Vidhya的Data Science Hacks存儲庫(https://github.com/kunalj101/Data-Science-Hacks) ,對於須要提升效率的全部數據科學家來講,這是一個很好的存儲庫!
如今,你能夠將此存儲庫克隆到本地計算機上,進行所需的更改或要添加的功能,而後將其推送到遠程副本。
最後,你能夠請求項目的建立者接受所作的修復或添加的新功能,這稱爲拉取請求(pull request)。
當你瀏覽到配置文件中的存儲庫時,你將看到一個名爲「 New pull request 」 的選項:
單擊該按鈕,GitHub將帶你進入下一頁,該頁面將顯示你但願原始建立者合併的分支:
建立拉取請求後,系統將提示你定義對原始建立者的存儲庫所作的更改,你能夠根據須要對所作的更改提供儘量多的描述,最後發送拉取請求。
如今原始創做者們要麼接受你的更改,而後將其與分支合併,在這種狀況下,祝賀你剛剛作出了開源貢獻,你應該爲本身感到驕傲!可是,即便沒有,也不要傷心欲絕。還有許多其餘開放源代碼項目正在等待你的關注,所以繼續前進,繼續作出貢獻!
若是你想爲開源項目作貢獻,但又不知道從哪裏開始,則能夠從我爲本文建立的存儲庫開始——「Hello-world」(https://github.com/aniruddha27/Hello-world) 。克隆它,對其進行更改,而後發送拉取請求,我會接受全部人的!讓咱們一站式學習每種編程語言!
尾註
在這裏,咱們確實講了不少內容,若是你耐心地實現了本文中我所作的一切,請給本身一個鼓勵,這是你應得的!
但這只是冰山一角。Git和GitHub比我在本文中介紹的內容要多得多。若是你想繼續對存儲庫進行探索和貢獻,我建議你閱讀下文,其中列出了一些最具創新性的機器學習GitHub項目。git