1 Git的初始化配置:
1) 配置使用git倉(cāng)庫(kù)的人員姓名
git config --global user.name?"Your Name "
2) 配置使用git倉(cāng)庫(kù)的人員email
git config --global user.email ?“you email"
2. Git本地操作基本命令
2.1. Git init
或者使用git init-db椿猎。
創(chuàng)建一個(gè)空的Git庫(kù)邀杏。在當(dāng)前目錄中產(chǎn)生一個(gè).git 的子目錄忿墅。以后,所有的文件變化信息都會(huì)保存到這個(gè)目錄下兑徘,而不像CVS那樣,會(huì)在每個(gè)目錄和子目錄下都創(chuàng)建一個(gè)CVS目錄。
在.git目錄下有一個(gè)config文件,可以修改其中的配置信息阎抒。
2.2. Git clone
取出服務(wù)器的倉(cāng)庫(kù)的代碼到本地建立的目錄中(與服務(wù)器交互)
通過(guò)git clone獲取遠(yuǎn)端git庫(kù)后,.git/config中的開(kāi)發(fā)者信息不會(huì)被一起clone過(guò)來(lái)消痛。仍然需要為本地庫(kù)的.git/config文件添加開(kāi)發(fā)者信息且叁。此外,開(kāi)發(fā)者還需要自己添加?? . gitignore文件秩伞。
通過(guò)git clone獲取的遠(yuǎn)端git庫(kù)逞带,只包含了遠(yuǎn)端git庫(kù)的當(dāng)前工作分支。如果想獲取其它分支信息纱新,需要使用 “git branch –r” 來(lái)查看展氓, 如果需要將遠(yuǎn)程的其它分支代碼也獲取過(guò)來(lái),可以使用命令 “ git checkout -b 本地分支名 遠(yuǎn)程分支名”脸爱,其中带饱,遠(yuǎn)程分支名為 “git branch –r” 所列出的分支名, 一般是諸如“origin/分支名”的樣子阅羹。如果本地分支名已經(jīng)存在勺疼, 則不需要“-b”參數(shù)。
2.3. Git add
將當(dāng)前工作目錄中更改或者新增的文件加入到Git的索引中捏鱼,加入到Git的索引中就表示記入了版本歷史中执庐,這也是提交之前所需要執(zhí)行的一步。
可以遞歸添加导梆,即如果后面跟的是一個(gè)目錄作為參數(shù)轨淌,則會(huì)遞歸添加整個(gè)目錄中的所有子目錄和文件。例如:
git add dir1 ( 添加dir1這個(gè)目錄看尼,目錄下的所有文件都被加入 )
Git add f1 f2 ( 添加f1递鹉,f2文件)
git add .????? ( 添加當(dāng)前目錄下的所有文件和子目錄 )
2.4. Git commit
提交當(dāng)前工作目錄的修改內(nèi)容。
直接調(diào)用git commit命令藏斩,會(huì)提示填寫(xiě)注釋躏结。通過(guò)如下方式在命令行就填寫(xiě)提交注釋:git commit -m "Initial commit of gittutor reposistory"。 注意狰域,和CVS不同媳拴,git的提交注釋必須不能為空,否則就會(huì)提交失敗兆览。
git commit還有一個(gè) -a的參數(shù)屈溉,可以將那些沒(méi)有通過(guò)git add標(biāo)識(shí)的變化一并強(qiáng)行提交,但是不建議使用這種方式抬探。
每一次提交子巾,git就會(huì)為全局代碼建立一個(gè)唯一的commit標(biāo)識(shí)代碼,用戶可以通過(guò)git reset命令恢復(fù)到任意一次提交時(shí)的代碼。
git commit –-amend –m “message” (在一個(gè)commit id上不斷修改提交的內(nèi)容)
2.5. Git pull
從服務(wù)器的倉(cāng)庫(kù)中獲取代碼线梗,和本地代碼合并椰于。(與服務(wù)器交互,從服務(wù)器上下載最新代碼缠导,等同于: Git fetch + Git merge)
從其它的版本庫(kù)(既可以是遠(yuǎn)程的也可以是本地的)將代碼更新到本地廉羔,例如:“git pull origin master ”就是將origin這個(gè)版本庫(kù)的代碼更新到本地的master主分支。
git pull可以從任意一個(gè)git庫(kù)獲取某個(gè)分支的內(nèi)容僻造。用法如下:git pullusername@ipaddr:遠(yuǎn)端repository名遠(yuǎn)端分支名?本地分支名憋他。這條命令將從遠(yuǎn)端git庫(kù)的遠(yuǎn)端分支名獲取到本地git庫(kù)的一個(gè)本地分支中。其中髓削,如果不寫(xiě)本地分支名竹挡,則默認(rèn)pull到本地當(dāng)前分支。
需要注意的是立膛,git pull也可以用來(lái)合并分支揪罕。 和git merge的作用相同。 因此宝泵,如果你的本地分支已經(jīng)有內(nèi)容好啰,則git pull會(huì)合并這些文件,如果有沖突會(huì)報(bào)警儿奶。
2.6. Git push
將本地commit的代碼更新到遠(yuǎn)程版本庫(kù)中框往,例如 “git push origin”就會(huì)將本地的代碼更新到名為orgin的遠(yuǎn)程版本庫(kù)中。
git push和git pull正好想反闯捎,是將本地某個(gè)分支的內(nèi)容提交到遠(yuǎn)端某個(gè)分支上椰弊。用法:git pushusername@ipaddr:遠(yuǎn)端repository名本地分支名?遠(yuǎn)端分支名。這條命令將本地git庫(kù)的一個(gè)本地分支push到遠(yuǎn)端git庫(kù)的遠(yuǎn)端分支名中瓤鼻。
需要格外注意的是秉版,git push好像不會(huì)自動(dòng)合并文件。因此茬祷,如果git push時(shí)清焕,發(fā)生了沖突,就會(huì)被后push的文件內(nèi)容強(qiáng)行覆蓋牲迫,而且沒(méi)有什么提示耐朴。 這在合作開(kāi)發(fā)時(shí)是很危險(xiǎn)的事情。
2.7. Git merge 和Git rebase
把服務(wù)器上下載下來(lái)的代碼和本地代碼合并盹憎。或者進(jìn)行分支合并铐刘。
例如:當(dāng)前在master分支上陪每,若想將分支dev上的合并到master上,則git merge dev
注意:git merge nov/eclair_eocket (是將服務(wù)器git庫(kù)的eclair_eocket分支合并到本地分支上)
git rebase nov/eclair_eocket (是將服務(wù)器git庫(kù)的eclair_eocket分支映射到本地的一個(gè)臨時(shí)分支上,然后將本地分支上的變化合并到這個(gè)臨時(shí)分支檩禾,然后再用這個(gè)臨時(shí)分支初始化本地分支)
2.8. Git fetch
從服務(wù)器的倉(cāng)庫(kù)中下載代碼挂签。(與服務(wù)器交互,從服務(wù)器上下載最新代碼)
相當(dāng)于從遠(yuǎn)程獲取最新版本到本地盼产,不會(huì)自動(dòng)merge饵婆,比Git pull更安全些。
使用此方法來(lái)獲取服務(wù)器上的更新戏售。
例如:如果使用git checkout nov/eclair_rocket (nov/eclair_rocket為服務(wù)器上的分支名)侨核,則是獲取上次使用git fetch命令時(shí)從服務(wù)器上下載的代碼;如果先使用 git fetch 灌灾,再使用git checkout nov/eclair_rocket搓译,則是先從服務(wù)器上獲取最新的更新信息,然后從服務(wù)器上下載最新的代碼
2.9. Git status
查看版本庫(kù)的狀態(tài)锋喜⌒┘海可以得知哪些文件發(fā)生了變化,哪些文件還沒(méi)有添加到git庫(kù)中等等嘿般。 建議每次commit前都要通過(guò)該命令確認(rèn)庫(kù)狀態(tài)段标。
最常見(jiàn)的誤操作是, 修改了一個(gè)文件炉奴, 沒(méi)有調(diào)用git add通知git庫(kù)該文件已經(jīng)發(fā)生了變化就直接調(diào)用commit操作逼庞, 從而導(dǎo)致該文件并沒(méi)有真正的提交。這時(shí)如果開(kāi)發(fā)者以為已經(jīng)提交了該文件盆佣,就繼續(xù)修改甚至刪除這個(gè)文件往堡,那么修改的內(nèi)容就沒(méi)有通過(guò)版本管理起來(lái)。如果每次在 提交前共耍,使用git status查看一下虑灰,就可以發(fā)現(xiàn)這種錯(cuò)誤。因此痹兜,如果調(diào)用了git status命令穆咐,一定要格外注意那些提示為 “Changed but not updated:”的文件。 這些文件都是與上次commit相比發(fā)生了變化字旭,但是卻沒(méi)有通過(guò)git add標(biāo)識(shí)的文件对湃。
2.10. Git log
查看歷史日志,包含每次的版本變化遗淳。每次版本變化對(duì)應(yīng)一個(gè)commit id拍柒。
Git log -1
-1的意思是只顯示一個(gè)commit,如果想顯示5個(gè)屈暗,就-5拆讯。不指定的話脂男,git log會(huì)從該commit一直往后顯示。
Git log --stat –summary (顯示每次版本的詳細(xì)變化)
在項(xiàng)目日志信息中种呐,每條日志的首行(就是那一串字符)為版本更新提交所進(jìn)行的命名宰翅,我們可以將該命名理解為項(xiàng)目版本號(hào)。項(xiàng)目版本號(hào)應(yīng)該是唯一的爽室,默認(rèn)由 Git 自動(dòng)生成汁讼,用以標(biāo)示項(xiàng)目的某一次更新。如果我們將項(xiàng)目版本號(hào)用作git-show 命令的參數(shù)阔墩,即可查看該次項(xiàng)目版本的更新細(xì)節(jié)嘿架。
2.11. Git rm
從當(dāng)前的工作目錄中和索引中刪除文件。
可以遞歸刪除戈擒,即如果后面跟的是一個(gè)目錄做為參數(shù)眶明,則會(huì)遞歸刪除整個(gè)目錄中的所有子目錄和文件。例如:
git rm –r * (進(jìn)入某個(gè)目錄中筐高,執(zhí)行此語(yǔ)句搜囱,會(huì)刪除該目錄下的所有文件和子目錄)
git rm f1??? (刪除文件f1,包含本地目錄和index中的此文件記錄)
git rm --ached f1 (刪除文件f1柑土,不會(huì)刪除本地目錄文件蜀肘,只刪除index中的文件記錄;將已經(jīng)git add的文件remove到cache中,這樣commit的時(shí)候不會(huì)提交這個(gè)文件, 適用于一下子添加了很多文件, 卻又想排除其中個(gè)別幾個(gè)文件的情況.)
2.12 Git文檔忽略機(jī)制
工作目錄中有一些文件是不希望接受Git 管理的稽屏,譬如程序編譯時(shí)生成的中間文件等等扮宠。Git 提供了文檔忽略機(jī)制,可以將工作目錄中不希望接受Git 管理的文檔信息寫(xiě)到同一目錄下的.gitignore 文件中狐榔。
例如:工作目錄下有個(gè)zh目錄坛增,如果不想把它加入到Git管理中,則執(zhí)行:
echo “zh” > .gitignore
git add .
有關(guān)gitignore 文件的諸多細(xì)節(jié)知識(shí)可閱讀其使用手冊(cè):man gitignore
3.參考文獻(xiàn)
3.1 博客:http://blog.csdn.net/gemmem/article/details/7290125
3.2 唐巧的教程:http://blog.devtang.com/2012/02/03/talk-about-svn-and-git/
3.3 廖雪峰教程:http://blog.devtang.com/2012/02/03/talk-about-svn-and-git/