github入門書籍總結


第一章 由來

  • GitHub是為開發者提供Git倉庫的托管服務。

  • Git與GitHub的區別:在Git中,開發者將源代碼存入名叫“Git倉庫”的資料庫中並使用;而GitHub則是在網絡上提供Git倉庫的一項服務。

  • Pull Request使得地球上不同位置不同時間的開發者共同開發軟件。

  • GitHub Flavored Markdown語法被用於GitHub作文字標記使用。

  • GitHub以人為中心,我們可以看到一個人公開的所有源代碼,還能看出其他的信息,包括提交信息等。

  • Issue功能是將一個任務或問題分配給一個Issue進行追求和管理的功能。

第二章 基本知識簡介

  • 版本管理就是管理更新的歷史記錄。

  • 集中型,將所有數據集中存放在服務器中,便於管理,但一旦開發者所處環境無法連接服務器時,就無法獲取最新的源代碼,使得開發停滯下來。萬一翻身服務故障導致數據消失,那就一切前功盡棄了。

  • 分散性,GitHub將倉庫Fork給了每一個用戶,分散性擁有多個倉庫,開發者本地就有倉庫,無需連接遠程服務器就可以進行開發。

  • Fork就是將GitHub的某個特定倉庫復制到自己的賬戶下,Fork的倉庫與原倉庫是兩個不同的倉庫,開發者可以隨便編輯。

  • 所有倉庫之間可以push和pull,即使不通過GitHub,開發者A也可以直接向開發者B的倉庫進行push和pull。

  • linux和mac系統自帶Git,windows安裝git應用程序git bash。

  • 設置姓名和郵箱地址,輸入內容會在~/.gitconfig中顯示

git config --global user.name "Firstname Lastname"

git config --global user.email "email@example.com"

  • 另外,為了提高可讀性,可以設置

git config --global corlor.ui auto

第三章 初始操作

3.1 注冊賬號

  • 注冊賬號https://github.com/

  • 設置SSH Key,GitHub上連接已有倉庫時的認證,是通過使用了SSH的公開密鑰認證方式進行的。


$ ssh-keygen -t rsa -C "your_email@example.com"

Generating public/private rsa key pair.

Enter file in which to save the key

(/Users/your_user_directory/.ssh/id_rsa): 按回車鍵

Enter passphrase (empty for no passphrase): 輸入密碼

Enter same passphrase again: 再次輸入密碼

需求:注冊有限,密碼,生成的ssh密鑰會放置在/Users/your_user_directory/.ssh/,包括id_rsaid_rsa.pub

然后將id_rsa.pub其添加至注冊GitHub賬號的SSH keys中,id_rsa是私鑰,需要自己慎重保存,切勿公開。添加位置

之后就可以使用手中的私人密鑰與GitHub進行認證和通信了。測試:

ssh -T git@github.com

Hi hugechuanqi! You've successfully authenticated, but GitHub does not provide shell access.表示成功。

3.2 創建倉庫

  • 創建倉庫repository,參考筆記

  • .gitgnore文件記錄不需要在Git倉庫中進行版本管理的文件。

  • README.md文件標明本倉庫所包含的軟件的概要、使用流程、許可協議等信息。

  • clone倉庫,將已有倉庫clone到本地電腦上進行開發:

git clone https://github.com/hugechuanqi/MachineLearing.git

  • 然后編寫代碼或其他文件,例如.md, .py, .cpp, .c, .java, .txt等,此處假設為hello_world.php,內容自定。

  • 提交,通過git add命令將文件加入暫存區,再通過git commit命令提交

git add hello_world.php

git commit -m "Add very good script by php" -m表示提交說明

可以通過git log查看日志;公開的源代碼也擁有軟件著作權,協議包括BSD修正協議,Apache許可協議,MIT許可協議

  • 然后執行push,GitHub上的倉庫就會被更新:

git pull

第四章 具體實際操作

4.1 初始化倉庫及相關操作

  • git init初始化倉庫,要使用版管理,首先得初始化一個倉庫,實際建立一個目錄並初始化倉庫:

mkdir git-tutorial

cd git-tutorial

git init

目錄底下會生成.git目錄,存儲着管理當前目錄內容所需的倉庫數據。在Git中,這個目錄的內容成為“附屬於該倉庫的工作樹”,文件編輯等操作在工作樹中進行。

  • git status顯示Git倉庫的狀態。

  • git add表示向暫存區中添加文件。

  • git commit命令可以將當前的暫存區中的文件實際保存到倉庫的歷史紀錄中,保存倉庫的歷史記錄。

  • git log查看提交日志

git log -p 顯示文件的改動

git log -p README.md 僅查看README.md文件的提交日志。

git diff 查看更改前后的差別,可以查看工作樹、暫存區、最新提交之間的差別。

4.2 分支操作

  • 分支操作:從master分支創建feature-A分支和fix-B分支,每個分支中都擁有自己的最新代碼;master分支是Git默認創建的分支。

  • git branch命令可以顯示分支名列表;

  • git checkout -b創建和切換分支;

git checkout -b feature-A

git checkout master 表示切換到master分支

git checkout - 切換回上一個分支

  • 特性分支,是集中實現單一特性,除此之外不進行任何作業的分支,往往特性分支會有數個,如feature-A,而保留一個可以隨時發布軟件的穩定分支,如master。

  • 主干分支,master,是特性分支的原點,也是特性分支的終點。

  • git merge合並分支,假設分支feature-A上的內容已經實現完畢,這時應該先切換到主干分支master中,然后

git merge --no-ff feature-A

  • git reset 回溯歷史版本

git reset --hard 3e3e67a1a94cc6180dcd0bbdd2efa91076073422 其中這一長串數字是時間節點的哈希值。git log之后就可以看到,在commit后面。

git checkout -b fix-B 創建特性分支

4.3 消除沖突

  • 消除沖突,系統在合並README.md時,feature-A分支更改的部分與本次想要合並的fix-B分支更改的部分發生了沖突,因此需要解決這個沖突。打開README.md文件會發現以下內容:
<<<<<<< HEAD
- Feature-A
=======

- fix-B
>>>>>>> fix-B

其中,=======以上的部分是當前HEAD的內容,以下的部分是要合並的fix-B分支中的內容。我們在編輯器中將其改成想要的樣子,即

- Feature-A
- fix-B

這樣,就可以讓feature-A和fix-B的內容並存於文件之中;但是在實際中,往往需要刪除其中一個。然后提交:
git add README.md
git commit -m "solve the conflict"

  • git commit --amend修改提交信息
    git commit --amend 然后在編輯器中修改並保存
    隨后git log --graph就可以看到提交日志的相應內容已經被修改。

4.4 壓縮歷史

  • git rebase -i 壓縮歷史,若發現前一個提交內容有錯,則提交一個修改,並將這個修改包含到前一個提交之中,壓縮成一個歷史記錄。過程為:
    • git checkout -b feature-C #創建新分支
    • git commit -am "Add feature-C" #提交內容
    • git diff #查看修改后的差別,如何修改內容就是對文件的操作了
    • git commit -am "Fix typo" #Fix typo英文意思是錯字和漏字
    • git rebase -i HEAD~2 #將修改的內容“Fix typo”與前一次的提交合並
  • git checkout master 切換到主分支
  • git merge --no-ff feature-C 將分支feature-C與master主分支合並

4.5 推送至遠程倉庫

  • Git是分散型版本管理系統,為防止與其他倉庫混淆,倉庫名請與本地倉庫保持一致,即git-tutorial。為了提高整合性,創建倉庫時不要勾選初始化README文件。

  • git remote add 添加遠程倉庫。在GitHub上創建的倉庫路徑為"git@github.com: 用戶名/git-tutorial.git"。用git remote add命令將其設置成本地倉庫的遠程倉庫。例如:

    • git remote add original git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git
      上述操作之后,Git會自動把git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git遠程倉庫的名稱設置為origin(標志符)。
  • git push 推送至遠程倉庫

    • git push -u origin master 把當前分支的內容推送給遠程倉庫origin的master分支。-u闡述可以在推送的同時,將origin倉庫的master分支設置為本地倉庫當前分支的upstream(上游)。添加-u闡述有利於之后運行git pull命令從遠程倉庫獲取內容時,省去了另外添加的麻煩。
  • git push 推送至master以外的分支

    • git checkout -b feature 創建分支
    • git push -u origin feature-D 將當前分支push給遠程倉庫並保持分支名稱不變。之后就可以在遠程倉庫的GitHub頁面就可以查看到feature-D分支。

4.5 從遠程倉庫獲取

  • git clone 獲取遠程倉庫。
    切換到非倉庫目錄名下后,執行git clone git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git,我們會默認處於master分支,同時系統會自動將origin設置成該遠程倉庫的標識符。即當前倉庫的master分支與GitHub端的遠程倉庫(origin)的master分支在內容上完全相同。

  • git branch -a 命令查看當前分支的相關信息。

  • 獲取遠程的feature-D分支(??此處有點問題,今天暫時沒時間修改)

    • git checkout -b feature-D origin/feature-D. -b參數后面是本地倉庫中新建分支的名稱。為了與遠程倉庫origin/feature-D保持同名,此處-b后面也起名為feature-D,過程如下:
git init
git remote add origin git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git    #將遠程倉庫名稱設置為origin
git checkout -b feature-D origin/feature-D    #新建分支,並獲取遠程分支內容
  • git pull 獲取最新的遠程倉庫分支
    • git pull origin feature-D 將本地的feature-D分支更新到最新狀態。如果兩人同時修改了同一部分的源代碼,push時就很容易發生沖突,所以多人同時在同一個分支中進行作業時,為減少沖突情況的發生,建議更頻繁地進行push和pull操作。

推薦資料
1、Pro Git:http://git-scm.com/book/zh/v1,是一本零基礎Git學習資料。Scott Chacon書寫。
2、LearnGiBranching:http://pcottle.github.io/learnGitBranching/,是學習Git基本操作的網站,偏重樹形結構。
3、tryGit:http://try.github.io/ 可以在Web上一邊操作一邊學習Git的基本功能。

97/286 未完待續

參考:書籍:github入門與實踐


免責聲明!

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



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