Tag Archives: git

用 git log 的 -S 與 -G 找變更記錄

符合 blog 副標題的一篇文章。

之前是拿 BBS 看板來存動畫的記錄,不過自從跑在 FreeBSD 32bits 上的 BBS code 一直沒辦法轉移到 Ubuntu 64bits,就放棄用 BBS 看板管動畫記錄了...

現在是拿 Git 來存動畫記錄,後來發現內建的 git log 搜尋起來比 BBS 方便太多,就回不去了...

以「魔法戰爭」來說:

$ git log -S '魔法戰爭' --pretty=%h | xargs -n1 git show
commit 9a6af4ec77561777b854a7ea44da29e197a9dcc2
Author: Gea-Suan Lin <gslin@gslin.org>
Date:   Mon Apr 7 00:55:49 2014 +0800

    Update.

diff --git a/Anime.txt b/Anime.txt
index 080f94a..cd21e14 100644
--- a/Anime.txt
+++ b/Anime.txt
@@ -42,4 +42,3 @@ Z/X IGNITION                            e01
 銀之匙 Silver Spoon 第二季              e04
 鬼燈的冷徹                              e05
 魔女的使命                              e04
-魔法戰爭                                e11
commit 856a27ab4071fb19ca58de3725cdedf53815894b
Author: Gea-Suan Lin <darkkiller@gmail.com>
Date:   Mon Feb 10 04:46:57 2014 +0800

    Update.

diff --git a/Anime.txt b/Anime.txt
index ddb11ea..e5995eb 100644
--- a/Anime.txt
+++ b/Anime.txt
@@ -22,3 +22,4 @@ WIZARD BARRISTERS~弁魔士賽希爾         e01
 偽戀                                    e02
 天才麻將少女 全國篇                     e05
 鬼燈的冷徹                              e05
+魔法戰爭                                e04

-S 只會列出「出現」與「消失」的時候,而且 -S 後面接的是 string 而非 regex。

如果要找所有與「魔法戰爭」相關的變更,則改用 git log -G,要注意的是後面接的是 regex:

 $ git log -G '魔法戰爭' --pretty=%h | xargs -n1 git show

Git 超好用的... XD

把 Git commit 切開

在「Split a commit in two with Git」這邊看到有趣的方法:

git rebase -i <oldsha1>
# mark the expected commit as `edit` (replace pick in front of the line), save a close
git reset HEAD^
git add ...
git commit -m "First part"
git add ...
git commit -m "Second part"
git rebase --continue

squash 是把多個 commit 合起來,這個方法是拆開。還沒有 push 出去,需要整理時應該會用到...

Percona 將自家產品程式碼也放一份到 GitHub 上...

前幾天提到 Percona 把 Oracle MySQL tree 放一份到 GitHub 上:「Percona 提供的 MySQL Git Mirror...」。

現在 Percona 自家產品的程式碼也放上去了:「Experimental GIT Mirrors of Percona XtraBackup, Percona Server plus Oracle MySQL trees」。

包含了:

目前開發都還是在 Launchpad 上,這邊只是 mirror...

Percona 提供的 MySQL Git Mirror...

MySQL 的開發者是用 Bazaar (bzr) 為版本控制系統,放在 Launchpad 上,不過 open source 領域目前總是有人會想要轉到 Git 上... XD

Percona 提供 Oracle MySQL 的 Git mirror,目前是實驗性質:「Experimental Git mirror of Oracle MySQL trees」。

如果只是要拉 MySQL source tree 下來看 (而且手上只有 Git,沒有裝 Bazaar 的人),可以透過這份拉出來... 還不確定更新的頻率 :o

從 pathogen.vim 換成 Vundle...

pathogen.vimgit submodule 用到有點煩了... 改用 Vundle 避開 pathogen.vim 使用 git submodule 帶來的維護問題...

Vundle 的安裝方法很簡單 (網路上其實也有不少說明了),先 clone 或是 submodule add 下來:

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
$ git submodule add https://github.com/gmarik/vundle.git .vim/bundle/vundle

然後在 .vimrc 內加入:

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
Bundle '其他的 github 位置...'
filetype plugin indent on

接下來開 vim,跑 :BundleInstall 他就會自己安裝其他的套件了。要增加套件就加到 .vimrc 內再跑一次 :BundleInstall 就可以了。

PostgreSQL 對 security update 的極端作法...

Hacker News 文摘上看到,PostgreSQL 決定對這次的 security update 採取最極端的作法:「Extra security measures for next week's releases」。

包括全面管制 Git repository 公開資訊:官方的 Git repository 將會在正式釋出修正前限制只有 committer 可以存取,並且暫停 GitHub 以及其他 git mirror 權限。

另外 mailing list 也受到管制,包括了 src commit log 以及 document commit log。

信件開頭就提到這次安全性漏洞足以說服 PostgreSQL 的人採取最極端的作法,避免在有修正方案前造成漏洞洩漏出來被使用:

The core committee has decided that one of the security issues due to be fixed next week is sufficiently bad that we need to take extra measures to prevent it from becoming public before packages containing the fix are available. (This is a scenario we've discussed before, but never had to actually implement.)

不過這反而讓人更關注,甚至上了 Hacker News 熱門榜...

把 GitHub 上的 pull request 對應到 Git branch...

昨天看 Hacker News 的文摘看到的:「Checkout github pull requests locally」。

方法是對 remote "origin" 加上 fetch = +refs/pull/*/head:refs/remotes/origin/pr/*,這樣就會把 pull request 拉下來...

下面的 comment 也有不少討論可以看...

各種 credential 儲存的方式 (像是連到資料庫的密碼)

John Resig (現在在 Khan Academy) 在月初的時候發表了「Keeping Passwords in Source Control」討論要怎麼儲存 credential。

這不只是開發者的問題而已,這跟 code deploy 機制也很有關。目前沒有完美的方案,不同的解法都是在不同的環境與限制下而誕生出的產物。