iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
Software Development

從零開始將作品整理成GitHub履歷系列 第 27 篇

Day27|同步 GitHub 專案:實作 Git clone、fetch、pull

  • 分享至 

  • xImage
  •  

昨天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

1. 準備 Clone 專案

首先我們需要將原本的專案資料夾切換到Downloads在這裡模擬另一台電腦並從 GitHub Clone 專案。

git clone https://github.com/Jie0512/eyes-prj.git eyes-prj-clone

eyes-prj-clone 是我們指定的新資料夾名稱。
執行成功後Git就會將GitHub 上的專案複製到Downloads,然後建立一個 eyes-prj-clone 的資料夾。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158moIO3HsU3Y.png

接著切換到新專案用 git status 查看目前的狀態:
https://ithelp.ithome.com.tw/upload/images/20261011/20178158EYKOjVTPWZ.png
這個eyes-prj-clone目前位於 master 分支而且工作目錄是乾淨的,所以我們已經成功複製 GitHub 上的專案了。
也可以用`git remote -v來確認這Clone下來的專案,有沒有連接到原本的 GitHub Repository。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158127U9Y9ZwD.png
這樣我們的第一步:git clone 就完成了!

2. 建立練習分支

情境說明

那在開始操作之前,我們先設定一下今天的模擬情境。
這次會使用兩份專案,分別模擬兩台不同的電腦:

  • 原本的 eyes_prj是模擬同學的電腦,負責修改檔案然後將更新 Push 到 GitHub。
  • 剛剛 Clone 的 eyes-prj-clone是模擬自己的電腦,用來練習 git fetch 和 git pull,將同學的修改同步回來。
    然後為了避免影響正式的 master 分支,所以我想說另外建立一個 sync-practice 分支,專門用來做這次的同步練習。

建立分支

首先在 eyes-prj-clone 裡輸入:

git switch -c sync-practice

並將新建立的sync-practice分支push到GitHub。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158aBr7QCpJ9C.png
這裡的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 上對應的遠端分支。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158wX8lUJBaXe.png
但這次的 git fetch並不是我們實作同步專案的,只是因為要模擬兩台電腦需要同一個分支所以先做的環境設定。

模擬同學修改專案

現在我們已經切換到原本eyes_prj的sync-practice 分支,接下來就來扮演同學修改專案吧!
先新增一個 sync-demo.txt模擬修改專案,然後在檔案中輸入:

GitHub 同步練習
修改者:同學
專案狀態:已更新

儲存檔案後使用 git add 和 git commit 記錄這次修改,最後將修改 Push 到 GitHub這樣就完成了模擬同學修改專案的部分!
https://ithelp.ithome.com.tw/upload/images/20261011/20178158iedzSRYyqf.png

3. 實作 git fetch:查看遠端更新

接下來就要切換回 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。

https://ithelp.ithome.com.tw/upload/images/20261011/20178158JwkV8hiDvp.png

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 之前先查看同學修改了哪些內容了。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158nC0HhShqlM.png

4. 實作 git pull:將更新同步到本機

剛剛透過 git fetch 取得遠端更新再用 git diff 確認同學修改了哪些內容。
所以現在已經知道同學新增了 sync-demo.txt,接下來就可以使用 git pull將這筆更新同步到自己的電腦了。

首先在 eyes-prj-clone 輸入:

git pull origin sync-practice

https://ithelp.ithome.com.tw/upload/images/20261011/20178158TSiwPc9kDe.png
這裡的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 編碼讀取檔案避免中文出現亂碼。
https://ithelp.ithome.com.tw/upload/images/20261011/20178158Upd79kIfjs.png
那麼今天的 git clone、git fetch 和 git pull 實作就全部完成了!


上一篇
Day26|如何同步 GitHub 專案? Git clone、fetch、pull
下一篇
Day 28|GitHub Pull Request:提出合併請求與 Code Review
系列文
從零開始將作品整理成GitHub履歷 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言