git

簡介 Git

Edit: 2012-01-30 新增4圖, p.s.

隨著 Drupal 放棄 CVS 而使用 Git 之後,
作為一個 Drupal developer, 你便需要使用 Git 了

如果你之前有看過的的 SVN 教學的話,
你便會發覺 CVS 和 SVN 很類似
而這次我也會使用很多 SVN/CVS 的詞彙令大家更容易過渡到 Git

Git 是一種分散式的代碼管理系統 (DCVS)
相比 SVN/CVS, 各種操作都可以單機完成, 最後再上交到一個或者多個伺服器
具體的分別有:


1. 你可以在沒有網路的情況之下, 例如在飛機上, commit 代碼
在 SVN 的年代, 如果你要在沒有網路的地方開發的話, 你便不可以 commit
需要一次性在網路再開的時候將全部修改都放到一個 commit
違反 "一個 commit 修改一個功能" 的原則
變相令 merge 更困難
在 Git 上便沒有這個問題,
你可以 commit, 直到有網路的時候, 將積壓的多個 commit 一次再提交到網路上分享

2. 你還可以沒有網路的情況下開 branch, merge branch
同樣等到有網路的時候, 將commit 連同 branch 的資料一次提交
所以你的本機已經有整個 repo 的全部資料
可以斷線之下 checkout 舊 code, 開發另一個 branch 等等


3. 本機的 repo 需要 push 到遠端的 repo
99% 的專案你都需要和其他人一起開發
你需要用網路同步大家的 repo, 而網路上的 repo 稱為 remote
將 local 的 repo 傳送到 remote 的動作稱為 push
相反則為 pull

所以開發的流程是 pull -> commit -> commit -> ... -> push

p.s. 從圖中你還可以看到更多 git 的特性, 例如
git pull 和 push 是將 commit tree 全部複製一次
git 的 filesystem 使用連結處理內容完全相同的檔案
每一部電腦都有完整的, 每一個版本的檔案

什麼是 Drush

Drush 是一個面向開發者的工具/模組
它是一個使用命令行的工具, 可以說是 Drupal 的遇萬用工具刀

先談一下命令行
$ drush dl views
以上的代碼, $ 是命令行的開始drush dl views 是開發者輸入的部份
*nix 或者 Mac 可以使用原生命令行
Windows 內: "開始" -> "執行" -> 輸入 "cmd" 便會打開命令行

入正題, 例子 $ drush dl views
一句命令便可以將 views 模組從 drupal.org 下載, 解壓到 sites/all/modules
$ drush dl zen 下載, 解壓到 sites/all/themes
$ drush en views 便可以啟用 views
$ drush cc 清除緩存

還有很多很多方便的功能:
$ drush sql-cli 進入 MYSQL 命令行
$ drush user-login 建立一條一次性的登入網址連結
還有 features 模組的各種更新, 輸出命令
等等等等, 都是進階使用者的最強武器!

p.s. 最近才發覺我一直沒有介紹入門的 Drush 應用...

伸延閱讀: Windows 內安裝 Drush

2011年 2月 25日 Drupal.org Git migration 和 Windows 下的 Git 教學

萬眾祈待, Drupal.org Git 上線了! DEMO: http://drupalcode.org/project/tabbed_block.git

教學: Windows 下使用 Git (只有最基本的功能, 慢慢再增加進階功能)

  1. 安裝 Git 客戶端

  2. 字裝完成後, 程式集便會新增兩個程式:
    • Git Bash - 命令行, 但這個教學會一直使用這個命令行
    • Git GUI - 圖形化介面
  3. Drupal.org 登入
  4. User -> Profile -> Edit -> Git access , 打勾
  5. (可選) User -> Profile -> SSH Keys
  6. 打開 Git Bash, 需要使用 Linux 命令, 例如 ls, cd, c 槽路徑為 /c
  7. 給 Git 你的名字和電郵:
    $ git config --global user.name "joetsuihk"
    $ git config --global user.email "joetsuihk@gmail.com"
    $ git config -l ##這個命令可以返回你的機器的 Git 設定

    如需要多於一個電郵, 身份, 參考 http://drupal.org/node/1018118
  8. 準備從 drupalcode.org 提出專案代碼, 先到適當路徑
    $ cd /d/xampp/htdocs/drupal6/sites/all/modules/
  9. 提出專案代碼 (只需要提出一次)
    $ git clone --branch master joetsuihk@git.drupal.org:project/tabbed_block.git ##提出的是 master/HEAD,
    #填 drupal.org 的密碼

    疑難排解: http://drupal.org/node/1065850
  10. 然後你可以修改你的代碼
  11. 本地提交
    $ git status ##查詢狀態
    $ git add -A ##新增檔案
    $ git commit -m "Issue #[issue number]: [Short summary of the change]." ##提交

  12. 留意, 這次的提交是不會交到 Drupalcode.org 的, 是本地提交
  13. 再提交到 Drupalcode.org
    $ git push origin master

結語

  1. 每一次的本地提交都會反映到 drupalcode.org, 例如本地提交兩次再提交到 drupalcode.org, 會顯示有兩個提交而非一個
  2. Git 是 DVCS. 分散式版本管理系統. Drupal.org 上的人不接受你的修改的話, 你仍然可以使用同一個 Git 管理你自己的修改, 又同時將 drupalcode.org 上其他人的修改帶回自己的代碼, CVS 做不到
  3. 分支更簡單, 更快速. drupal.org 上的每一個 issue 都有自己的分支, 方便管理issues 之間的衝突

請訂閱我 blog 的 RSS, 會繼續更新其他進階的 git, 包括使用 SSH Keys

[Contribution to Doc] Generate SSH keys (Windows/msysgit)

http://drupal.org/node/1066762/revisions/view/1363182/1365204

Log:
1. as of 2011-02-22, msysgit Git-1.7.4-preview20110204.exe use /u instead of /c/Doc...
2. change of location "Add a public key"
3. After 28 Feb 2011, Git migration, the location of "Add a public key" changes again

2010-07-12 JQuery UI combobox

jquery ui 是一個方便的 jquery 擴充庫,
Drupal 中最常用的就一定是 datepicker 了
免去了很多麻煩的日期選擇器
而且用法很多, 兩個一組的, "未來"限定的等等

而另一個很好用, 但不常用的就是一個 autocomplete 的擴充, combo box
它可以是單選 <select> 的完美替代品,
它包含一個 textfield 和一個button
在 textfield 輸入的時候就會將 <select> 內的相關選項以 autocomplete 方式顯示
或者按一下 button, 全個 <select> 內的選項都會顯示
令使用者可以使用類似 <select> 的方式選取

但它有兩個 bug
1. <select> 的 <option> 的 attribute selected=selected 不會預設被選中
做就了我在 github.com 的 commit (ref3)

2. autocomplete 的值不會被更新直至 autocomplete onblur
在選了combo box 後, 直接 submit 的話, 便會發現 <select> 的值沒有被更新
直至 <select> onblur 了, 使用 firebug 令會很清楚
而 fix 便是:

<script>
    minLength: 0,
    close: function(event, ui) {
        $(this).blur();
    }
</script>

ref: http://jqueryui.com/demos/datepicker/
ref2: http://jqueryui.com/demos/autocomplete/#combobox
ref3: http://github.com/joetsuihk/jquery-ui/commit/670f8bf4a3b1783db4733269c0b...