1、Git 快速教程及命令
流程: 取代碼 → 每次工作前更新代碼到最新版本 → 修改代碼 → 提交代碼到服務器
1. 取代碼及修改全局設置
a. 設置用戶名與郵箱
git config --global user.name "My Name"
git config --global user.email "my@email.com"
b. 從已有的git庫中提取代碼
git clone git@server:app .git myrepo
2. 每次更改代碼的操作
a. 更新本地代碼到最新版本(需要merge才能合到本地代碼中)
git fetch
b. 合並更新后的代碼到本地
git merge
c. 更新代碼方式的另一種方法(git pull是git fetch和git merge命令的一個組合)
git pull
d. 修改代碼后,查看已修改的內容
git diff --cached
e. 將新增加文件加入到git中
git add file1 file2 file3
f. 從Git中刪除文件
git rm file1
git rm -r dir1
g. 提交修改
git commit -m 'this is memo'
如果想省掉提交之前的 git add 命令,可以直接用
git commit -a -m 'this is memo'
commit和commit -a的區別, commit -a相當於:
- 第一步:自動地add所有改動的代碼,使得所有的開發代碼都列於index file中
- 第二步:自動地刪除那些在index file中但不在工作樹中的文件
- 第三步:執行commit命令來提交
h. 提交所有修改到遠程服務器,這樣,其它團隊成員才能更新到這些修改
git push
3. 附注
遇到過的一些錯誤:
Git – fatal: Unable to create ‘/path/my_project/.git/index.lock’: File exists.
fatal: Unable to create ‘/path/my_proj/.git/index.lock’: File exists.
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
可以試着刪除 index.lock
rm -f ./.git/index.lock
2、Git commit 注釋格式
Git 本身並沒有硬性限制注釋的格式,不過,對於多人參與的項目來說, 好的注釋風格更加有利於團隊合作。 即使是自己用,也應當堅持實用好的注釋風格, 一來是對自己的工作歷史負責,二來得以養成好的注釋習慣。 雖然這里標題說的是 Git,其他源代碼控制系統也可以參考的。
可以先看看一些著名開源項目源代碼管理系統當中的提交注釋, 其中也有用 SVN 和 Bazaar 的, Apahe 的源碼看不到 logview,可能是使用了 CVS 文件格式的原因:
結合其他參考文章,我總結 Git 的 推薦 注釋風格如下:
-
第一行為對改動的簡要總結,建議長度不超過 50,用語采用命令式而非過去式。
Vim 很貼心,在默認配置下,注釋的第一行文字顏色是黃色, 超過 50 列之后就變成白色了。
-
第一行結尾不要英文的句號 . ,中文的就也不要 。 吧。
為啥?我給 rst2wp 提交的時候,對方也提出了這個要求 [1] [2] , 后來查了查,大概原因是,第一行被認為是一個“標題”,也會作為郵件標題, 而標題是不需要標點的。 上面那些開源項目也都遵守了這一規則。 不過也有 例外的 。
-
第二行為空行。
如果配置了自動發送郵件,那么第一行就用來做郵件標題, 第三行開始的內容是郵件正文, 第二行是分隔線,用於區分兩者。
-
第三行開始,是對改動的詳細介紹,可以是多行內容,建議每行長度不超過 72。
可以包括原因、做法、效果等很多內容,一切你認為與當前改動相關的。 為何是 72 長度呢?因為 git log 輸出的時候能顯示得比較好看, 前面 4 個空格作為縮進,后面留 4 個空格機動(英文按單詞排版)。 Vim 的 gq 命令排版很方便。
一些項目還對這個部分的內容有特殊要求,比如加一些特定標簽什么的。
-
建議全部英文,首字母大寫。如果一定要用中文,請盡量使用 UTF-8 編碼。
-
大項目中,可以用 module/submodule: 前綴作為第一行的開頭, 前綴首字母不必大寫。
前綴的冒號后面跟一個空格比較好看。 為了控制字符串長度,子模塊名稱可適當縮寫,但應保持統一。
我以前喜歡在注釋第一行加上 New: Add: Fix: 這樣的前綴, 看來也是沒有必要了。
Tips: 提交之前,用 git diff --check 可以檢查有無空白字符錯誤, 比如行尾留有空白什么的。
BTW,在使用 Git 或者其他 SCM 時,還應當避免下面這些做法:
-
把 SCM 當做備份工具。
SCM 是項目/代碼管理工具,備份功能只是“福利”。 隨意將未完成測試或臨時的工作結果進行提交, 不僅破壞日志的“純潔性”,還不利於日后的瀏覽、整理、匯總等工作。 在開源項目中這么做的話,沒人會接受這種提交。 如果確實需要備份當前工作異地繼續的話,可以采用這樣的折衷方法:
$ git commit # 在本地進行提交 $ git format-patch -n1 # 導出 Patch # 這個 Patch 就是你的備份 $ git am Path_To_Patch_File # 如果換了工作地點,導入 Patch $ git reset --mixed [hash] # 撤銷提交,保留更改,繼續工作
-
一個改動不一次提交完成。
“提交”的概念是具有獨立的功能、修正等作用。 小可以小到只修改一行,大可以到改動很多文件, 但划分的標准不變,一個提交就是解決一個問題的。
對格式的修正,不應該和其他功能修補一起提交, 這種情況應該考慮使用 git add --edit ,git add -p 也可以用用,更復雜和強大一些。
-
注釋不清晰。
比如只有“修正 BUG”、“改錯”、“升級”等,沒有其他內容,等於沒說。
參考
- Pro Git – 5.2 Contributing to a Project – Commit Guidelines
- A Note About Git Commit Messages
- Git Commit Messages : 50/72 Formatting
- Writing good commit messages
- How to wrap git commit comments?
- [git/git.git] / Documentation / SubmittingPatches
- Shiny new commit styles
- Who-T: On commit messages
- Commit Comments – Whamcloud Community
- How I Use Git
- http://whatthecommit.com/ (要多刷新幾次頁面,仔細看)