Command Line & Git & GitHub


Posted by chihyu on 2021-01-24

CLI (Command Line Tool)

相對於 GUI 用視窗的方式去操控電腦,CLI 透過文字對電腦下指令來操控(一個指令其實就是一個程式)
為甚麼會需要 CLI:因為有很多時候會需要用 CLI,ex. 操控遠端主機、讓程式跑起來、操控 Git

環境設置

下載:Git 官網
在 git bash 使用 command line 指令

基本指令

pwd:print working directory 印出所在位置
ls:list 印出資料夾下所有檔案
cd:change directory 切換資料夾 ex. cd + 資料夾名稱,跳到該資料夾、 cd ..,跳到上一層資料夾
man:manual 使用說明書
clear:清空

touch + 檔名:建立檔案或更改檔案時間
rm + 檔名:remove 刪除檔案
mkdir + 資料夾名:make directory 建資料夾
rmdir + 資料夾名:remove directory 刪除資料夾
mv + 檔名 + 資料夾名/自訂名稱:move 移動檔案到資料夾下/改變檔名
cp (-r) + 檔名 + 自訂檔名:copy 複製檔案(名稱為自訂檔名);加 -r 是複製資料夾

vim + 檔名:進入檔案的文字編輯器,:q - 跳出,:wq - 存檔跳出
cat + 檔名:印出檔案內容

grep + 字:抓出關鍵字 ex. grep o (抓出含有 O 的地方)
wget + 網址:下載檔案
curl + 網址:送出 request,會回傳 response
一些內容 + > + 檔名:把內容覆蓋到檔案(原檔案內容會全部被覆蓋)
一些內容 + >> + 檔名:把內容新增到檔案(原檔案內容部會被覆蓋)

Git

可以做版本控制的程式
下載:Git 官網

自己做版本控制

  • 需要新的版本:檔案更改過後,就新建一個資料夾(一個資料夾代表一個版本),把檔案放進去資料夾,舊資料夾(舊版本)保有原始檔案,新資料夾(新版本)包含所有舊資料夾中沒被更改的檔案跟更改過的的檔案
  • 不想進行版本控制:檔案不要放到資料夾
  • 避免版本名稱重複:資料夾(版本)用亂數命名
  • 用一個專門的資料夾管理資料夾(版本)建立的順序
  • 用一個專門的資料夾來管理最新建立的資料夾(版本)

Git 指令

git init:告訴 git 要做版本控制 (幫你建立一個 .git 的資料夾在裡面做版本控制)
git status:查看版本控制的狀態(分支、commit 的狀態)
git add + 檔名:把檔案加入版本控制(staged 區域),所有檔案都要加入的話後面接 "." ex. git add .
git rm --cached + 檔名:把檔案移出版本控制
git commit -m + "敘述" :新建版本,m 是 message
git commit -am + "敘述": git commit -m 的功能,把所有(a:all)檔案建立版本
git log:查看歷史紀錄 (commit 的編號、內容),後接 --oneline 可以看比較簡短的紀錄
git checkout + 版本名稱:切換到某個版本
git checkout master:切換到最新狀態(master)
.gitignore:用來放不加入版本控制的地方(放一些跟專案比較無關的東西或有帳號密碼之類的訊息)

git commit --amend:修改 commit message
git reset HEAD^--hard:取消上一個 commit,改過的東西不會被留下
git reset HEAD^--soft:取消上一個 commit,但改過的東西會被留下
git checkout -- + 檔名:在還沒 commit 的狀況下,把檔案恢復上一個樣子

實際使用 git 做版本控制

  1. 建立一個 .gitignore 的資料夾,把需要忽略的檔案放入 gitignore 這個資料夾
  2. 用 git add . 把所有新增的檔案加入版本控制,想像成所有檔案被放進一個新建的資料夾(一個資料夾一個版本)
  3. git commit -am "敘述",把所有加入版本控制 (staged) 的檔案建立版本,該版本就會有一個亂數名稱
  4. 當有新增的檔案,就重複步驟 2、3
  5. 當改過舊檔案,就重複步驟 3

branch 分支

  • 一個分支一個資料夾
  • 每個分支有自己的 commit (分支資料夾 > 版本之料夾 > 檔案)
  • 分支合併到主線,主線就會有分支的 commit

git branch -v:查看有哪些分支
git branch + 分支名稱:開新分支
git branch -d + 分支名稱:刪除分支
git checkout + 分支名稱:切換到分支、把遠端的 branch 抓下來(在分支之間自由穿梭)
git merge + 分支名稱:把分支合併進來
git branch -m + 新的分支名稱:修改分支名稱

CONFLICT:衝突,兩個分支的檔案改到同一個地方後合併會產生衝突,因為不知道要採用哪個,手動解決要留下來的部分後再 commit,就可解決衝突

GitHub

放 git repository (.git 資料夾) 的地方

其他類似 GitHub 的東西:GitLab、Bitbucket

連結本地端的 repository 跟 GitHub 的 repository

  1. 點選畫面右上角 " + ",選 New repository,新增 repository

  1. 輸入 Repository name, 按 Create repository,就會建立一個 repostory 在 GitHub 上面

  2. 會出現一個畫面,依照指示在自己的 git bash 下指令(直接複製就來用可以了)

  • or create a new repository on the command line:
    如果自己的電腦還沒有建立 git repository 時
  • or push an existing repository from the command line
    如果自己電腦已經有建立 git repository 時

  1. 照指示執行之後,就已經把本地端 (自己電腦) 的 repository 跟遠端(GitHub) 的 repository 連結在一起了

把 GitHub 的 repository 跟本地端的 repository 同步

git push origin + 分支名稱:把本地端的東西推到 GitHub 上
EX.
git push origin master 把 master 的東西同步到 GitHub
git push origin branch1 把 branch1 的東西同步到 GitHub 上 (如果 GitHub 上面沒有 branch1 就會自動新增)

把本地端的 repository 跟 GitHub 的 repository 同步

git pull origin master:把 GitHub 的東西同步到本地端

把別人在 GitHub 的 repository 抓下來

  1. 點選 Fork,把別人這個 repository 複製到自己的帳號(這樣才能把別人的 repository 變成自己的)
  2. 點選 Code,把網址複製起來

  1. git clone + 剛剛複製的網址,就可以把別人的 repository 抓到本地端

在 GitHub 合併分支

  1. 點選 Compare and pull request
  2. 輸入一些資訊後點選 Create pull request,就可以看到改動前跟改動後的差異
  3. 點選 Merge pull request,就可以把分支的東西合併到 master

實際應用 GitHub 連動

假設在 master 更改了檔案:

  1. 建立版本:git commit -am "更新某某"
  2. 同步:git push origin master,把本地端 master 的變動同步到 GitHub 上

假設在分支(ex. branch1)更改了檔案:

  1. 建立版本:git commit -am "更新某某"
  2. 同步:git push origin branch1,把本地端 branch1 的變動同步到 GitHub 上

假設在 GitHub 更改了檔案:

  1. 同步:git pull origin master,把 GitHub 的變動同步到本地端

GitHub Pages

GitHub 提供的網頁空間

  1. 點選 Setting
  2. 往下滑找到 GitHub Pages
  3. 選擇 master,點選 Save
  4. 產生一組網址,在後面加上檔案位置就可以看到檔案頁面

Git Hook

Hook:發生某件事時通知我


#Web #Git #Github #command line







Related Posts

從 React 原始碼看 keyPress 與 keyDown 事件

從 React 原始碼看 keyPress 與 keyDown 事件

筆記、[BE201] 後端中階:Express

筆記、[BE201] 後端中階:Express

ClearDB id 連續遞增問題

ClearDB id 連續遞增問題


Comments