在 GitHub 建立儲存庫
建立沒有 commit 的空白 Git 儲存庫
- 切換到 Repositories 頁面
- 點選 New
- 不要勾選nitialize this repository with: 的 Add a README file ,Add .gitignore 、 Choose a license 都選擇 None
- 跟隨教學指令操作
建立有初始化版本的 Git 儲存庫
- 切換到 Repositories 頁面
- 點選 New
- 勾選nitialize this repository with: 的 Add a README file
與遠端儲存庫互動指令
- git clone
將遠端儲存庫複製到本地,並建立工作目錄與本地儲存庫(.git資料夾) - git pull
將遠端儲存庫的最新版下載回來(透過 refspec 的定義,找來源參照規格的那些遠端分支,取回後放入目的參照規格的那些本地追蹤分支 (在不特別加參數的情況下,Git 默認情況下都是使用當origin生成最終存儲庫時,並使用origin的引用規格。)),下載內容包含完整的物件儲存庫( object storage ) (如同 git fetch ) 。並且將遠端分支合併到本地分支 (如同 git merge origin/master ,將 origin/master 遠端分之合併到 master 本地分支))。
用例 : git pull origin master - git remote
註冊遠端儲存庫(加入一個「最後儲存庫」)。可以註冊多個,不過很少這樣用,除非你想抓其他團隊成員的版本庫回來看內容。執行 git remote -v 會列出註冊在工作目錄裡的遠端儲存庫資訊。
比如 : - git remote add origin https://github.com/...
(這個 origin 名稱是在 Git 版本控管中慣用的預設遠端分支的參照名稱,主要目的是用來代表一個遠端儲存庫的 URL 位址。) - git remote add jquery https://github.com/...
這些註冊進工作目錄的外部存儲庫設置信息,都存儲在
.git\config
設置檔中(可以用記事本打開修改),其內容示例如下:[remote "origin"]
url = https://github.com/doggy8088/sandbox-empty2.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "jquery"]
url = https://github.com/jquery/jquery.git
fetch = +refs/heads/*:refs/remotes/jquery/*
這個[remote "origin"]
決定的設定,名稱包含了最終存儲庫的代表origin
,還有兩個重要的參數,分別是url
與fetch
這兩個,所代表的意思是:「最終存儲庫 URL 位址在https://github.com/doggy8088/sandbox-empty2.git
,然後fetch
所指定的一個參照名稱對應規格(refspec)。」
- git push
將本地儲存庫目前分支所有相關物件推送到遠端儲存庫中。默認參考引用 : push = +refs/heads/*:refs/heads/* - git ls-remote 或 git lis-remote origin
查詢端點儲存庫有哪些分支
參照名稱對應規格 (refspec)
+refs/heads/*:refs/remotes/origin/* 大略可以分為四區塊,如下 :
- +
設定 +加號,代表傳輸資料時,不會特別使用安全性確認機制。 - refs/heads/*
「來源參照規格」,代表一個位於遠端儲存庫的遠端分支,而 * 星號代表 refs/heads/ 這個路徑下「所有的遠端參照」。 - :
用來區隔「來源分支」與「目的分支」 - refs/remotes/origin/*
「目的參照規格」,代表一個位於本地儲存庫的本地追蹤分支,而 * 星號代表工作目錄的 refs/remotes/origin/ 這個路徑下「所有的本地參照」。
設定僅下載遠端儲存庫部分分支
如果你把 fetch 的 refspec 修改成以下這樣,那麼除了master
以外的終點分支,就不會被下載了!:
fetch = +refs/heads/master:refs/remotes/origin/master
如果你想明確下載特定的幾個分支就好,你可以重複定義幾個不同的fetch
引用規格(refspec),例如:
[remote "origin"]
url = https://github.com/doggy8088/sandbox-empty2.git
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/TestBranch:refs/remotes/origin/TestBranch
設定「本地分支」與「最終存儲庫」之間的默認情況
以在執行 git push 時,自動將分支 push 到遠端儲存庫。
🔎為什麼需要?
👀 因為預設只會建立 master (或 main) 與 遠端儲存庫之間的關係 (詳見.git\config
設定檔),只會將 master 分支 push 上去。若想將比如 branch1 push 上去,需要輸入 git push origin branch1 這樣完整的指令。
🎯解決方式 :
在git push的時候加上--set-upstream參數,即可將本地分支註冊進.git\config設定檔,之後再用就git push可以順利的自動進行上去。實例如下 :
執行git push --set-upstream origin FixForCRLF
的同時,會在.git\config
設定檔增加以下內容:
[branch "FixForCRLF"]
remote = origin
merge = refs/heads/FixForCRLF
多人在同一個終端儲存庫中進行版本控制
如果 push 的時候,origin/master 沒有得到終端儲存庫的最新版本,就會失敗。解決方法如下: 先透過 git fetch 取回終端資料庫中的最新版本,然後使用 git merge origin/master 合併回自己的 master 本地分支 (上述兩個指令可以使用 git pull 代替) (若發生衝突就解決衝突),然後再用 git push 進終端儲存庫。
如果你今天發生了衝突狀況,平衡不知道如何解決,因為版本尚未被成功合併,所以你可以執行以下指令「重置」到目前的版本HEAD:git reset --hard HEAD
如果你今天成功的合併了,但又想反悔這次的合併動作,那麼你還是可以執行以下指令「重置」到合併前的版本狀態,否則重置到ORIG_HEAD這個版本:git reset --hard ORIG_HEAD
常見的分支名子
- 建立 Git 儲存庫時,默認會有的 master 分支 : 做為系統的穩定版本。
- 趨於穩定版本會,可以給它一個標記標籤。比如 : git tag 1.0.0-beta1 -a -m "V1.0.0-beta1 created"。
- 從 master 建立 develop 分支 : 做為開發分支,大家一起使用。
- 從 develop建立 feature/[branch_name] 分支 : 自己開發新功能用。
- 從 master 建立 hotfix/[branch_name] 分支 : 正式機率(生產環境)出現問題時,緊急修 bug 用。
將分支送上遠端儲存庫與取回
上傳 :
- git push --all
- git push --tag : 將標註標籤實例到初始儲存庫(遠端儲存庫)。
取回:
- git fetch --all --tags: 將所有對象取回,包含所有對象引用與標籤引用。
取回分支後進行開發
應該將本地追蹤分支視為唯讀,不過 Git 有其他方法。
如被指派 hotfix/bugs_in_membership分支進行修復任務,可以執行git checkout hotfix/bugs_in_membership ,Git 會自動創建一個同名本地分支,如下圖。然後你就可以在該分支提交新版本,最後 git push origin hotfix/bugs_in_membership 。
GitHub的fork與pull request版控流程
權限管控
個人帳號 :
只能設定合作者,合作者可以自由 push 、 pull 專案原始碼。
組織帳戶:
可設定不同人員全組,設定他們:
- 僅拉(唯讀)
- 推&拉 (引人注目可寫)
- 推送、拉取和管理(搶可寫以及專案管理權限)
fork
把別人的專案 git clone 到自己帳戶之下 (方可擁有完整權限,也不會影響原主)。像是把別人的菜叉到自己盤子裡一般。
可以在作變更後對原主發 pull request 請求合併 (請對方拉過去)。
資料來源
- https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-tw
0 comments:
張貼留言