2010年12月9日 星期四

git 同時開發範例

一開始有aaa與bbb目錄

git-test/
|-- aaa
`-- bbb


A用aaa當作程式放置的目錄, 先對他做初始化

cd git-test/aaa
git init


複製以前寫的某一隻程式至此目錄

git-test/
|-- aaa
| |-- main
| `-- main.c
`-- bbb


加入此目錄所有檔案給git管理

git add .

第一次commit

git commit
(之後可以輸入這次commit的註解)

發現有一個檔案是編譯出來的二進位檔, 不需要追蹤這個檔案

git rm main
git-test/
|-- aaa
| `-- main.c
`-- bbb

要習慣做完一個階段之後就commit

git commit -a

假設臨時需要用到之前被砍掉的main, 可以切換回去過去的狀態

先用git log看要回去的那次commit的編號
commit 93056170a2f98563ba13f1b4679a73655a64c2fb
Author: chihying
Date: Tue Feb 23 20:29:55 2010 +0800

remove output files


commit 3ecb40595863e67b5b6f5ea06b8e75dfcad85848

Author: chihying
Date: Tue Feb 23 20:28:26 2010 +0800

first add all files

切換回去一開始那次的commit, 整個資料夾就回復了

git checkout 3ecb40595863e67b5b6f5ea06b8e75dfcad85848

git-test/
|-- aaa
| |-- main
| `-- main.c
`-- bbb

新增了一個Makefile


git-test/
|-- aaa
| |-- Makefile
| `-- main.c
`-- bbb

加入管理git add Makefile

git commit


若目前有另外一個人B也要一起開發這個程式, 他的工作目錄在bbb

cd git-test/bbb
git clone [aaa的路徑]

這樣在B就也有一份程式了

bbb
`-- aaa
|-- Makefile
`-- main.c


假設目前A有對程式做修改,B想取得最新的更動

git pull

B要做一些修改, 先開一個branch

git branch B_modify
可用git branch查看
B_modify
* master

切換branch
git checkout B_modify
* B_modify
master

A B都修改/commit了一些東西之後,B要把他在B_modify的修改merge回去

先跳回master
git branch master
從aaa抓最新的修改
git pull ../../aaa
把B_modify的修改合併到master上面
git merge B_master
把更新上傳至aaa
git push

2010年12月5日 星期日

找尋程式中使用哪些define的flag做判斷

一般程式會在編譯時定義一些flag來決定是否啟動某功能的支援,
而在程式內的實作會使用ifdef XXX來判斷,

可以用以下的script找出所有用ifdef判斷的flag,
來確認所需的功能是否在編譯時有加入

1. 搜尋所有ifdef
2. 取得第二個欄位的資料
3. 排序(刪去重複)


grep -rns ifdef * | awk '{FS=" "} {print $2}' | sort -u