《Github入門與實踐》讀書筆記
05-06
俗話說得好:程序員有三寶,Google,Github和StackOverflow。其他兩個靠英語,捂臉說直到現在 Github 用的都不熟。
Enter passphrase (empty for no passphrase): //your password Enter same passphrase again: // confirm your password
推薦閱讀:
其實應該不用介紹,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 auto2. 注意由於查看時.gitconfig不是可執行文件,書上的命令應改為: cat ~/.gitconfig3. 更改默認編輯器 打開.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): // inputEnter 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_email3. 認證通信``` $ ssh -T git@github.comThe authenticity of host http://github.com (http://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 https://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 logcommit 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 https://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-A12. 以圖表形式查看分支 $ git log --graph13. 回溯歷史版本``` $ 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 commit17. 更改歷史 $ git rebase -i HEAD~2 選定當前分支中包含HEAD(最新提交)在內的兩個最新歷史記錄為對象,並在編輯器中打開18. 添加遠程倉庫 $ git remote add origin git@github.com:用戶名/本地倉庫名.git19. 推送master分支至遠程倉庫 $ git push -u origin master 假定在master分支下進行操作。-u參數可以在推送的同時,將origin倉庫的master分支設置為本地倉庫當前分支deupstream(上游)。 添加這個參數,將來運行git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就可以直接從origin的master分支獲取內容。20. 推送至master以外的分支 $ git push -u origin feature-D21. 獲取遠程倉庫 $ 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