Git & GitHub 入門

By 小黑

目錄

- Git 介紹

- GitHub 介紹

- Git 基本指令和知識

- GitHub 教學

- GitHub Pages

Git

Version Control

什麼是 Version Control?

- 一種用來紀錄檔案更動紀錄的軟體

- 有點像 Super Mario 的 checkpoint

- 讓你出事時不至於死太慘

為何需要 Version Control?

- 假設你弄完了某科的學習歷程,於是你把它存成 v1.pdf

- 你傳給老師 v1.pdf,但這老師名字可能正著念倒著念一樣

  (或者他是一個寫了很多本書的歷史老師)

- 老師不爽這個版本,叫你重做一份

- 於是你又做了 v2.pdf ,傳給老師

- 然後這老師又不爽 v2.pdf ,又要你重改

- 於是你又弄出了 v3.pdf 、final.pdf、v4-final.pdf...

- 最後可能會變成下張簡報這個樣子

有了版本控制,就不用這麼麻煩!

- 你可能還是得被老師搞

- 但至少不用搞得那麼奇怪

- 版控軟體能讓你隨時回朔到之前的版本

- 有了版本控制大概會長這個樣子:

如果你覺得原本的方案很好

- 如果我今天要開發一個軟體,版本可能會到 20 幾版,可以   這樣一個個存嗎?

- 你跟別人一起寫專案,要怎麼確保兩個人合作好?

- 如果有幾百個人一起改這專案,要怎麼確保能合併好?

- 你的朋友智商可能沒有 157,他可能蓋掉你的檔案,怎解?

- 假設好幾個人一起協作,然後有人亂搞,你要怎麼抓出來是        誰?

所以通通給我用版控!

Git

Git

- 一套版本控制軟體

- 由 Linus Torvalds (欸對又是他)開發

- 目前市面上最多人用的版控軟體(94 %)

Git 簡史

- Linux Kernel 開發最初用另一套版控系統 BitKeeper

- 但 BitKeeper 是付費軟體,而維護者不想開免費版給 Linux   開發者

- Linus 他老哥直接不爽開寫 Git (但這版本無限趨近零,後面          講的指令幾乎都還沒有

- 後續由另外一個日本人接手開發,變成現在的 Git

為何用 Git?

- 你沒有別的選擇

- 快

- 佔用空間比較小

- 可以離線使用,不讓開發工作中斷 (分散式版本控制)

集中式版本控制

分散式版本控制

分散式 vs 集中式

分散式(distributed) 集中式(centralized)
網路 不用 需要
Repo 地點 每個使用者電腦 中央的伺服器
常見軟體 Git、Mercurial Perforce, Subversion

安裝 Git

- 如果你上節課有裝到 Kali,內建就有,開 terminal 就能用

- 如果你用 Mac 或 Windows,去 官網 載安裝檔,然後無腦     安裝就好了

- 如果你用其他 Linux distro,我相信不用教你也會

GitHub

GitHub

- 一個用來存 code 的網站(類似雲端硬碟)

- 使用 Git 作為版本控制的工具 

- 對應到剛剛的 Remote repo

- 全球最大同性交友網站(?

- 上面有很多酷酷的東西

註冊 GitHub 帳號

- 去 https://github.com sign up

- email 隨便填(但等等會用到,先記著

註冊好會像下面這樣子

Git Commands

先設定一下 Git

git config --global user.name "你的名字"
git config --global user.email "你的email"
git config --list # 檢查目前的設定

- 一二行指令用來設定你的個人資訊,這些到時候 Git 會紀錄到每筆紀錄中

- email 用你剛剛註冊 GitHub 填的

- 第三行指令會列出你的設定,如果要看到你的名字跟 email   就成功了

還有 GitHub

ssh-keygen -t ed25519 -C "youremail@example.com" 
# 把 youremail@example.com 換成你註冊 GitHub 時用的 email
cat ~/.ssh/id_ed25519.pub # 輸出金鑰,然後記得把這串金鑰複製好

- 第一行會生成一串金鑰(這東西之後密碼學會講,但先不用   了解他),生成過程中如果系統要你輸入東西,一律按 Enter

- 第三行指令會印出這串金鑰,把他複製下來 (Ctrl-Shift-C)

- 接著把這串金鑰摳到 GitHub (見下張投影片

把金鑰摳到 GitHub

- 開啟 GitHub 設定金鑰的頁面,按 New SSH Key

- 然後在 Key 那邊貼上你剛剛複製的金鑰

- Title 隨便打,方便你記得是哪台裝置就好

- 按 Add SSH key 就完成了

第一個 Git Repo

- 首先先創一個資料夾(第一行指令,忘了回去翻第一堂簡       報)

- 接著移動到這資料夾(第二行指令)

- 然後初始化 Git (第三行指令)

   (這會在這資料夾下建一個 local repo)

mkdir first_git_repo # 創一個新的資料夾
cd first_git_repo # 移動到這資料夾
git init # 在這個資料夾下建立一個 git repo

Git 基本概念

- 一個 repo 分為三個區塊

    - Working Directory

        - 所有沒被 Git 追蹤的檔案 or 檔案變動

    - Staging Area

     - 暫存區,準備提交到 Repository 的檔案放這

    - Repository

        - 倉庫區,

大概長這樣

改動過的檔案

沒被追蹤的檔案或變動

紀錄好的檔案

Git 流程

1. 第一行指令創了個檔案 hello.txt

2. 第二行指令把 hello.txt 加到暫存區內

3. 第三行指令把暫存區內的東西提交 (commit) repo 內

 -m "First Commit" 的意思是說明這次 commit 做了啥

 盡量寫成看得懂的樣子,不然你之後要回朔時會很想死

 (這樣就會有紀錄,之後就可以看這次提交改了啥)

4. 之後如果檔案有更動,也是一樣的流程:

 把檔案加到暫存區 -> 提交

touch hello.txt
git add hello.txt
git commit -m "First Commit"

git add

作用:把檔案加到暫存區

- 第一行指令把 hello.txt 加到暫存區

- 第二行指令會把所有有改動的檔案加到暫存區

git add hello.txt
git add .

git commit

作用:把暫存區內的檔案提交到 Repository

- 第一行指令建立一次提交,並設定這次提交的訊息為 First      Commit

- 第二行指令也會建立一次提交,但這次 Git 會讓用 Vim 編輯   提交的訊息

- 每次 commit 都有一個獨一無二的 id ,這點等下會用到

git commit -m "First Commit"
git commit

git status

作用:告訴你哪些東西在暫存區、哪些東西沒被 Git 追蹤

git status

(借用一下我自己的 repo 當例子)

git log

作用:列出 commit 的紀錄

- 第一行列出所有 commit 的完整紀錄

- 第二行只列 commit 的提交訊息跟 commit id

git log
git log --oneline --graph

(學長 commit message 都亂寫,不要學學長

git clone

作用:把 Remote Repo 複製到本地

- 上面那行指令會把這個 repo 摳到本地

git clone git@github.com:demonaarwu/nvim.git

Branch

Branch

- 跟字面意思一樣:「分支」

- 一個 repo 可以有很多個 branch

- 不同 branch 的檔案都是獨立的,不會改到彼此

- branch 可以互相合併(但今天不會講,看講師要不要寫講     義)

為什麼需要不同 branch?

-  A 計畫跟 B 計畫

- 跟別人合作時,如果都改同一個 branch 很容易衝突

創建 Branch

-  這行指令會以當前的 branch 為基礎創一個新的 branch      叫 main

- 如果你什麼設定都沒改,repo 的預設 branch 會是 master

git branch main

切換 Branch

-  這行指令會把 Branch 切到 main

- 如果 main 這條 Branch 不存在就會報錯,要先創出來

git checkout main

列出所有 Branch

-  這行指令會列出所有 Branch

git branch --list

GitHub 教學

創 Repo

點這

創 Repo

repo 名稱

repo 要不要公開

填完按這個

創 Repo

這樣就創好了 噎

使用 Repo

- 剛剛創的 GitHub Repo 是之前提的 Remote Repo

- 要使用這個 repo 有兩種方法:clone 下來,或把它跟剛剛     創的 Local Repo 連結(以下講第二種方法)

git remote add origin 你倉庫的連結

- 在 repo 首頁按 Code 會看到一串 git@ 開頭的東西,那個就   是倉庫連結

- 這串指令的意思是替 repo 加一個名字叫 origin 的節點

- 節點可以有不只一個

把檔案丟上去 GitHub Repo

- 這串指令會把 master 這個分支推上 origin 這個節點

- 再去看 GitHub Repo 應該就會有東西惹

git push -u origin master

GitHub Pages

這啥

- 這 GitHub 爸爸提供的免費網站託管服務

- 你可以把寫好的 HTML CSS JS 檔案丟上去,GitHub 就會幫    你放到網路上

- 限制看這邊,不過這些限制幾乎等於沒有

- 有些人會拿來架 Blog (例如講師)

  或是皮卡丘打排球

  只要是純靜態的網站都能丟

- 五條體生成器

教學

1. 在你剛剛傳上去的 repo 下創一個 index.html,檔案內容隨便打一串字

2. git add index.html ,然後 commit

3. push 到 GitHub

4. 打開你創的 Repo,到 settings 找 pages

5. 把 branch 設成有 index.html 的那個 branch

6. 打開 https://你的帳號名稱.github.io/Repo 名稱/ 就能看到了!

2024 建北電資上學期資安小社[2]——Git & GitHub

By Aaron Wu

2024 建北電資上學期資安小社[2]——Git & GitHub

  • 191