iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 11
1
自我挑戰組

全端工程師的日常挑戰三十日系列 第 11

Local Git Remote SVN(本機使用 Git,版控 Server 使用 SVN)

  • 分享至 

  • xImage
  •  

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

一. 從 svn 取得 source code

使用指令

git svn clone {svn_repository_url} {資料夾名稱}
  1. 沒有指定 資料夾名稱--> 預設使用專案名稱當作資料夾名稱
    git svn clone https://svnserver/svn/TestGitSvn

會建立專案名稱資料夾,並將 source code 下載至 專案名稱資料夾中
gitsvn1

  1. 指定 資料夾名稱
    svn clone https://svnserver/svn/TestGitSvn/ test

會建立test資料夾,並將 source code 下載至 test
gitsvn2

使用 TortoiseGit

  1. git-clone

資料夾空白處,按右鍵 --> Git Clone
gitclone1

  1. from svn

gitclone2

  • 2-1. URL

    SVN url

  • 2-2. Directory

    目標目錄

  • 2-3. From SVN Repository

    表示從 SVN 下載,相關下載屬性也在這個區塊設定

大型專案

檔案數較多或是 Commit 數量較多的專案

1. 使用指令

使用 -r HEAD , 只取得最新版
git svn clone -r HEAD {svn_repository_url} {資料夾名稱}

如果中間發生斷線,可以試試git svn fetch

2. 使用 TortoiseGit
  • 指定 From

無法像指令指定 HEAD,就挑最後一版
tgit_from
tgit_from_done

  • git SVN Fetch

git_svn_fetch

二. 新增 feature branch

建立 feature branch,僅在本機作業,不會影響 SVN

使用指令

git checkout -b {branchbname}

-b 會先建立 {branchname} 同時並切換過去,效果等同於下列兩句

  1. git branch {branchbname}
  2. git checkout {branchbname}

使用 TortoiseGit

  1. 在欲建立 branch 的資料夾上按右鍵 --> TortoiseGit--> Create Branch

createbranch

  1. branch 相關屬性

createbranch1

  • 2-1. Name

    填入 branch name

  • 2-2. Base On

    新分支的來源,預設以目前工作分支,也可以選擇其他分支

  • 2-3. Switch to new branch

    建立分支後,直接將工作目錄,切換過去

三. Git Commit

  • 在本機將變更留下紀錄,其他人不會看到變更,SVN 也沒有這個變更
  • 養成留下版本變更的習慣,也不會讓團隊其他人拿到修改中的版本

使用指令

git commit -a -m 'something'
  • -a 是將新增的檔案也納入 commit 範圍,等同於 git add .
  • -m 'something', 是在 commit 時直接給註解

使用 TortoiseGit

  1. 欲 commit 位置的資料夾 按右鍵 --> Git Commit -> "branchname"...

gitcommit

  1. Commit

gitcommit2

  • 2-1. Message

    commit 的註解

  • 2-2. trick Not Versioned Files

    挑選要加入版控的新增檔案

四. merge 到 git svn

  • 修改已經完成,將 commit merge 到一開始下載的 repository 中,準備儲存到 svn
  • merge 指的是將特定 commit 合併至目前工作目錄分支,所以要留意目前工作目錄的位置

使用指令

  1. 切換到一開始建立 git repository 的 branch (預設 master)

git checkout master

  1. 合併分支(merge)

git merge branchbname

使用 TortoiseGit

  1. 切換到一開始建立 git repository 的 branch (預設 master)
    1-1. git show log

    在資料夾按右鍵,選 Git Show Log
    gitlog

    1-2. 在 master 上,按右鍵 --> Switch/Checkout to "master"

    checkoutmaster
    checkouted

  2. 合併分支(merge)

    • 2-1. 在欲合併的分支上按右鍵
    • 2-2. 點選Merge to "master"...

    mergeto

    • 2-3. option

      可以直接使用預設即可
      mergeoption
      mergedone

五. push 至 SVN

將本機 Git 的變更,存進 SVN

使用指令

  1. 更新版本

git svn rebase

  1. commit 至 SVN

git svn dcommit

使用 TortoiseGit

GITSVN

  1. 資料夾右鍵
  2. 點選 TortoiseGit
  3. 點選 SVN DCommit...

預設會執行Git SVN Rebase 進行更新
committype
commited

合併多個 git commit,一次儲存到 SVN

合併多次版本變更,讓 SVN 紀錄相對好閱讀

使用指令

  1. Rebase

    • git rebase -i HEAD~3
    • HEAD~3 指最近三個 commit
  2. 合併 (squash)

    • 要留下的用 p or pick
    • 要合併的用 s or squash
    • 改完,直接按:wq 存檔離開

使用 TortoiseGit

  1. Git SVN Rebase
    1-1. 資料夾 --> 右鍵 --> TortoiseGit --> Git Rebase

    git_rebase

    1-2. 選擇 Squash ALL --> Start Rebase

    Squash

    1-3. Commit --> DONE

    REBASECOMMIT
    rebasedone

  2. Combine to one commit
    2-1. git show log

    在資料夾按右鍵,選 Git Show Log
    gitlog

    2-2. 選擇欲合併的 commit --> 按右鍵 -->Combine to one commit

    combine2one

    2-3. 修改訊息 --> commit

    combine2one_commit

六. 刪除 featur branch

featur branch 不需推送到 SVN,feature 完成後就可以刪除

使用指令

git branch -d {branchname}

使用 TortoiseGit

  1. merge 後會提示刪除

removebranch

  1. branch 管理
    2-1. 資料夾右鍵 --> TortoiseGit --> Switch/Checkout..

    switchcheckout

    2-2. 選擇其他 branch

    otherbranch

    2-3. DELETE

    delete

參考資料

  1. git-svn
  2. 使用 git-svn 工具管理 SVN 專案
  3. 我的 git-svn 用法
  4. git 與 git-svn 簡單教學

上一篇
在 ASP.NET MVC 5 預設專案範本中透過 ASP.NET Identity 由 Email 改用 Username 登入
下一篇
試著看懂 SQL Server IO 統計資訊
系列文
全端工程師的日常挑戰三十日31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言