使用 Subversion (SVN) 的方式來訪問 Github
你的開發團隊是否最近改用 Github 了嗎?可能團隊里部分人對使用 git 非常興奮,但另外一些熟悉 Subversion 的人卻很不爽?好消息是現在你可以通過 Git 和 Subversion (SVN) 的客戶端來訪問 Github 的資料庫。
這篇文章大概介紹了如何利用 Subversion 客戶端來更好的使用 GitHub 流程。
Github 流程中每次功能提交和bug修復都會通過以下的步驟來完成:
- 從最新的 master 分支中創建一個 topic 分支
- 在你準備好要合并時在 topic 分支中提交
- 通過 Pull Request 將 topic 分支拉到 master 分支,討論變更,更多提交等等,知道團隊準備好合并
- 合并 Pull Request 然后發布
開始
首先要做的就是 svn checkout。Git 的 clone 讓工作目錄和資源庫文件分離開來,工作目錄在一個時間只有一個分支。而 svn checkout 是不同的,它在工作目錄中混有資源庫數據,因此你 checkout 的每個分支、標簽都有相應的工作目錄。資源庫包含大量的分支和標簽,如果把所有數據都 checkout 出來非常費帶寬,你應該只檢出某部分數據。
GitHub 通過 HTTP 協議來支持 git 和 svn 的客戶端,你可以通過 HTTP clone URL 來瀏覽資源庫中的文件。
現在可以準備 checkout 了:
-
首先我們 checkout 一個資源庫,并不下載任何文件:
$ svn co --depth empty https://github.com/widgetmakers/gizmo Checked out revision 1. $ cd gizmo
-
然后獲取 trunk 分支,svn 中的 trunk 分支相當于 git 里的 HEAD 分支(通常是 master)
$ svn up trunk A trunk A trunk/README.md A trunk/gizmo.rb Updated to revision 1.
-
獲取 branches 目錄的空 checkout:
$ svn up --depth empty branches Updated to revision 1.
進入 Git 流程
首先是創建一個 topic 分支,在你的 svn 客戶端中,確保 master 是當前更新的 trunk,然后使用 svn copy 來創建分支:
$ svn up trunk At revision 1. $ svn copy trunk branches/more_awesome A branches/more_awesome $ svn commit -m 'Added more_awesome topic branch' Adding branches/more_awesome Committed revision 2.
然后你可以通過 web 界面或者 git 客戶端看到一個新的分支:
$ git fetch From https://github.com/widgetville/gizmo * [new branch] more_awesome -> origin/more_awesome
編寫一些代碼
添加一些功能,修復一些 bug,然后提交,就像你平時使用 svn 一樣:編輯文件,然后 svn commit 來提交變化。
$ svn status M gizmo.rb $ svn commit -m 'Guard against known problems' Sending more_awesome/gizmo.rb Transmitting file data . Committed revision 3. $ svn status ? test $ svn add test A test A test/gizmo_test.rb $ svn commit -m 'Test coverage for problems' Adding more_awesome/test Adding more_awesome/test/gizmo_test.rb Transmitting file data . Committed revision 4.
討論、開發、發布
當你已經準備好要將所做的改動與團隊其他人分享時,通過 web 界面來做一個 Pull Request:
-
進入 topic 分支,點擊 Pull Request 按鈕:
-
填寫描述信息
-
和團隊成員討論變更的內容,這個討論是以 Pull Request 里的評論方式進行的
-
合并 Pull Request. pull request 頁面會展示這些變化是否已經合并。你只需要點擊按鈕即可完成,如果有沖突你需要先解決。
現在你的改動已經合并到了 master 分支,你可通過 svn update 來獲取這些改動,然后開始下一階段工作。
英文原文,OSCHINA原創翻譯