小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

GIT使用教程與基本原理

 云將東游 2015-04-29

這個(gè)教程之前是發(fā)在社區(qū)網(wǎng)站上,現(xiàn)在把它轉(zhuǎn)到自己博客上:)

http://oss./artical.php?id=16

說明:該教程全部圖片都來自于《pro git》。以下所有的操作,除非特別聲明,都是基于Linux終端來進(jìn)行的。如果你發(fā)現(xiàn)這篇文章有錯(cuò)誤,或者其他問題,歡迎與我聯(lián)系:wengpingbo@gmail.com

1、什么是GIT

Git是一個(gè)強(qiáng)調(diào)速度的分布式版本控制軟件和源代碼管理系統(tǒng)(SCMsource code management)。Git最初是由Linus Torvalds為內(nèi)核開發(fā)而設(shè)計(jì)的管理軟件。自從Git推出以來,已經(jīng)被很多開源項(xiàng)目所采納。每一個(gè)Git工作目錄是一個(gè)帶有完全歷史記錄和版本信息的倉庫,不依賴于網(wǎng)絡(luò)和中央服務(wù)器。Git是一個(gè)免費(fèi)的開源軟件,遵從GNU v2協(xié)議。

Git這個(gè)詞在英語中的原意是很笨拙,沒用的人。Linus自嘲說:“我是一個(gè)任性的笨蛋,所以我把我的所有的項(xiàng)目的名字都和我很相似。第一個(gè)是Linux,現(xiàn)在是Git?!?/span>Git的幫助文檔中描述Git為:笨拙的內(nèi)容跟蹤者(the stupid content tracker)。(翻譯自WIKI)

關(guān)于開發(fā)Git的一些歷史由來,可以看看這個(gè)網(wǎng)站:https:///lkml/2005/4/6/121

2、為什么要用GIT

  • 更順暢的工作流程,開發(fā)過程中,完全可以離線操作
  • 快速,Git分布式架構(gòu)使得本地倉庫包含所有的歷史版本信息,你可以在不同的版本之間快速切換
  • 彈性的本地分支,在svn下,你建一個(gè)分支需要把源代碼復(fù)制到另外一個(gè)文件夾,而在Git下,創(chuàng)建分支的代價(jià)是非常小的,只需一條命令
  • 倉庫目錄結(jié)構(gòu)簡(jiǎn)潔,用Git復(fù)制一個(gè)項(xiàng)目,只會(huì)在項(xiàng)目根目錄創(chuàng)建一個(gè).git的目錄,而其他目錄很干凈
  • 內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),所有的版本信息都位于.git目錄下
  • 完整性好,更易于協(xié)作開發(fā)
  • 用戶群大,現(xiàn)在已經(jīng)有成千上萬個(gè)開源項(xiàng)目采用Git來做項(xiàng)目管理,github上更是有無數(shù)個(gè)代碼倉庫

3、GIT安裝與配置

a) 安裝

1.從源碼安裝

在安裝之前,你必須保證以下幾個(gè)依賴包已經(jīng)安裝在你的系統(tǒng)上:curl, zlib, openssl, expat, libiconv。如果你的系統(tǒng)是Ubuntu,你可以這樣安裝:

apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

當(dāng)所有的依賴項(xiàng)已經(jīng)解決,就可以從http:///download上下載Git的源碼,然后編譯安裝,具體命令如下:

tar -zxf git-1.*.*.*.tar.gz

cd git-1.*.*

make prefix=/usr/local all

sudo make prefix=/usr/local install

2.在Linux上安裝

如果你的系統(tǒng)是Linux或者Fedora,你可以通過以下命令直接安裝Git

yum install git-core (fedora)

apt-get install git-core (ubuntu)

3.在Windows上安裝

盡管Git是發(fā)源于Linux,但現(xiàn)在Windows上也有能夠正常使用Git,只不過不支持中文,在Windows下所有的中文都顯示問號(hào),另外還有一些功能上的BUG。所以建議還是在Linux上去使用Git,如果你不得不工作在Windows上,你可以到http://msysgit.github.com/上下載msysgit的最新版,安裝過程和其他Windows程序差不多,基本上點(diǎn)下一步就OK了。Msysgit默認(rèn)會(huì)安裝git bashgit GUI這兩個(gè)程序,一般用git bash就可以了,它支持常用的命令。如果對(duì)Linux命令行不熟,你也可以用用git GUI,但功能有限制。

b) 第一次使用GIT

在你安裝好Git之后,你需要修改一些配置,才能正常使用Git。

Git通過“git config”命令來配置Git,這個(gè)命令有2個(gè)選項(xiàng):--system, --global, 加上默認(rèn)選項(xiàng),分別對(duì)應(yīng)Git3級(jí)配置文件。第一個(gè)是/etc/gitconfig文件,和--system對(duì)應(yīng),這是全局配置文件,修改這個(gè)文件,將會(huì)影響系統(tǒng)上所有的用戶,所有的倉庫。第二個(gè)是你家目錄下的/.gitconfig文件,與--global對(duì)應(yīng),修改它會(huì)對(duì)你當(dāng)前用戶的所有倉庫產(chǎn)生影響。第三個(gè)是你倉庫中的.git/.gitconfig文件,這是“git config”默認(rèn)修改的配置文件,它只會(huì)對(duì)你當(dāng)前倉庫產(chǎn)生影響。

在第一次使用Git時(shí),你需要告訴你的協(xié)同開發(fā)者,你是誰以及你的郵箱,在你提交的時(shí)候,Git需要這兩個(gè)信息。具體通過以下命令設(shè)置:

git config --global user.name “Test OSS”

git config --global user.email oss.@gmail.com

當(dāng)然你也可以不用--global選項(xiàng),但這意味這你在每一個(gè)倉庫中都要這樣設(shè)置。

同時(shí),你也可以指定你的編輯器,你的Diff工具:

git config --global core.editor vim

git config --global merge.tool vimdiff

你還可以通過”git config --list”命令來查看你的設(shè)置。

當(dāng)你把Git設(shè)置好之后,如果你要和從Git服務(wù)器上獲得倉庫,或者向Git服務(wù)器提交你的代碼(比如github),你可能需要生成你自己的ssh密鑰對(duì)。Git支持4種與服務(wù)器端通信的協(xié)議:git、http、sshhttps。其中git只是一個(gè)只讀協(xié)議,也就是說你只可以從服務(wù)器端獲取倉庫,但是你不能提交你自己的代碼。而httphttps用的很少,大部分都只支持ssh協(xié)議和Git協(xié)議。

當(dāng)你通過ssh協(xié)議與遠(yuǎn)端服務(wù)器進(jìn)行通信的時(shí)候,你可以通過以下命令生成ssh密鑰對(duì):

ssh-keygen -t rsa

如果你沒有指定密鑰名稱和存放路徑的話,它默認(rèn)把兩個(gè)不對(duì)稱密鑰放在你的家目錄下的.ssh目錄下,密鑰文件默認(rèn)名稱為id_rsaid_rsa.pub,前者是私鑰,后者是公鑰。中間可能會(huì)要你設(shè)定訪問密鑰密碼,這個(gè)可以設(shè),可以不設(shè),但為了安全考慮,還是建議你設(shè)一個(gè)訪問密碼。否則,意味著任何持有你密鑰的人都可以使用該密鑰。

然后把你的公鑰發(fā)給Git倉庫管理員,然后你就可以通過ssh協(xié)議來訪問服務(wù)器端,期間程序會(huì)自動(dòng)進(jìn)行密鑰對(duì)匹配,如果你設(shè)了訪問密碼,你可能需要輸入密碼。

更多關(guān)于ssh的內(nèi)容,請(qǐng)?jiān)L問這里:http://www./doc/zh_CN/books/handbook/openssh.html

這些設(shè)定完之后,你可以通過獲得任何一個(gè)公開的代碼倉庫來檢測(cè)你的git是否工作正常。比如下面這個(gè):

git clone git://git2.kernel.org/pub/scm/git/git.git

4、GIT倉庫

Git做為一個(gè)資源管理和跟蹤系統(tǒng),如果想要把自己的文件托管在Git上,那么首先你得讓Git知道你需要管理的文件在哪。比如說現(xiàn)在我有一個(gè)項(xiàng)目,它在test文件夾里,我想讓Git管理這個(gè)項(xiàng)目,這個(gè)時(shí)候你需進(jìn)入到這個(gè)目錄,然后運(yùn)行“git init”命令。這個(gè)時(shí)候Git就會(huì)在該目錄下生成一個(gè).git的隱藏目錄,Git用來進(jìn)行版本控制和內(nèi)容跟蹤的所有文件都在該文件夾下。

處于git跟蹤下的文件只具有三種狀態(tài):

  • Modified(working directory):被修改過的文件
  • Staged(staging area):通過git add添加到暫存區(qū)域的文件
  • Committed(git directory):通過git commit提交到倉庫的文件

所以,一般的git工作流程可能是這樣:修改過某些文件,然后把這些文件添加都暫緩區(qū),再提交到倉庫中形成一個(gè)版本或快照,最后提交到git服務(wù)器上。而在中間,可能伴隨著分支管理,分支切換,撤消與合并。

可能有些人會(huì)覺得很奇怪,為什么git會(huì)有暫存區(qū)域這個(gè)概念,直接提交到倉庫中不就ok了。其實(shí)這是git為了做版本控制用的,試想如果沒有暫存區(qū)域,每修改一個(gè)文件,就會(huì)形成一個(gè)版本,太過頻繁,不易于管理。暫存區(qū)域其實(shí)就是下一個(gè)版本的文件清單,你可以自由控制該往倉庫中提交什么文件,這也可以避免在一個(gè)版本中包含一些中間文件,比如編譯后的文件。





5、GIT基本流程

1.初始化倉庫

初始化倉庫有兩種情況,一種是直接在一個(gè)空目錄里建立一個(gè)項(xiàng)目,這時(shí)候你可以這樣干:

git init

另一種是從其他機(jī)器復(fù)制一個(gè)倉庫,比如這樣:

git clone git://git2.kernel.org/pub/scm/git/git.git (遠(yuǎn)程倉庫)

git clone https://github.com/jquery/jquery.git (遠(yuǎn)程倉庫)

git clone git@github.com:wengpingbo/MicroBlog.git (遠(yuǎn)程倉庫)

git clone /home/oss/test.git (本地倉庫)

第一次從服務(wù)器上復(fù)制一個(gè)倉庫,可能比較慢,因?yàn)?span style="font-family:Times New Roman">git要把所有的歷史記錄和版本全部復(fù)制下來,這也算git的一個(gè)弊端吧!

復(fù)制完后,就會(huì)在當(dāng)前目錄下生成一個(gè)工作目錄,名字以倉庫名字命名。如果你不想指定目錄,那就在上面的命令后加一個(gè)目錄就ok了。比如我想把test倉庫放到oss倉庫中:git clone /home/oss/test.git oss

之后,你就可以開始你的工作啦!

2.添加文件

在編輯了幾個(gè)文檔之后,你可能突然想起來,好像文件還沒有讓git跟蹤。Git并不會(huì)實(shí)時(shí)的跟蹤你的文件,只在你明確讓它記錄你的文件時(shí),它才會(huì)把指定的文件的當(dāng)前狀態(tài)記錄到倉庫中去,然后又撒手不管了。我想這就是說git笨的原因吧。這個(gè)時(shí)候,你需要手動(dòng)添加你的文件當(dāng)暫存區(qū)域:

git add filename1 filename2

如果你懶得一個(gè)一個(gè)加,你可以試試這個(gè):

git add -A

它會(huì)把當(dāng)前目錄下所有的文件都添加到暫存區(qū)域。

3.添加一個(gè)版本

在添加完文件后,你可能覺得應(yīng)該創(chuàng)建一個(gè)commit了。

git commit

怎么樣?是不是有點(diǎn)不對(duì)勁,好像這個(gè)命令并沒有按你想象的那樣跳出一個(gè)提交成功的提示,而是直接跑到了你在配置中指定的編輯器中了。仔細(xì)看一下,原來是讓你給這個(gè)版本做一些備注,隨便寫點(diǎn)什么,然后保存退出就ok了。如果你不想這么麻煩,可以這么干:

git commit -m ‘initial version’

可能你覺得之前講的太羅嗦了,提交一個(gè)commit還這么麻煩,其實(shí)有一個(gè)捷徑可以使你跳過添加文件這個(gè)過程:

git commit -a -m ‘initial version’

大功告成,這個(gè)命令會(huì)把之前所有的已經(jīng)添加的文件都加入到這個(gè)版本中。

可能你又有疑問了,之前添加的文件不是自動(dòng)會(huì)加入到下一個(gè)版本中嗎,問什么還加這個(gè)-a參數(shù)?

其實(shí)git add命令只是把指定文件的當(dāng)前狀態(tài)添加到暫存區(qū)域,并不代表一個(gè)文件一旦添加,就會(huì)一直存在每個(gè)版本中。如果你添加一個(gè)文件后對(duì)這個(gè)又進(jìn)行了修改,在你commit時(shí)候,只會(huì)commit這個(gè)文件添加時(shí)的狀態(tài),不會(huì)把之后的修改也commit進(jìn)去,除非你再次添加。

4.推送變更

在你commit完之后,你可能想把自己的代碼提交到github或者其他git服務(wù)器上,與他人交流共享,這時(shí)候就需要和遠(yuǎn)程服務(wù)器打交道了。

如果你是在本地建立起的倉庫,默認(rèn)情況下是沒有任何服務(wù)器地址的,如果你是從其他服務(wù)器復(fù)制過來的倉庫,這個(gè)服務(wù)器地址會(huì)自動(dòng)添加到你的倉庫中,你可以這樣查看:

git remote -v

如果只輸入”git remote”,就只會(huì)列出服務(wù)器端的別名,不會(huì)列出地址來。

一個(gè)倉庫可以有多個(gè)服務(wù)器地址,這就意味著,你可以從不同的人手中復(fù)制同一個(gè)倉庫,但這并不會(huì)打亂你自己的分支,哪怕雙方的分支名字都一樣。假如你現(xiàn)在在和另外兩個(gè)人做同一個(gè)項(xiàng)目中的同一個(gè)分支,你發(fā)現(xiàn)A的一個(gè)模塊正是你想要的,你想把他的代碼合并到你現(xiàn)在的版本中,這時(shí)候你可以這樣做:

git remote add code_a git://url/test.git  //添加對(duì)方的地址,code_a是別名

git fetch code_a  //復(fù)制對(duì)方的倉庫到本地,但不合并,git pull會(huì)自動(dòng)合并

git merge code_a/master //把對(duì)方master分支合并到自己當(dāng)前版本下

合并完之后,你可能想提交你的代碼到其他的服務(wù)器上,這時(shí)候你可以先把要提交的服務(wù)器地址添加進(jìn)來,然后這樣做:

git push origin master

上面的命令就是把自己master的分支提交到名字為origin的服務(wù)器上

5.創(chuàng)建并管理分支

在做項(xiàng)目的時(shí)候,你可能會(huì)想寫一些擴(kuò)展性的功能,或者做一些小實(shí)驗(yàn),但是你又不想影響你現(xiàn)在的項(xiàng)目。這時(shí)候,你可以創(chuàng)建一個(gè)分支,然后在這個(gè)分支里寫東西,當(dāng)覺得不好的時(shí)候,你可以把這個(gè)分支刪除掉,對(duì)你之前的主分支沒有任何影響?;蛘吣阌X得這個(gè)新特性超出了自己的預(yù)想,可以合并到主分支里,這時(shí)候你只要把工作轉(zhuǎn)回主分支,然后合并分支,最后刪除分支,然后就跟那個(gè)分支沒創(chuàng)建一樣。具體操作如下:

git branch test  //創(chuàng)建一個(gè)test分支

git checkout test  //轉(zhuǎn)到test分支

edit something...commit something...

git checkout master  //轉(zhuǎn)到master分支

git merge test  //合并test分支

git checkout -b test2  //創(chuàng)建test2分支,并轉(zhuǎn)到test2分支

git branch -d test //刪除test分支

git branch  //列出分支列表

git branch -v  //列出分支列表和當(dāng)前commit

Git merge的實(shí)質(zhì)是把兩個(gè)版本合在一起,然后在當(dāng)前分支創(chuàng)建一個(gè)新的commit,如果你在兩個(gè)分支的同一個(gè)文件的同一個(gè)地方都做了修改,這時(shí)候merge就會(huì)失敗,git就不會(huì)自動(dòng)創(chuàng)建一個(gè)新的commit,而是直接停住。你需要手動(dòng)修改這些沖突的文件,選擇這兩個(gè)分支中的一個(gè)版本,或者自己重寫這個(gè)部分,然后手動(dòng)添加這些文件到暫存區(qū)域,再commit一下就ok了。要查看哪些文件沖突了,可以用”git status”查看。

6.撤消改動(dòng)

是人就會(huì)犯錯(cuò)。當(dāng)你執(zhí)行某個(gè)命令之后,突然發(fā)現(xiàn),自己寫錯(cuò)了,或者漏了一個(gè)文件,這時(shí)候怎么辦?

如果你提交得太早,忘了添加某些文件,你可以這樣做:

git commit -m ‘a(chǎn)dd something ’

git add file1

git commit --amend

最后一個(gè)命令會(huì)把你當(dāng)前暫存區(qū)域最為上一次的commit。如果你commit以后,馬上amend,這時(shí)候git會(huì)直接跳到編輯commit備注里面,這樣你可以修改你上次commit的備注。

如果你添加了不該添加的文件,你可以這樣挽回:

git add . //把所有的文件都添加進(jìn)去

git reset HEAD readme  //readme文件從暫存區(qū)域去除

如果你發(fā)現(xiàn)你編輯錯(cuò)了一個(gè)文件,你想把它恢復(fù)到上一個(gè)版本的狀態(tài),這時(shí)候你可以這樣:

git checkout -- filename1 //只撤消這一個(gè)文件

如果你覺得這個(gè)版本糟糕透了,想完全回滾到上一個(gè)版本,你可以干如下事情:

git reset --hard HEAD^

HEAD是指向當(dāng)前版本,^指當(dāng)前版本的父版本,這個(gè)操作無法撤消。你可以把--hard換成--soft,這只會(huì)回退commit信息。還有一個(gè)--mixed默認(rèn)選項(xiàng),大家可以參考官方文檔,查看這3個(gè)選項(xiàng)的具體區(qū)別。

6、GIT常用命令

Git add

Git clone

Git commit

Git push

Git checkout

Git reset

Git pull

Git status

Git branch

//advanced

Git tag

Git log

Git merge

7、學(xué)習(xí)GIT相關(guān)資料

pro git》 :http:///book/zh

git magic》 :http://www.csc./utbildning/kth/kurser/DD2385/material/gitmagic.pdf

Git manual http:///docs

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多