Git v2.9.0 釋出

台灣時間  6 / 14 號早上8點左右釋出的新版本,官方 Windows 的 binary release 在中午為止看起來都還停留在 v2.8.4,Mac 甚至還停留在 v2.8.1,而 FreeBSD 的 ports 目前也還沒看到更新,但如果是 Ubuntu 或是基於 Ubuntu 的 GNU/Linux 發行版,只要透過官方的 PPA 就可以直接升上去了。(可以參考 Ubuntu 上的 PPA 整理)

除了每次版本更新都必備的修 bug 以外,這次沒看到明顯跟效能提升有關的更新,背後實作的部份太瑣碎就先不琢磨,列舉依些對使用上有直接影響的更新:

  • Shell 的 auto-completion 更新
    (就是你打命令要按 tab 把剩下字補完的功能)

    • 目前看起來還是缺不少指令,不過有更新總比沒有好 …
  • git rebase -x 現在不需要加 -i 參數就可以直接使用了
    • (rebase 的時候針對每個 commit 跑測試的功能)
    • 省下了一些瑣碎的步驟/時間,畢竟不是每個人都需要 interactive 的互動操作
    • 之前的版本不加 -i 就會不讓你跑,然後出現錯誤訊息:
      • The --exec option must be used with the --interactive option
  • 可以自行指定 hooks 的位置
    (將一些事件和行為進行連結達到自動化的功能)

    • 先前都是放在 .git/hooks,可以指定之後應該某些專案就可以共用 hooks 了,或許可能就會有人性質相同專案會用到的 hooks 也可以打包成專案釋出?複雜一點的話就是偵測專案性質用比較 general 的方式跑簡單的檢查,syntax check / lint 之類的
  • git commit 現在會吃 verbose 的設定,就不用在命令後面加參數了
    (顯示更詳細的資訊輸出)

  • git clone 現在可以直接 shallow clone submodule 了
    (clone 的時候不要 clone 整個改版歷史,可以有效減少空間跟頻寬消耗跟提升速度)
  • git diff / log 預設啟用自動偵測檔名變更
    (區別 “檔名變更” 和 “刪除一個舊檔案再寫一個新檔案” 的不同)

    • 可以透過設定來停用
  • 預設禁止沒有共同祖先的分支合併
    • 可以避免一些錯誤的操作
  • git log 的 commit message 縮排預設用 4 個 spaces 來展開 tab
    • 不知道是不是我沒讀懂或哪邊有問題,目前看起來還是8個空白的長度
    • 可以透過參數來取消這功能

繼續閱讀

cdnjs git repositories visualization using gource

Gource is a famous version control visualization tool, supports git, svn, hgbzr and cvs2cl, I tried to use gource to visualize the CDNJS development history, and here are the videos I uploaded to youtube.

CDNJS main repository:
(https://github.com/cdnjs/cdnjs)

CDNJS new-website repository:
(https://github.com/cdnjs/new-website)

繼續閱讀

自行架設的 BitBucket server 在 git push 遇到 RPC failed 的問題

先說 … 我個人覺得 BitBucket 不是很好用,尤其是自己架設 … 很多眉角、小問題要處理

這次的環境是 BitBucket + nginx (reverse proxy) + git https access 會遇到的問題 (基本上是版本無關)

症狀長這樣:

$ git push origin master
Counting objects: 4372, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (138/138), done.
error: RPC failed; result=22, HTTP code = 413
Writing objects: 100% (147/147), 1.10 MiB | 0 bytes/s, done.
Total 147 (delta 75), reused 0 (delta 0)
fatal: The remote end hung up unexpectedly

從 http 413 的解釋 Request Entity Too Large 可以看出來是 request 太大了,我猜是 git 的 objects pack 吧

解法是調整 nginx 的 client_max_body_size,預設值是 1M,我們可以把他改為更大的值,或是改為 0 來停用大小檢查

例如:

server {
#…
client_max_body_size 1000m;
#…
}

改完之後重新啟動 nginx 就沒問題了!

我範例是把 size 調到 1000m ,因為 cdnjs 的 objects pack 已經長到 900MB 了,如果你沒有一個特別肥大臃腫的 git reposiroty,我想應該1000m已經夠用了,剛剛把linux kernel 拉下來看,objects pack 也大概是 1GB左右而已

至於要用 nginx 來做 reverse proxy 的原因,主要是 Bitbucket 安裝完後 Tomcat 預設沒辦法 bind 在 1024 以下的 port ,加上他的 https 很難設定,為了拿到 A+ 確保https 安全強度,這段還是讓 nginx 來做比較簡單一點,也許之後有空會想辦法把 static file 讓 proxy 來做 cache 提升一些速度。

What have we done in cdnjs in last year (2015)?

Merry Christmas and Happy New Year!

Thanks all the users, developers and the contributors! We did a lot of things in 2015, though there are still many issues that waiting to be solved, we’ll keep working on it, at the end of year 2015 and the beginning of year 2016, let’s have a fast review of the changes and rising in cdnjs during 2015!

cdnjs_2015_merry_christmas_and_happy_new_year

  • We now got more than 3.3k stars and about 2.5k forks on GitHub
  • We had 9339 commits in the beginning of 2014, became more than 10k commits since Feburary, and now about 18200 commits
    • 8892 commits were committed in last year!
  • We have more than 1000 contributors in 2015! (Sorry that I don’t remember the contributors count at the beginning of last year)
  • We had only 1220 libraries hosted on cdnjs, but 1669 libraries been hosted now!
    • 449 new libraries added in 2015!

(PS: Above data only calculated the cdnjs main repository, we have some other repos here)

繼續閱讀

Detele the ‘ghost’ branch reference to prevent wrong git tab-completion

If you deleted a branch, even on all the remotes, but your git tab-completion still gives you the ghost branch, try to delete that branch reference by yourself, it may be in .git/packed-refs and .git/info/refs, in these two files, each reference will use one line, just delete the ghost branch here and git tab-completion will be good again!