Git 版本控制: 「You have some suspicious patch lines」

相信大家對 Git 並不陌生,這次在升級 Moztw討論區,從 3.0.5 升級到 3.0.7 p1,過程由其他 Moztw 成員升級,我在將最後程式 commit 到 github,因為兩個版本差異性很大,所以有新增多個檔案,commit 過程出現了錯誤訊息:「You have some suspicious patch lines」,這是因為 git 會檢查每行程式碼最後是否有多餘空白或者是 Tab 按鍵,為瞭解決此問題,可以去修改 .git/hooks/pre-commit,將底下程式碼:
if (s/^\+//) {
    $lineno++;
    chomp;
    if (/\s$/) {
        bad_line("trailing whitespace", $_);
    }
    if (/^\s* \t/) {
        bad_line("indent SP followed by a TAB", $_);
    }
    if (/^([<>])\1{6} |^={7}$/) {
        bad_line("unresolved merge conflict", $_);
    }
}
改成:
if (s/^\+//) {
    $lineno++;
    chomp;
#   if (/\s$/) {
#       bad_line("trailing whitespace", $_);
#   }
#   if (/^\s* \t/) {
#       bad_line("indent SP followed by a TAB", $_);
#   }
    if (/^([<>])\1{6} |^={7}$/) {
        bad_line("unresolved merge conflict", $_);
    }
}
暫時停止 git 過濾字串,等 commit 完成之後,在將其 unmask 掉。 參考網站: Git on Windows: 「You have some suspicious patch lines」

[Git] how to remove file and commit from history(如何移除 commit 歷史紀錄)

今天在 commit 程式碼到 github 網站,不小心把 Plurk 帳號密碼給 commit 上去,發生這種事情,所以趕快上網查了一下如何移除 commit 歷史紀錄: 假設我們的 commit tree 如下:
R–A–B–C–D–E–HEAD
接下來要移除 B 跟 C 的 commit tree,變成
R–A–D’–E–HEAD
有兩種方式可以移除 B & C
# detach head and move to D commit
git checkout 

# move HEAD to A, but leave the index and working tree as for D
git reset --soft 

# Redo the D commit re-using the commit message, but now on top of A
git commit -C 

# Re-apply everything from the old D onwards onto this new place 
git rebase --onto HEAD  master

# push it
git push --force
另一種方法是利用 cherry-pick 方式
git rebase --hard 
git cherry-pick 
git cherry-pick 
這會直接忽略 B 跟 C 的 history,詳細資料可以查詢 git help cherry-pick 或者是 git help rebase 參考: Git: removing selected commits from repository Git: how to remove file and commit from history Re: ! [rejected] master -> master (non-fast forward)

[FreeBSD] 簡易架設 git Server,git 使用教學

Git 是一套免費 open source 的版本控制軟體,另外還有很多套版本控制軟體,如:MercurialBazaarSubversionCVSPerforce, and Visual SourceSafe,其中 Mercurial 又是 Google Code Project Hosting 採用的版本控制系統,當然 google 也支援原本的 Subversion,Git 為現在很紅的一套版本控制 Software,底下紀錄在 FreeBSD 如何架設簡易 Git Server。 1. 利用 FreeBSD ports 安裝:
cd /usr/ports/devel/git; make install clean
2. 修改 /etc/rc.conf
git_daemon_enable="YES"
git_daemon_directory="/path/git/repo"
git_daemon_flags="--export-all --syslog --enable=receive-pack --listen=192.168.1.1"
注意 git_daemon_flags 可以加入 –verbose 參數,以方便 debug 3. 新增使用者 git
pw user add git
4. 啟動 git daemon
/usr/local/etc/rc.d/git_daemon start
您會發現多出 9418 連接埠,就是成功了 Continue reading “[FreeBSD] 簡易架設 git Server,git 使用教學”