D-Link 友訊科技工程師。喜好戶外運動、2008 年 5 月完成「跑步環島」。對於新技術跟程式碼有著強烈的偏執狂。
來了解一下 Git 的概念,搜尋找到了 jserv 大大的「我愛 Git」投影片,就來拜讀一下。喔!原來 Git 跟我過去所用的 CVS、Perforce、SVN 在架構上非常不一樣!之前我用的都是一台 Server 做 Repository,且所有的動作 (Update/Commit/Add...) 都得跟它做連線;而 Git 的 Client 本身就是 Repositiory,每次的 Commit 都是在 Local 做。問題是... 這樣的架構,該如何做到多人同時開發呢?原來 Git 的每個 Repository 都可透過 Publish / Pull Request 的動作讓其他人做 Merge。簡單來說,CVS / SVN 是以 Trunk 為主、Branch 為輔,而 Git 的主要架構就是以 Branch / Merge 為核心。
sudo apt-get install git-core
git 的中心思想就是 Branch:Branches are cheap and easy, so this is a good way to try something out。
git branch experimentalgit checkout experimentalgit branchgit checkout mastergit merge experimentalgit branch -d experimentalgit branch -D experimental假設我 josephj 新建立了一個專案(/home/josephj/www/toolbar),虎哥 laudieh 想要來幫忙我,如果在同一台 server 上,他可以這樣做 :
git clone /home/josephj/www/toolbar ~/toolbar
這樣子就會在虎哥的家目錄下建立一個 Repository,這時虎哥跟我都可以獨立作業、互不干擾:
git commit -a
虎哥跟我說他改完了,那我就可以執行下面的指令做 merge
cd ~/www/toolbar
git pull /home/laudieh/toolbar
因為經常要做 pull,所以你可以藉由 remote 來替虎哥的 repositiory 設定一個匿名
git remote add laudieh /home/laudieh/toolbar
如此我們就可以抓虎哥的 change 回來、但是不 merge
git fetch laudieh
其實這個指令會幫你建立一個 branch : laudieh/master
git log -p master..laudieh/master
檢視過後,我才會做 merge
git merge laudieh/master
我也可以直接從遠端做 merge
git pull . remotes/laudieh/master
之後虎哥可以抓我 merge 後的版本(虎哥不需要指定路徑,因為當初在 clone 的時候便已經記錄了! git config --get remote.origin.url)
git pull
其實虎哥那邊也會偷偷開一個 branch 叫 origin/master (可以用下列指令觀看)
git branch -r
如果非本機的情況,也可以使用 ssh:
git clone josephj.com:/home/josephj/www/toolbar toolbar
小的 project 或 Team work 只要用 priviate repository 做互相 sync (pull) 即可,但是大的 project 需要有一個獨立的共用 repository。工作流程一樣,但多了不定時的 push changes:
工作流程一樣,但多了不定時的 push changes
現在都利用google在當SVN server
看來改天可以試試看這套了