文章目錄
Local Git Remote SVN(本機使用 Git,版控 Server 使用 SVN)
大家一定或多或少感受到 Git 愈來愈多人採用,為了不輸別人(咦?)應該是為了體會 Git 的過人之處,最好的方式就是開始使用它,但公司的版控豈是說換就換的。這邊簡單紀錄一下個人使用經驗:該如何在版控 server 仍使用 SVN 的前提下,開發人員在開發環境改用 Git 管理。
建議流程
從 SVN 取得 source code
將 source code 從 SVN 取出,並改由 Git 管理
建立 feature branch
每次修改前,都建立分支
修改 –> commit
每次修改後,就留下版本紀錄
確定完成 –> merge 到本機 git-svn repository
確認版本後,就將 feature branch merge 回一開始從 SVN 取回的 master branch 中
儲存到 SVN
dcommit(push) 到 svn
刪除 feature branch
將 feature branch 刪除,每次修改都建立 branch
1. 從 svn 取得 source code (擇一即可)
A. 使用指令
git svn clone {svn_repository_url} {資料夾名稱}
沒有指定
資料夾名稱
時,預設使用專案名稱
當作資料夾名稱git svn clone https://svnserver/svn/TestGitSvn
會建立
專案名稱
資料夾,並將 source code 下載至專案名稱
資料夾中
指定
資料夾名稱
svn clone https://svnserver/svn/TestGitSvn/ test
會建立
test
資料夾,並將 source code 下載至test
B. 使用 TortoiseGit
clone 專案
- 資料夾空白處,按右鍵 –>
Git Clone
- 資料夾空白處,按右鍵 –>
from svn
2-1. URL
SVN url
2-2. Directory
目標目錄
2-3. From SVN Repository
表示從 SVN 下載,相關下載屬性也在這個區塊設定
C. 大型專案 檔案數較多或是 Commit 數量較多的專案
使用指令
使用
-r HEAD
, 只取得最新版git svn clone -r HEAD {svn_repository_url} {資料夾名稱}
如果中間發生斷線,可以試試
git svn fetch
*
使用 TortoiseGit
指定 From
無法像指令指定
HEAD
,就挑最後一版
git SVN Fetch
2. 新增 feature branch
建立 feature branch,僅在本機作業,不會影響 SVN
A. 使用指令
git checkout -b {branchbname}
-b
會先建立{branchname}
同時並切換過去,效果等同於下列兩句git branch {branchbname}
git checkout {branchbname}
B. 使用 TortoiseGit
在欲建立 branch 的資料夾上按右鍵 –>
TortoiseGit
–>Create Branch
branch 相關屬性
2-1. Name
填入 branch name
2-2. Base On
新分支的來源,預設以目前工作分支,也可以選擇其他分支
2-3. Switch to new branch
建立分支後,直接將工作目錄,切換過去
3. Git Commit
- 在本機將變更留下紀錄,其他人不會看到變更,SVN 也沒有這個變更
- 養成留下版本變更的習慣,也不會讓團隊其他人拿到修改中的版本
A. 使用指令
git commit -a -m 'something'
-a
是將新增的檔案也納入 commit 範圍,等同於git add .
-m 'something'
, 是在 commit 時直接給註解
B. 使用 TortoiseGit
欲 commit 位置的資料夾 按右鍵 –>
Git Commit -> "branchname"...
Commit
- 2-1. Message
commit 的註解
- 2-2. trick
Not Versioned Files
挑選要加入版控的新增檔案
4. merge 到 git svn
- 修改已經完成,將 commit merge 到一開始下載的 repository 中,準備儲存到 svn
merge
指的是將特定 commit 合併至目前工作目錄分支,所以要留意目前工作目錄的位置
A. 使用指令
切換到一開始建立 git repository 的 branch (預設 master)
git checkout master
合併分支(merge)
git merge branchbname
B. 使用 TortoiseGit
切換到一開始建立 git repository 的 branch (預設 master)
1-1. git show log
在資料夾按右鍵,選
Git Show Log
1-2. 在
master
上,按右鍵 –>Switch/Checkout to "master"
合併分支(merge)
- 2-1. 在欲合併的分支上按右鍵
2-2. 點選
Merge to "master"
…2-3. option
可以直接使用預設即可
5. push 至 SVN
將本機 Git 的變更,存進 SVN,使用
dcommit
指令
A. 使用指令
更新版本
git svn rebase
dcommit 至 SVN
git svn dcommit
B. 使用 TortoiseGit
- 資料夾右鍵
- 點選
TortoiseGit
點選
SVN DCommit...
預設會執行
Git SVN Rebase
進行更新
Note: 合併多個 git commit,一次儲存到 SVN
合併多次版本變更,讓 SVN 紀錄相對好閱讀
A. 使用指令
Rebase
git rebase -i HEAD~3
HEAD~3
指最近三個 commit
合併 (squash)
- 要留下的用
p
orpick
- 要合併的用
s
orsquash
- 改完,直接按
:wq
存檔離開
- 要留下的用
B. 使用 TortoiseGit
Git SVN Rebase
1-1. 資料夾 –> 右鍵 –> TortoiseGit –> Git Rebase
1-2. 選擇
Squash ALL
–>Start Rebase
1-3. Commit –> DONE
Combine to one commit
2-1. git show log
在資料夾按右鍵,選
Git Show Log
2-2. 選擇欲合併的 commit –> 按右鍵 –>
Combine to one commit
2-3. 修改訊息 –>
commit
6. 刪除 featur branch
featur branch 不需推送到 SVN,feature 完成後就可以刪除
A. 使用指令
git branch -d {branchname}
B. 使用 TortoiseGit
merge 後會提示刪除
branch 管理
2-1. 資料夾右鍵 –>
TortoiseGit
–>Switch/Checkout..
2-2. 選擇其他 branch
2-3. DELETE
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。