Github 支援 SVN Client

Github 一年前宣佈開始支援 SVN Client,不過這是必須透過 https://svn.github.com 才可以取得資料,跟一般 git 的網址不一樣,然而就在最近宣佈了同步支援 svn 也可以存取 https://github.com/,並且過不久的將來會移除 https://svn.github.com/ 網域。

URL 處理

git 方式:
$ git clone https://github.com/appleboy/PHP-CodeIgniter-Framework-Taiwan git-ds
Cloning into git-ds...
remote: Counting objects: 4177, done.
remote: Compressing objects: 100% (665/665), done.
remote: Total 4177 (delta 3544), reused 4140 (delta 3509)
Receiving objects: 100% (4177/4177), 2.65 MiB | 239 KiB/s, done.
Resolving deltas: 100% (3544/3544), done.
svn 方式:
$ svn checkout https://github.com/appleboy/PHP-CodeIgniter-Framework-Taiwan svn-ds
A    svn-ds/branches
A    svn-ds/branches/develop
A    svn-ds/branches/develop/README
A    svn-ds/branches/develop/changelog.html
A    svn-ds/branches/develop/index.html
A    svn-ds/branches/develop/license.html
.......
官網還陸續介紹了 svn 如何在 github 上面的使用,如果對 svn 熟悉的朋友們我想也不陌生了,還沒熟悉 git 之前,我想可以先用 svn 玩 github 功能。底下是 github 打算將來支援的 svn 功能
  • 支援 branch merging 和 rebasing
  • better mapping of Subversion <=> GitHub user names in commits
  • 支援 annotate/blame
  • 讓 trunk 可以對應到 git branch 除了 master 之外
參考: Improved Subversion Client Support

版本控制 svn move 移動或更名

公司採用 svn 當作版本控制,而我最近在整理 svn 上面全部的 source code。基本上我都會將 git 跟 svn 也一起搭配著用,因為個人比較熟悉 git 的操作方式,然而跟同事討論了專案目錄的架構,進而要把一些目錄轉換大小寫,本來的 App 就改成 app,這個在 git 底下(OS: Linux)操作非常容易,直接 git mv App app,之後看 git status 可以發現底下輸出:
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       renamed:    nav/hacks.txt -> Nav/hacks.txt
#       renamed:    nav/moo.fx.js -> Nav/moo.fx.js
#       renamed:    nav/moo.fx.pack.js -> Nav/moo.fx.pack.js
#       renamed:    nav/nav.js -> Nav/nav.js
#       renamed:    nav/prototype.lite.js -> Nav/prototype.lite.js
#       renamed:    nav/user_guide_menu.js -> Nav/user_guide_menu.js
#
可是在 svn 的流程不是這樣喔,首先 svn 會將原本的目錄先刪除,再來新增一個新目錄。這樣就算了,在 Windows 底下還不讓你這樣操作,請先裝 Subversion Client,然後請在”開始”->”執行” 打入 cmd,可以透過 svn mv 方式來操作
svn mv App app2
svn mv app2 app
如果裡面檔案目錄又很多的話,那就有的等了,畢竟對於 svn 而言都是在複製檔案,而不是像 git 是紀錄檔案差異。 Subversion的搬移(Move)操作

版本控制 version control git clean 使用時機

在做公司的每一個案子,我都會使用 git 來做版本控制,雖然公司只有用 svn 控管,但是只要網路掛掉,就不能做任何事情了,更不用說 svn Server 掛點,因為 git 開 branch 免錢,因此每當我拿到新案子就按照 Git 版本控制 branch model 分支模組基本介紹 開了固定幾個 branch,由於剛開始 git init 沒有把 .gitignore 寫好,所以 commit 了一堆 *.o 或者是 *.ko 類似的檔案,我用了 git rm –cached 方式砍了,結果在切換 branch 的時候出現底下錯誤訊息:
error: Untracked working tree file ‘XXXXXXXX’ would be overwritten by merge.
這是因為當你 git rm –cached 檔案之後,切換 branch 時候會遇到衝突,本來的 master 分支還是存在這些檔案阿,因此這時候就要靠 git clean 來清掉移除檔案,可以利用 git help clean 來查看使用手冊。 Ref: Force git to overwrite local files on pull.

svn 恢復略過衝突檔案 (conflict file)

當我們利用 svn up 更新程式碼,如果遇到修改相同檔案的相同地方,就會發生衝突 (conflict) 此時就必須修改或者是略過,當選擇略過此檔案就會出現底下訊息
Skipped ‘lib/logs/logDB.txt’ Skipped ‘lib/confs/Conf.php’ At revision 912. Summary of conflicts: Skipped paths: 2
之後怎麼用 svn up 更新檔案,都會因此被略過,那該怎麼恢復被略過檔案的狀態,讓它們可以繼續被更新呢?網路上找到一篇 svn local obstruction, incoming add upon merge 解法,用 svn resolve 來解決問題,只要針對該檔案打入底下指令即可
svn resolve --accept working lib/confs/Conf.php
svn resolve --accept working lib/logs/logDB.txt