設定遠端Repo
熟悉本機端 Git 指令後,拓展一點可以使用到遠端的 Git 資料夾,
就是 remote 的部分。
...Git 的遠端資料夾可以建在各式各樣只要能連進去的地方,一個指令就ok。
#先到要設成Repo的遠端資料夾底下,例如home/Dropbox/prjname $ git init --bare
這時候會產生一個沒有.git 的一堆東西,
其實就是把.git 隱藏 folder 內容直接攤在這個遠端資料夾底下,
之後 push 上來的東西也不會有實體檔案在,只是單純記錄著 push 的進度,
換句話說,pull 下來的人 pull 到的也只是進度。
設定本地Repo
要指定本地端想指給哪一個遠端 git folder,所以要先 cd 到本地端要變成 Repo 的 folder 底下,
如果這個 folder 還不是 Repo,請先一樣執行
#先到要設成Repo的本地資料夾底下,例如home/prjname $ git init
令其變成local Repo
接下來,告訴這個local Repo,他的心電感應對象是誰──
#先到要設成Repo的本地資料夾底下,例如home/prjname $ git remote add origin [home/Dropbox/prjname]
此時此刻,這個 local Repo 就知道它有了一個新的 remote,
名字叫做 origin,位置在哪個遠端位置。
origin 是 default 值,就如同 branch 的 default 值叫做 master一樣...
當然也可以指給 local Repo 多個不同的 remote 對象,origin 以外的名字就可以了。
有哪些遠端資源
最為知名的自然是 Github,免費的時候你就必須開放全部的程式碼,
有付錢給他的話就可以擁有私用的權限。
此外,我也使用 Dropbox 當作私有槽,各種此類服務都可以,
指向自己電腦上面dropbox 資料夾的位置就可以了。
還有一些 VPN,例如 heroku。
最不需要提的就是自有的 server,這應該沒有問題 XD
Push & Pull
在本地事情做完了就可以 push 上去遠端 Git
#先到要設成Repo的本地資料夾底下,例如home/prjname $ git push origin master
這代表把進度 push 到名為 origin 的遠端,master 那一支 branch。
注意──也可以push 到對應本機 branch 的遠端 branch,例如
#先到要設成Repo的本地資料夾底下,例如home/prjname $ git push origin develop
如果正 checkout 到 local 端的 develop branch 做事,
又希望 origin 同樣產生一模一樣的 branch,就可以這麼做。
那可能時間流逝,origin 的進度已經被其他工作夥伴 push 多次更改完了,
想要follow 上大家的進度就可以把進度 pull 下來
#先到要設成Repo的本地資料夾底下,例如home/prjname $ git pull origin master
怎麼這麼多種 pull 方法
clone, fetch 和 pull,同樣都是把進度抓下來,為什麼有那麼多種不同的呢?
其實事情是這樣的...
- clone
會把 remote 最新版整包下載,並建立新目錄放在裡面(所以不用 git init,也不用 branch 名) - fetch
會下載 remote 的最新版,然後放在本地的一個 branch 裡(以上例來說會放在 origin/master 的 branch 裡) - pull
會下載 remote 的某個 branch 最新版,並與目前的 branch 做合併(等同 fetch + merge)
所以說,視需求使用囉。
還沒有 push 前你都可以後悔
amend
快速修正前一次 commit 的錯誤
reset
git reset 砍掉 commit 重來,但是修改的程式還是留在 working tree。
rebase
可以從指定的版號之後,重新隨你意 commit 一次來重建 history,超威的
拜託不要隨便 push 然後...
如果只是在 local,
無論是怎麼樣 merge 和 commit 都還有機會回到上一動、上上動。
但是如果是在多人共用的 Repo 中,把爆掉的 code push 上去也就罷了,
然後直接時光倒流給他用一些 amend、 reset、 甚至 rebase...That is an actual disaster.
May 22th, 2012
shesee@Taipei
沒有留言:
張貼留言