源代碼管理工具GIT之使用
見Kernel Hackers' Guide to git (http://linux.yyz.us/git-howto.html)
準備開始
可以從以下網址下載最新穩定版本:
http://www.kernel.org/pub/software/scm/git/
下載Linux內核樹
$ git clone /
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git/ linux-2.6
注意:內核樹非常大,這會下載超過300M的壓縮數據
基本任務
更新本地內核樹到最新的2.6.x上游內核樹(快速合併)
$ cd linux-2.6
$ git pull / git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
或者更簡單地,從已克隆的本地路徑中直接拉過來:
$ cd linux-2.6
$ git pull
撤銷所有本地修改:
$ git checkout -f
簽入您的修改
# 轉到存儲庫
$ cd linux-2.6
# 做一些修改
$ vi drivers/net/sk98lin/skdim.c
# 注意: 運行 'git add' 和 'git rm' 來增加或刪除文件.
# 簽入所有修改
$ git commit -a
撤銷最近的提交:
某些時候您做了一些提交,或僅僅修改,但想消除這些提交.
$ cd my-kernel-tree-2.6
$ git reset HEAD~2 # 使最後兩個提交消失
將會使最上部的兩個提交消失. 如果有人下載了提交過的樹,但您又剛剛消除了,請不要這樣做.
注意這與git revert大不相同, git revert會應用一個恢復補丁作爲額外的提交.
以diff格式列出工作目錄所有的更改.
顯示改變從最後的'git add' 或 'git rm'開始:
$ git diff
顯示改變從最後的提交開始:
$ git diff HEAD
獲取工作目錄中所有改變的彙總
$ git status
列出所有變更集的描述
$ git log
# 'git log' 的 "-p" 選項另外還會以變更集文本的方式顯示差異. "--stat" 選項還會以變更集文本的方式顯示差異狀態.
列出特定文件的所有變更集
(這裏以爲例, net/ieee80211/ieee80211_module.c)
$ git log net/ieee80211/ieee80211_module.c
分支
列出所有分支
$ git branch
獲取想要的當前分支到工作目錄
$ git checkout $branch
創建新分支,並把它作爲當前的
$ git checkout -b my-new-branch-name master
檢查哪個分支是當前的
$ git status
('git branch'也可以顯示當前分支,使用一個"*" 來指示)
獲取當前分支與主分支的差異
在大多數有分支的樹中,.git/refs/heads/master包含了當前的上游樹,很方便用來比較和合並. (沒有分支的樹,'master' 簡單地包含您最新的更改)
$ git diff master..HEAD
(這等價於 git diff HEAD, 當與HEAD使用的時候)
獲取當前分支與主分支的變更列表
$ git log master..HEAD
(這等價於 git log, 當與HEAD使用的時候)
更或者是所有的變更描述,獲取每個變更的在線總結:
$ git shortlog master..HEAD
從一個分支合併變更到另一個
Let us suppose that you do work on branch A and branch B, and after work on those two branches is complete, you merge the work into mainline branch M.
假設您在分支 A 和 分支 B 上工作,並且兩個分支工作後都完成了,然後把兩個分支都合併到主線分支 M 上
$ git checkout M # 轉到分支 M
$ git merge A # 合併 A 到 M
$ git merge B # 合併 B 到 M
雜項(此處略,未看,Sorry)
優化存儲庫.
簽出一個較老的內核版本.
以伯克利mbox-format文件應用所有補丁.
不要忘了經常下載tags.
標記一個特殊的提交.
擴展閱讀
另外一個很好的介紹是官方指南git tutorial, 更深入的見man page documentation.