聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

四月 28, 2016

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Git Flow 與團隊合作

branching-illustration@2x 本月最後一篇投影片來介紹 Git Flow 流程該如何導入團隊,之前寫過一篇 Git branch model 文章,裡面提到該如何正確使用 branch,但是現在回想起來要導入團隊內真的是有點麻煩,也遇到蠻多問題的,後來最後只採用 Github Flow,簡單又容易理解,如果開發者很常在 Github 活動,相信對於此方法並不會很陌生。

投影片大綱

Git flow 與團隊合作 from Bo-Yi Wu

七月 4, 2015

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» git tips 找尋遺失的 commit 紀錄

github-logo

個人每天常用的常用的三大 Git 指令分別是 git reset, git pull, git rebase,但是呢有時候手殘,常常把 git reset --soft 打成 git reset --hard 造成不可預期的錯誤,朋友圈內也有人常常問我該如何救不見的 commit,其實很容易,git 對於每隔操作後產生的 commit 都會存放在 Local 端,所以基本上不用擔心 commit 記錄會不見,有一種狀況會永遠消失,那就是假設尚未 commit 目前修正過的檔案,然後下 git reset --hard HEAD,這樣的話我想誰都無法幫忙把已修正過的檔案找回來了,原因是連 git 都不知道你改了什麼啊。所以為了避免這情況方生,個人建議開發者,只要開發到一定的階段,務必要下一個 commit 當作記錄,但是你會說,這樣功能開發完後,就會有很多個 commit 非常不好看,這時候可以嘗試 git rebase 將整個功能合併成一個 commit,這樣其他開發者 review 時就會非常清楚。

現在的問題是如果開發者不小心下了 git reset --hard HEAD^,上一個 commit 就會消失了,這時候該如何救回來呢?答案可以使用 git reflog 指令然觀看開發者全部 git 的操作記錄,裡面詳細記載你曾經下過的 git 指令

$ git reflog
794be8b HEAD@{0}: reset: moving to HEAD^
5e2be6f HEAD@{1}: commit (amend): update
bfa593c HEAD@{2}: cherry-pick: update
794be8b HEAD@{3}: reset: moving to 649c658
794be8b HEAD@{4}: reset: moving to HEAD^
649c658 HEAD@{5}: commit: update
794be8b HEAD@{6}: commit (initial): addd

上面可以看到之前 commit 的記錄,接著可以透過 git reset --hard xxxxx,或者是用 git cherry-pick xxxxx 將上一個 commit ID 記錄抓回來即可。

四月 11, 2015

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Git Flow and JavaScript Coding Style

github-logo

Git 已經是每日必備使用的指令,在平常工作上常常使用到 git rebasegit merge,發現很多工程師不知道什麼時候該用 rebase 什麼時候該用 merge,所以做了底下投影片來清楚描述 git rebase 及 merge 的優缺點及使用時機。

Git Flow and JavaScript Coding Style from Bo-Yi Wu

此投影片最主要的目的是要讓工程師善用 git rebase 而不是濫用 git merge,無意義的 merge 會讓整個分支線看起來非常亂,以我在 github 跟其他 open source project 上面 review 看到的問題,只要是 PR 內有任何衝突,一律會請開發者 rebase 主分支,並進行 squash commit,所以對我而言,開發新功能或解 bug 會用到的都是 git rebase,幾乎很少的情況會使用到 git merge。附上兩個比較的線圖,清爽度看起來就是有所不同。

git merge

git_merge

git rebase

git_rebase

如上圖比較發現如果自行開發的 branch 常用 git merge 方式合併主分支,就會多出很多無意義的分支。投影片最後討論到 JavaScript Coding Style 問題,相信在團隊合作之間,務必要制定 Coding Style 規範,透過 JSCS 來制定,而常用的 JSCS Rule 可以在 node-jscs 找到像是 Google jQuery Grunt Airbnb .. 等規範,而我個人比較推崇 Airbnb JavaScript Style Guide,因為新進人員可以快速看完整個 Style Guide 文件,非常完整,團隊可以不用再額外寫任何範例,只要針對文件增加或減少條件即可。

八月 18, 2013

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Git rebase + stash 小技巧

每天打開電腦,第一件事情就是將專案程式碼更新的最新,以便整合同事新開發的功能,免的跟自己寫的功能衝突,所以最常用用的就是 git pull –rebase origin master,此命令使用 rebase 來取代 merge 程式碼,也可以避免在 log 清單內出現 merge branch master into master 等字樣,但是如果在開發一半進度時,想同時將同事的程式碼先 merge 進來,會發現無法 merge,git 會請你先將 local 修改過的檔案 commit,才可以讓您更新,所以這時候我們可以用 git stash 方式來解決

如果你在 master 分支上,並且想 pull 最新的 commit,可以透過底下指令步驟

$ git stash --include-untracked
$ git pull --rebase origin master
$ git stash pop
# fix conflict (merge)


此方式一樣最後需要解決衝突,解決完成,可以將 stash 清空,透過再次執行 git stash pop,或 git stash drop 就可以了,但是這樣有點麻煩,可以不要使用 git stash 也達成這效果嘛?底下是更好的方式

$ git add .
$ git commit -m 'push to stash'
$ git pull --rebase origin master
# fix conflict (rebase)
$ git reset HEAD~1

基本上原理很簡單,我們先將 local 檔案 commit 到 local,接著一樣執行 pull –rebase 將遠端 commit 拉下來,接著執行 git reset HEAD~1 就是刪除最後一個 commit 但是保留最後 commit 修改的內容。

support:

biggo.com.tw

biggo.sg

A Django site.