版本 f71bb6dc8f1a25654b506a64e148254d4e049381
Git
簡介
關於 git 的簡介可參考 Wikipedia: Git<http://zh.wikipedia.org/wiki/Git>
_
檔案在git的旅程
.. image:: /git_file_status.PNG
- untracked:檔案一開始都在這個狀態。
- unmodified:經由指令將
untracked
的檔案加入追蹤,或是,staged
狀態的檔案經由commit,會到這個狀態。另外在這狀態的檔案可以藉由指令來取消追蹤。 - modified:檔案只要有改變就會到這個狀態,無論是在
unmodified
或是staged
狀態。藉由指令可以放棄這些變更,回到之前的狀態。 - staged:在這個狀態的檔案,通常就是要準備要提交到新的版本中了。在此狀態的檔案一經過更改就會回到
modified
狀態。
安裝
在 Ubuntu/Debian 上,sudo apt-get install git-core
簡單操作
初始化
使用 git init
可在目前的目錄下初始化一個 git repository。
若需要建立一個沒有工作目錄 (working directory) 的 repository,可以使用 git init --bare
來初始化,所建立的 repository 僅有 git 容器內容,通常用於 repository server。
將檔案加入追蹤
在工作目錄 (working directory) 下,git 不會自動追蹤新建立的檔案,必須透過 git add
指令先將檔案納入容器索引 (index) 才能 commit 進版本庫中。
在一個新的版本庫中新增一個檔案,並使用 git status
查看版本庫狀態。Git 會提示發現新的檔案,但是不會自動列入追蹤。
.. code-block:: prettyprint
$ echo "Hellow World" > new.txt
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# new.txt
nothing added to commit but untracked files present (use "git add" to track)
使用 git add
將檔案列入追蹤後,git 會顯示檔案預計在下一次提交時送出。
.. code-block:: prettyprint
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: new.txt
#
git add
指令後方除了檔名之外,也可以使用目錄名稱或是萬用字元當作輸入:
git add .
:將目前所在目錄下的所有檔案 (包含子目錄) 加入追蹤。git add *.c
:將所有以「.c」結尾的檔案 (不包含子目錄) 加入追蹤。git add -p
:將目前所在目錄下的所有檔案的更改之處逐一顯示出來,並讓使用者確認是否要加入追蹤。
commit
**commit的觀念**:在完成一個功能或是修改一個功能後就commit,並且這次commit的程式碼是要能夠正常運行的。
如果一次commit多個功能,對於版本追蹤會有不好的影響,使用者會無法明確的知道是從哪一部份開始出錯。
輸入git commit
之後
會有一個編輯介面供使用者輸入commit message
或直接輸入 git commit -m 'New function or something modified'
要注意的是使用單引號包住commit message而非雙引號
查看目前狀態
git status
會列出目前尚未追蹤、有改變、移除或更名等檔案的狀態,同時會有提示告訴你,
該下什麼指令來作到什麼事。
像是status這類常用的指令,可以善用熱建設定。git config --global alias.st status
,這個熱建設定指令,
往後藉由輸入git st
來達到與git status
相同的效果。
查看 log
git log
可以加上參數增加其他資訊
如
git log --graph
為 branch 畫圖
git log --all
列出所有 branch 等
log 中通常會包含 commit 編號、作者、日期和 log 內容等紀錄。
若暫不需詳細資訊,可以使用 --oneline
將每個 commit log 縮短至一行。
參考資料
http://git-scm.com/doc
http://blog.longwin.com.tw/2009/05/git-learn-initial-command-2009/