昨天Day 26 已經介紹了 git clone、git fetch 和git pull,所以今天就接著實際操作吧!
今天我們會另外複製一份專案模擬在不同電腦上進行 GitHub 同步,避免影響原本的 eyes_prj。
GitHub 正式專案
eyes-prj / master
↓
git clone
複製一份專案,模擬第二台電腦
↓
建立 sync-practice 分支
避免影響正式的 master
↓
在原本專案新增檔案並 Push
模擬同學更新 GitHub
↓
git fetch
取得遠端更新資訊
↓
git diff
查看同學修改了什麼
↓
git pull
將更新整合到本機 sync-practice
首先我們需要將原本的專案資料夾切換到Downloads在這裡模擬另一台電腦並從 GitHub Clone 專案。
git clone https://github.com/Jie0512/eyes-prj.git eyes-prj-clone
eyes-prj-clone 是我們指定的新資料夾名稱。
執行成功後Git就會將GitHub 上的專案複製到Downloads,然後建立一個 eyes-prj-clone 的資料夾。
接著切換到新專案用 git status 查看目前的狀態:
這個eyes-prj-clone目前位於 master 分支而且工作目錄是乾淨的,所以我們已經成功複製 GitHub 上的專案了。
也可以用`git remote -v來確認這Clone下來的專案,有沒有連接到原本的 GitHub Repository。
這樣我們的第一步:git clone 就完成了!
那在開始操作之前,我們先設定一下今天的模擬情境。
這次會使用兩份專案,分別模擬兩台不同的電腦:
首先在 eyes-prj-clone 裡輸入:
git switch -c sync-practice
並將新建立的sync-practice分支push到GitHub。
這裡的sync-practice -> sync-practice代表我們已經成功將新分支Push 到 GitHub。
branch 'sync-practice' set up to track 'origin/sync-practice'也表示設定好遠端追蹤分支了。
但因為剛剛建立的 sync-practice 是新的遠端分支,所以原本的專案eyes_prj還不知道有這個分支,所以我們需要切換到eyes_prj 資料夾輸入:
git fetch origin
來取得 GitHub 上最新的分支資訊。
接著輸入:
git switch --track origin/sync-practice
就會在原本的專案建立並切換到 sync-practice 分支,同時追蹤 GitHub 上對應的遠端分支。
但這次的 git fetch並不是我們實作同步專案的,只是因為要模擬兩台電腦需要同一個分支所以先做的環境設定。
現在我們已經切換到原本eyes_prj的sync-practice 分支,接下來就來扮演同學修改專案吧!
先新增一個 sync-demo.txt模擬修改專案,然後在檔案中輸入:
GitHub 同步練習
修改者:同學
專案狀態:已更新
儲存檔案後使用 git add 和 git commit 記錄這次修改,最後將修改 Push 到 GitHub這樣就完成了模擬同學修改專案的部分!
接下來就要切換回 eyes-prj-clone實做看看如何透過 git fetch 查看同學的更新,再使用 git pull 將修改同步到自己的電腦。
首先我先切換回 eyes-prj-clone 資料夾,接著輸入:
git fetch origin
0fb5430..a4075ba sync-practice -> origin/sync-practice這裡的意思是Git 已經取得 GitHub 上最新的Commit 資訊了,也更新本機的遠端追蹤分支 origin/sync-practice。

Your branch is behind 'origin/sync-practice' by 1 commit, and can be fast-forwarded.
目前本機的狀態可以看到:
這裡的behind by 1 commit 表示本機的 sync-practice 比遠端少了一筆 Commit。
can be fast-forwarded 表示這筆更新可以直接透過 Fast-forward 合併。
是因為git fetch 只會取得遠端更新並不會直接修改目前本機分支的檔案,所以本機的分支還是停留在舊版本。
但上面這個本機狀態只能看到遠端多了一筆 Commit,但還是不知道同學到底修改了什麼,所以可以用:
git diff HEAD origin/sync-practice
這個指令會比較目前本機的版本 HEAD還有剛剛 Fetch 下來的遠端版本 origin/sync-practice。
執行後就能在還沒 Pull 之前先查看同學修改了哪些內容了。
剛剛透過 git fetch 取得遠端更新再用 git diff 確認同學修改了哪些內容。
所以現在已經知道同學新增了 sync-demo.txt,接下來就可以使用 git pull將這筆更新同步到自己的電腦了。
首先在 eyes-prj-clone 輸入:
git pull origin sync-practice

這裡的Fast-forward 說明了因為這次本機沒有其他修改,只是比遠端少了一筆 Commit,所以Git 使用快轉合併的方式,直接將本機分支更新到遠端的最新 Commit。
sync-demo.txt | 3 +++ 是說這次同步新增了 sync-demo.txt,裡面包含三行內容。
最後我們可以直接打開 sync-demo.txt,確認剛剛的修改是否真的同步成功。
也可以用 PowerShell 指令直接查看檔案內容:
Get-Content .\sync-demo.txt -Encoding UTF8
-Encoding UTF8 是為了指定使用 UTF-8 編碼讀取檔案避免中文出現亂碼。
那麼今天的 git clone、git fetch 和 git pull 實作就全部完成了!