What have you found for these years?

2009-02-19

git submodule

...好久沒更新 0rz index, 週末更新時應該會哭出來吧。
真奇怪,為什麼不寫個程式自動更新咧... 懶得動腦吧 -_-b

呃,where to start...

現在困擾的問題是,線上環境跟測試環境是分開的。
所以沒辦法有一個 central git repository, e.g. github.

先不談 submodule 的部份,開發流程就變成從測試環境上 pull/push,
要更新線上時再從我的電腦上 push 進去。

現在有一個 project 是要給兩個 project 共享的,
於是用 submodule 吃進去。原本我是想弄成相對路徑,
例如 file://../api
這樣不管在哪個環境都能從各自的 repository 拉出來。

測試半天,git clone 之類的是可以設相對路徑,
但是 submodule 似乎就是不行。而指定路徑的話,
線上跟測試的路徑又不同... 因為兩者不共通啊。

苦思一陣子後,決定還是妥協了。於是:

> git submodule add ssh://192.168.0.1/home/api api

這樣能夠在 api 底下 clone 該 api repository,
並產生 .gitmodules, 說明 api 應指向 192.168.0.1/home/api,
也一併寫入 HEAD 應該指向哪個 commit.

然而其實我真正想要的其實是 partial repository...
並不是整個都需要,像是我不需要 test code.
不過查來查去發覺好像沒辦法?只好變成整個吃下來,
再設 symbolic link 做成我想要的合併模式。

> git push

上傳之後,遠端 repository 並不會自動幫你 clone module.
需要到該處跑:

> git submodule update

這樣才會從剛才指定的位置 clone 一份過來。不過這邊還需要
稍微修改一下路徑,因為其實測試機上並不用 ssh, 直接 local 即可。

> vim api/.git/config

修改 origin, 改成 local file 路徑。

> git submodule update

或是

> cd api; git pull

然後需要更新這個 module 時,就進去 git pull,
此時 .gitmodule 會偵測到 module 有修改,

> git add api
> git commit

這樣就能把 module 裡的 HEAD 指到新的 commit 上。

唉,參考這篇吧:
Git submodules in N easy steps
http://johnleach.co.uk/words/archives/2008/10/12/323/

試試看這樣跑起來如何。開發流程真的很難搞 -_-b

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0