《Github入門與實踐》讀書筆記

俗話說得好:程序員有三寶,Google,Github和StackOverflow。其他兩個靠英語,捂臉說直到現在 Github 用的都不熟。

其實應該不用介紹,Github 的用處大家都知道。Git 用起來稍微有一點點麻煩,但本地有 VS Code 自帶的 Git,Github 也有桌面版。網頁上也不需要怎麼用命令行,按鈕按起來也很容易。可能也因為我目前做的項目都太小了,書只看了前幾章,後面關於團隊使用的離我還太遠。

看書連帶敲樣例也就三五個小時,看完也就只能記住那幾個最主要的命令,學完了多在 Github 上 pull 幾個 requeset 就學會了。我自己是參與了一個外國小哥的初學 LaTeX 指南的翻譯項目,感興趣的同學不妨也找找。

-----

# 《Github入門與實踐》讀書筆記

## 第一章

1. Github的吉祥物叫: octocat

## 第二章

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

$ git config --global user.email "email@xxx.com"

$ git config --global color.ui auto

2. 注意由於查看時.gitconfig不是可執行文件,書上的命令應改為:

cat ~/.gitconfig

3. 更改默認編輯器

打開.gitconfig並添加:

[core]

editor = ""c:/Program Files (x86)/Microsoft VS Code/Code.exe""

## 第三章

1. SSH Key

```

$ ssh-keygen -t rsa -C "your email address"

Generating public/private rsa key pair.

Enter file in which to save the key

(/Users/your_user_directory/.ssh/id_rsa): // input

Enter passphrase (empty for no passphrase): //your password

Enter same passphrase again: // confirm your password

```

//這一部分也是在本地Git Bash中一行一行填寫

2. 添加公開密鑰

在GitHub中選擇SSH Keys後 粘貼id_rsa.pub文件內容

查看方式:

$ cat ~/.ssh/id_rsa.pub

ssh-rsa 公開密鑰內容 your_email

3. 認證通信

```

$ ssh -T git@github.com

The authenticity of host github.com (xxx.xx.xxx.xxx) cant be established.

RSA key fingerprint is xxxxxxxxxx.

Are you sure you want to continue connecting (yes/no)? // input yes

Warning: Permanently added github.com,xxx.xx.xxx.xx (RSA) to the list of known hosts.

Enter passphrase for key /c/Users/90526/.ssh/id_rsa: // input your private password

Hi xxx! Youve successfully authenticated, but GitHub does not provide shell access.

```

4. 創建倉庫

* Add New repository

Initialize this repository with a README 如果想向GitHub添加手中已有的Git倉庫,建議不要勾選,直接手動push

* Add .gitignore

幫助我們把不需要在Git倉庫中進行版本管理的文件記錄在.gitignore文件中

5. clone已有代碼

```

$ git clone github.com/xxx.git

Cloning into Hello-World...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

Unpacking objects: 100% (3/3), done.

```

6. 在下載的文件夾中添加文件後查看狀態

```

$ git status

On branch master

Your branch is up-to-date with origin/master.

Untracked files:

(use "git add <file>..." to include in what will be committed)

hello_world.php

nothing added to commit but untracked files present (use "git add" to track)

```

7. 提交

```

$ git commit -m "Add hello world scrip by php"

[master b7672a3] Add hello world scrip by php

1 file changed, 3 insertions(+)

create mode 100644 hello_world.php

```

8. 通過git log命令查看提交日誌

```

$ git log

commit xxx

Author: xxx

Date: Mon Mar 20 21:17:58 2017 +0800

Add hello world scrip by php

commit xxx

Author: xxx

Date: Mon Mar 20 20:58:40 2017 +0800

Initial commit

```

9. 進行push

```

$ git push

Counting objects: 3, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 327 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To github.com/xxx.git

9896fbe..b7672a3 master -> master

```

## 第四章

1. 初始化倉庫

```

$ mkdir git-tutorial

$ cd git-tutorial

$ git init

Initialized empty Git repository in C:/Users/90526/git-tutorial/.git/

```

2. 查看倉庫狀態

```

$ git status

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

```

3. 建立README.md

```

$ touch README.md

$ git status

On branch master

Initial commit

Untracked files:

(use "git add <file>..." to include in what will be committed)

README.md

nothing added to commit but untracked files present (use "git add" to track)

```

4. 想暫存區添加文件

```

$ git add README.md

$ git status

On branch master

Initial commit

Changes to be committed:

(use "git rm --cached <file>..." to unstage)

new file: README.md

```

5. 保存倉庫的歷史記錄

* 記錄一行提交信息

```

$ git commit -m "First commit"

[master (root-commit) fa384ad] First commit

1 file changed, 0 insertions(+), 0 deletions(-)

create mode 100644 README.md

```

// -m參數後的"First commit"稱作提交信息,是對這個提交的概述

* 記錄詳細提交信息 // 此處有問題,沒實現出來

$ git commit

* 查看提交後狀態

```

$ git log

commit 47cbc14940509936819cf6e752fbb03217e235ea // 這個是提交的哈希值。Git的其他命令中,在指向提交時會用到這個哈希值

Author:xxx < xxx >

Date: Tue Mar 21 19:14:15 2017 +0800

First commit

```

* 只顯示提交信息的第一行

```

$ git log --pretty=short

commit 47cbc14940509936819cf6e752fbb03217e235ea

Author:xxx < xxx >

First commit

```

* 只顯示指定目錄,文件的日誌

```

$ git log README.md

commit 47cbc14940509936819cf6e752fbb03217e235ea

Author: xxx <xxx@gmail.com>

Date: Tue Mar 21 19:14:15 2017 +0800

First commit

```

* 顯示文件的改動

```

$ git log -p

commit 47cbc14940509936819cf6e752fbb03217e235ea

Author: xxx <xxx@gmail.com>

Date: Tue Mar 21 19:14:15 2017 +0800

First commit

diff --git a/README.md b/README.md

new file mode 100644

index 0000000..e69de29

```

另$ git log -p README.md // 就可以只查看README.md文件的提交日誌以及提交前後的差別

6. 查看更改前後的差別

```

$ git diff

diff --git a/README.md b/README.md

index e69de29..722dc3d 100644

--- a/README.md

+++ b/README.md

@@ -0,0 +1 @@

+# Git xxx tutorial

No newline at end of file

```

"+"號標出的是新添加的行,本刪除的行則用"-"號標出。

此時應再用git add命令將README.md文件加入暫存區

7. 查看工作樹和最新提交的差別

由於沒有區別,git diff什麼都不會顯示

```

$ git diff HEAD

diff --git a/README.md b/README.md

index e69de29..722dc3d 100644

--- a/README.md

+++ b/README.md

@@ -0,0 +1 @@

+# Git xxx tutorial

No newline at end of file

```

8. 分支操作

* 顯示分支一覽表

```

$ git branch

* master

```

"*"表示這是我們當前所在的分支

* 創建切換分支

$ git checkout -b

* 切換到feature-A分支並提交

```

$ git checkout -b feature-A

Switched to a new branch feature-A

```

等效於執行:

```

$ git branch feature-A

$ git checkout feature-A

```

* 切換到master分支

```

$ git checkout master

Switched to branch master

```

* 切換回上一個分支

$ git checkout -

9. 特性(Topic)分支

是集中實現單一特性(主題),除此之外不進行任何作業的分支。

基於特定主題的作業在特性分支中進行,主題完成後再與master分支合併。只要保持這樣一個開發流程,就能保證這樣一個開發流程,就能保證master分支可以隨時供人查看。這樣以來其他開發者也可以放心大膽的從master分支創建新的特性分支

10. 主幹分支

主幹分支是剛才我們講解的特性分支的原點,同時也是合併的終點。通常人們會用master分支作為主幹分支。主幹分支中並沒有開發到一半的代碼,可以隨時供他人查看。

11. 合併分支

首先要切換到要合併的目標分支

$ git merge --no-ff feature-A

12. 以圖表形式查看分支

$ git log --graph

13. 回溯歷史版本

```

$ git reset --hard a0df285d6301f3b99766be56fa9273b845a3ddd8

HEAD is now at a0df285 add index

```

每人的哈希值都不同,可以用 $ git log --graph 查看

因為git log 只能查看當前狀態作為終點的歷史日誌,所以可以用git reflog 命令,查看當前倉庫執行過的操作日誌

哈希值只要輸入4位以上就可以執行

14. 提交修改信息

要修改上一條提交信息,可以使用 git commit --amend 命令

15. 壓縮歷史

git rebase -i

用於將這個修改包含在前一個提交之中,壓縮成一個歷史記錄。

16. 快速創建新分支

git commit -am "Add feature-C"

等價於: $ git add $ git commit

17. 更改歷史

$ git rebase -i HEAD~2

選定當前分支中包含HEAD(最新提交)在內的兩個最新歷史記錄為對象,並在編輯器中打開

18. 添加遠程倉庫

$ git remote add origin git@github.com:用戶名/本地倉庫名.git

19. 推送master分支至遠程倉庫

$ git push -u origin master

假定在master分支下進行操作。-u參數可以在推送的同時,將origin倉庫的master分支設置為本地倉庫當前分支deupstream(上游)。

添加這個參數,將來運行git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就可以直接從origin的master分支獲取內容。

20. 推送至master以外的分支

$ git push -u origin feature-D

21. 獲取遠程倉庫

$ git clone git@github.com:用戶名/倉庫名.git

注意要換到其他目錄下,不要與之前操作的倉庫在同一目錄下

執行git clone 命令後我們會默認處於master分支下,同時系統會自動將origin設置成該倉庫的標識符

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

22. 獲取遠程其他分支

$ git checkout -b feature-D origin/feature-D

-b參數的後面是本地倉庫中新建分支的名稱

這裡的origin指名為origin的倉庫(GitHub端的倉庫)

23. 獲取最新的遠程倉庫分支

$ git pull origin feature-D

## 第五章

1. 鍵盤快捷鍵

在各個頁面下按下 shift + / 打開快捷鍵一覽表
推薦閱讀:

Teach Yourself Computer Science
[6] 分支、循環與遞歸
[2] 編寫第一個C語言程序
Teach Yourself Programming in Ten Years - 用十年的時間自學編程
編程與下廚房:如何教女友寫Python(一:廚房與Python

TAG:GitHub | 編程入門 | 編程入門指南 |