iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Software Development

深入一點點認識 Git系列 第 7

Day 7-深入一點點認識 Git:上層瓷器指令複習(與遠端倉儲互動)

  • 分享至 

  • xImage
  •  

使用 git 進行版本控管的一個好處是可以進行多人協作,團隊程式碼被放在如 GitHub、GitLab 之類的遠端空間,每位成員的裝置都可以把自己的版本「推」上去,或者把團隊最新的版本「拉」下來。

本篇文章將快速複習把本地檔案「推」上去、以及把遠端檔案「拉」下來的流程。

把本地檔案推上遠端

先在本地端一個經 git init 初始化的資料夾建立立一個名為 file.txt 的檔案,內容為 "Initial content"

echo "Hello World" > hello_world.txt

把這個檔案加進預存區:

git add hello_world.txt

再形成一個 commit:

git commit -m "Initial commit"

透過 git log 檢查,確認現在在本地端已經有一個 commit:

https://ithelp.ithome.com.tw/upload/images/20250907/20178513Z35QHjROnl.png

建立遠端倉儲

以 GitHub 為例,找到右上角(下圖紅色箭頭處)可以點選「New Repository」的按鍵:

https://ithelp.ithome.com.tw/upload/images/20250907/20178513gW1VQX7Ask.png

此時 GitHub 會跳出新倉儲的設定頁面,包含:

  1. 倉儲名稱(下圖中橘色箭頭處,我這裡的空格待倉儲真正建立後,會用短線 - 取代)
  2. 設定檔(我只把可見度由「公開」改為「私人」,其餘維持預設,如下途中綠色箭頭處)

這些都設定好之後,就可以點擊下圖中藍色箭頭處的「Create repository」按鈕,建立一個 GitHub 遠端倉儲。

https://ithelp.ithome.com.tw/upload/images/20250907/20178513KXMkiBWTlC.png

建立好的倉儲頁面如下:

https://ithelp.ithome.com.tw/upload/images/20250907/20178513oCvAGjb1Uz.png

依照遠端倉儲中的提示,我們可以用下列指令,在本地倉儲把遠端倉儲網址 https://github.com/ruifuhong/Day-7.git 命名為 origin,這樣之後要對這個倉儲推拉,都不用再輸一遍網址(但記得裡面的 ruifuhong 要改成自己的 GitHub 帳號名稱):

git remote add origin https://github.com/ruifuhong/Day-7.git

這時再下 git push 指令如下:

git push origin main

我們就成功把本地端的 commit 推到遠端倉儲了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513khm9m4SrHY.png

把剛剛的遠端倉儲頁面重新整理,就可以看到原本在本地端的 commit(下圖黃色箭頭處)連同與該 commit 相關的檔案(下圖灰色箭頭處),都被推上去了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513QMh1XSnpxJ.png

把遠端版本拉到本地端

現在只要對這個遠端倉儲有存取權限的人,都可以看到當中的 commit 及檔案,也可以把檔案拉到自己的本地端。

要拉到的本地端有兩種情況,一是還沒有這個資料夾、二是已經有這個資料夾。

本地端還沒有資料夾

使用的指令是 git clone,後面加上遠端倉儲網址:

git clone https://github.com/ruifuhong/Day-7

整包遠端倉儲就被克隆下來了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513DUBIRv2twS.png

資料夾名稱就是遠端倉儲名稱 Day-7,遠端倉儲的檔案也都被拉到本地端:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513x4d994KoEd.png

本地端已經有資料夾

如果本地端已經有個資料夾,可以放要被拉下來的檔案(不一定要跟遠端倉儲名稱相同),則使用 git pull 指令。

現在我們在本地端做一個新的 git 資料夾,裡面沒有剛剛的檔案,例如我剛剛在 code/ 資料夾,經過 cd .. 跳出之後再用以下指令做出名為 copy/ 資料夾:

mkdir copy

接著進入 copy/ 資料夾:

cd copy

這是一個新的資料夾,因此要操作 git 功能也要初始化:

git init

我們就可以把剛剛遠端倉儲的檔案拉下來了!不過因為在這個資料夾裡沒有設定 origin,下 git pull 指令把檔案拉下來時,要把遠端倉儲完整網址輸入:

git pull https://github.com/ruifuhong/Day-7.git

這樣就拉下來了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513DI0UYNOyL7.png

輸入 ls 或直接打開資料夾都可發現,原本在 code/ 資料夾有的東西,在新建的 copy/ 資料夾也能看到:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513FCtVwv7i7I.png

這邊我們是拉到一個全新的 git 倉儲,但在一般來說,會在本地端有舊版本專案時才會使用 git pull,把遠端最新版本「同步(sync)」到本地端,如下個段落組員 A 下 git pull 的時間點。

模擬協作

假設剛剛 code/ 資料夾屬於組員 A、copy/ 資料夾屬於組員 B,組員 B 也可以在自己的本地端開發,之後推上遠端給組員 A 去拉。

例如組員 B 在本地端以下列指令開名為 feature 的分支:

git branch feature

接著切換到 feature 分支上:

git switch feature

在上面建立一個空的文字檔 feature.txt

touch feature.txt

把這個新建的 feature.txt 放到組員 B 本地倉儲的預存區:

git add feature.txt

再放到組員 B 的本地倉儲,形成 commit:

git commit -m "Add feature file"

再用 git push 推到同一個遠端倉儲,只是在 /code 這裡沒有設定 origin,所以要輸入完整遠端倉儲網址:

git push https://github.com/ruifuhong/Day-7

新增的 featureB 分支與 feature.txt 檔案就被推上去了:

https://ithelp.ithome.com.tw/upload/images/20250907/201785137VES4QOv3q.png

在遠端倉儲頁面也可以看到相關提示:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513xUJjsccYyb.png

假設組員 B 或團隊任何一人想要把 feature 分支可以合併進 main 分支,就可以直接在遠端倉儲中,點擊上圖黃框處最右邊的綠色按鈕發 PR(pull request),來到以下頁面:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513OmElEKbezW.png

在上圖輸入關於這個 PR 的標題與說明後,點擊右下角的綠色「Create pull request」發起合併請求:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513EPkaQroCC1.png

組長或任何有權限的人可以檢視這個 PR 的人,可以在上面給予回饋,接著決定選「Close pull request」把這個 PR 關掉,或者點「Merge pull request」許可這個合併,合併的話會新生成一個 commit(可以想成把 git merge 拉到遠端來做)。

現在假設我們允許合併,點選「Merge pull request」按鈕後跑出以下畫面,要我們輸入 commit 訊息:
https://ithelp.ithome.com.tw/upload/images/20250907/201785130s62hkVwiZ.png

我們直接使用預設的 commit 訊息,就點「Confirm merge」,我們就成功在遠端把 feature 分支合併進 main 分支了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513RF8t7v2M5O.png

如果此時組員 A 在本地的倉儲輸入 git pull 指令(因為有設定 origin,所以不用複製完整遠端倉儲網址):

git pull origin main

這樣就把剛剛合併完的分支都拉下來了:
https://ithelp.ithome.com.tw/upload/images/20250907/20178513zSwIktLRin.png

因為遠端已經把 feature 分支合併進 main 分支,因此 git pull 之後「看起來」只會拿到 main 分支。

複習資源

以上是模擬與遠端倉儲互動、以及與其他人協作的流程,如果對當中的操作仍不熟悉,可參考高見龍老師的下列文章複習:

  1. Git教學:如何 Push 上傳到 GitHub?
  2. Pull 下載更新
  3. 【常見問題】Clone 跟 Pull 指令有什麼不一樣?
  4. 與其它開發者的互動 - 使用 Pull Request(PR)

往後我們將基於這些基礎,仔細觀察每個輸入指令後,git 裡面發生的事情。

小結

以上層瓷器指令與遠端倉儲互動時,常用的指令包含:

  1. git push:把本地端倉儲推到如 GitHub、GitLab 之類的遠端倉儲。
  2. git clone:本地端還沒有此倉儲任何內容時,把整包克隆下來。
  3. git pull:本地端已有倉儲時,可透過此指令,把本地版本更新到與遠端同步。
  4. 發 PR:PR 全名為 pull request,可想成是在遠端做 git merge,過程中,團隊成員可檢視 PR 內容,決定是否允許合併,也可以給予回饋。

參考資料

  1. git-push
  2. git clone
  3. git pull
  4. Pull requests documentation

上一篇
Day 6-深入一點點認識 Git:上層瓷器指令複習(本地端分支管理)
下一篇
Day 8-深入一點點認識 Git:打完 git init 指令後,發生了什麼事?
系列文
深入一點點認識 Git8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言