以前公司有的項(xiàng)目也用這個(gè)東東,但我的項(xiàng)目中還是始終使用svn,華為以前用的是VSS,不過(guò)后來(lái)也開(kāi)始推別的了,如CVS(2006年,SVN貌似還不太火)。
Git這個(gè)東東不必說(shuō)太多,想來(lái)大家也都聽(tīng)說(shuō)過(guò)。最早開(kāi)始是由Ruby程序員們發(fā)起的。記得2008年接觸Ruby和Rails的時(shí)候還沒(méi)有這個(gè)東東,代碼在線管理還是百花齊放。Ruby是日本的家伙搞出來(lái)的,日本有個(gè)代碼托管網(wǎng)站叫heroku,當(dāng)時(shí)用這個(gè)的人比較多,現(xiàn)在這個(gè)網(wǎng)站還能打開(kāi),網(wǎng)址是www.heroku.com。只不過(guò)后來(lái)硅谷玩ruby的兄弟們把Git搞出來(lái)了,還主動(dòng)把Rails框架也搬上去了,所以自然整個(gè)Ruby社區(qū)跟著就轉(zhuǎn)用Git了。
再說(shuō)說(shuō)為什么非得搞Git出來(lái),還得說(shuō)其源頭Ruby。Ruby和Rails用過(guò)的人都知道,這種語(yǔ)言適合一兩個(gè)人快速開(kāi)發(fā)一個(gè)web應(yīng)用,我曾經(jīng)用rails七天之內(nèi)寫(xiě)過(guò)一個(gè)網(wǎng)站。但是rails團(tuán)隊(duì)開(kāi)發(fā)是個(gè)問(wèn)題,如果用svn這種東西,很容易就搞出沖突出來(lái)。而svn大家都知道,一旦有什么沖突文件也挺麻煩的。所以,git就應(yīng)運(yùn)而生了,git的思想就是每個(gè)人都在自己本地的branch上進(jìn)行工作,在最終提交前再合主干合并,然后再提交。這樣做有幾點(diǎn)好處:
1、適合分布式開(kāi)發(fā),強(qiáng)調(diào)個(gè)體 2、公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大 3、速度快、靈活 4、任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突 5、離線工作
下面是一張Git工作模式的圖,有利于大家對(duì)Git的工作方式進(jìn)行理解:
不 過(guò)上面這個(gè)模式的復(fù)雜之處在于主開(kāi)發(fā)者很累,他要審核所有的補(bǔ)丁并push到公共服務(wù)器上,所以像我們這種小團(tuán)隊(duì)還是由開(kāi)發(fā)者自己merge并push到服務(wù)器上即可。
閑話少說(shuō),下面就正式開(kāi)始說(shuō)怎么玩Git。
安裝
先說(shuō)windows版,從這個(gè)網(wǎng)站下:https://code.google.com/p/msysgit/downloads/list。安裝過(guò)程非常簡(jiǎn)單,一路默認(rèn)就可以了。
再說(shuō)linux版的安裝,我用的是ubuntu,ubuntu可以直接裝:
[plain] view plaincopyprint?
apt-get?install?git??
apt-get install git
不過(guò)這么裝完有一個(gè)隱患,就是提交到GitHub的時(shí)候,會(huì)報(bào)一個(gè)錯(cuò):
[plain] view plaincopyprint?
Error:?The?requested?URL?returned?error:?403?while?accessing???? #?https://github.com/user/repo.git/info/refs???? #?fatal:?HTTP?request?failed???
Error: The requested URL returned error: 403 while accessing
# https://github.com/user/repo.git/info/refs
# fatal: HTTP request failed
這是因?yàn)檫@么安裝的git版本是1.7.4,而官方說(shuō)明要1.7.10后才能正常提交,所以我們還是把Git的源加上吧:
[plain] view plaincopyprint?
sudo?apt-add-repository?ppa:git-core/ppa??? sudo?apt-get?update???
sudo apt-add-repository ppa:git-core/ppa
sudo apt-get update
然后再進(jìn)行安裝,或者升級(jí):
[plain] view plaincopyprint?
apt-get?dist-upgrade??
apt-get dist-upgrade
設(shè)置Git
這一步windows和linux都是一樣的,稍微不同的是windows下在Git GUI中操作,而linux下直接在shell中操作就行。
首先我們得創(chuàng)建一個(gè)ssh key,這個(gè)key在github.com中個(gè)人設(shè)置中是要用到的,創(chuàng)建方法如下:
[plain] view plaincopyprint?
ssh-keygen?-t?rsa?-C?"caoxuezhu@cyou-inc.com"??
ssh-keygen -t rsa -C "caoxuezhu@cyou-inc.com"
然后跟據(jù)提示輸入密碼即可創(chuàng)建,如果沒(méi)有改默認(rèn)路徑的話,生成的文件在~/.ssh/id_rsa.pub這個(gè)文件中。
注冊(cè)GitHub
要想玩轉(zhuǎn)Git,就得有個(gè)GitHub的賬號(hào),因?yàn)榛贕it的代碼都是在這個(gè)網(wǎng)站上進(jìn)行托管的(www.github.com)。先注冊(cè)一個(gè)賬號(hào),這自然不用說(shuō)了,跟注冊(cè)別的網(wǎng)站一樣,關(guān)鍵是注冊(cè)完的設(shè)置,先設(shè)置剛才生成的ssh key,步驟如下:
在 下 圖藍(lán)框中填入剛剛生成的ssh key,注意把key文件的全文一字不差的填進(jìn)去,否則Add不成功。Title就隨便起一個(gè)名字就可以
創(chuàng)建GitHub工程
下面我們就開(kāi)始用GitHub托管項(xiàng)目了,首先得先創(chuàng)建一個(gè)項(xiàng)目,點(diǎn)擊這里:
然 后填上一個(gè)合適的項(xiàng)目名和描述(選填)就可以了
有 一點(diǎn)需要注意的是,下面這個(gè)設(shè)置如果不設(shè)的話,其他項(xiàng)目成員是沒(méi)有權(quán)限提交代碼的:
下 圖 輸入框中填入其他項(xiàng)目成員注冊(cè)時(shí)寫(xiě)的Username
設(shè)置成功后是這樣的:
Git使用
前面說(shuō)了這么多,終于到了怎么使用Git進(jìn)行代碼管理的部分了,這理我先介紹命令行的方式,當(dāng)然window下也有窗口工具,叫TortoiseGit。跟TortoiseSVN界面看著差不多,這個(gè)后面有機(jī)會(huì)再寫(xiě)blog介紹吧。
首先做為項(xiàng)目的master,一開(kāi)始要傳代碼上去,具體步驟如下:
首先在本地創(chuàng)建一個(gè)跟項(xiàng)目同名的文件夾,這個(gè)在哪個(gè)目錄下創(chuàng)建都行:
[plain] view plaincopyprint?
mkdir?HelloWorld2??
mkdir HelloWorld2
然后初始化工程:
[plain] view plaincopyprint?
git?init??
git init
然后再隨便添加一個(gè)文件:
[plain] view plaincopyprint?
touch?README.md??
touch README.md
把文件加入git,這里用“.”表示加入所有文件,當(dāng)然也可以使用確切的文件名:
[plain] view plaincopyprint?
git?add?.??
git add .然后提交到本地庫(kù)中,如果不加-m參數(shù)的話,會(huì)出來(lái)對(duì)話界面讓你輸入commit,所以還是直接加上了方便:
[plain] view plaincopyprint?
$?git?commit?-m?"first?commit"?? [master?(root-commit)?9a39880]?first?commit?? ?1?file?changed,?0?insertions(+),?0?deletions(-)?? ?create?mode?100644?README.md??
$ git commit -m "first commit"
[master (root-commit) 9a39880] first commit1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 README.md
連接GitHub:
[plain] view plaincopyprint?
git?remote?add?origin?https://github.com/caoxuezhu/HelloWorld2.git??
git remote add origin https://github.com/caoxuezhu/HelloWorld2.git
將代碼發(fā)送到GitHub,這一步輸入在注冊(cè)GitHub時(shí)填的郵箱和密碼:
[plain] view plaincopyprint?
$?git?push?-u?origin?master?? Username?for?'https://github.com':?caoxuezhu@cyou-inc.com?? Password?for?'https://caoxuezhu@cyou-inc.com@github.com':?? Counting?objects:?3,?done.?? Writing?objects:?100%?(3/3),?215?bytes?|?0?bytes/s,?done.?? Total?3?(delta?0),?reused?0?(delta?0)?? To?https://github.com/caoxuezhu/HelloWorld2.git?? ?*?[new?branch]??????master?->?master?? Branch?master?set?up?to?track?remote?branch?master?from?origin.??
$ git push -u origin master
Username for 'https://github.com': caoxuezhu@cyou-inc.com
Password for 'https://caoxuezhu@cyou-inc.com@github.com':
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/caoxuezhu/HelloWorld2.git* [new branch] master -> master
Branch master set up to track remote branch master from origin.
代碼上傳成功,GitHub上也看到了剛剛提交的code:
下面的部分是做為項(xiàng)目其他開(kāi)發(fā)者,應(yīng)該怎么進(jìn)行工作。
首先先把項(xiàng)目下載下來(lái):
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git$?git?clone?https://github.com/caoxuezhu/HelloWorld2.git?? Cloning?into?'HelloWorld2'...?? remote:?Counting?objects:?3,?done.?? remote:?Total?3?(delta?0),?reused?3?(delta?0)?? Unpacking?objects:?100%?(3/3),?done.?? Checking?connectivity...?done??
cxz@ubuntu:/data/work/tool/version control tool/git$ git clone https://github.com/caoxuezhu/HelloWorld2.git
Cloning into 'HelloWorld2'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
Checking connectivity... done
這時(shí)可以看到項(xiàng)目已經(jīng)下載下來(lái)了:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git$?ls?? HelloWorld??HelloWorld1??HelloWorld2?? cxz@ubuntu:/data/work/tool/version?control?tool/git$?cd?HelloWorld2/?? cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?ls?? README.md??
cxz@ubuntu:/data/work/tool/version control tool/git$ ls
HelloWorld HelloWorld1 HelloWorld2
cxz@ubuntu:/data/work/tool/version control tool/git$ cd HelloWorld2/
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ ls
README.md
如果不是首次下載項(xiàng)目,在開(kāi)始工作之前,最好先更新下代碼:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?pull?origin?master?? From?https://github.com/caoxuezhu/HelloWorld2?? ?*?branch????????????master?????->?FETCH_HEAD?? Already?up-to-date.??
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git pull origin master
From https://github.com/caoxuezhu/HelloWorld2* branch master -> FETCH_HEAD
Already up-to-date.
創(chuàng)建并切換到自己的本地分支上:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?branch?FireElement?? cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?checkout?FireElement?? Switched?to?branch?'FireElement'??
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git branch FireElement
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout FireElement
Switched to branch 'FireElement'
開(kāi)始自己的工作,這里我進(jìn)行了創(chuàng)建和修改文件的操作:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?touch?file_1?? cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?vim?README.md???
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ touch file_1
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ vim README.md
在本地分支上提交這些操作:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?add?.?? cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?commit?-m?"my?first?modify"?? [FireElement?f9acb84]?my?first?modify?? ?2?files?changed,?1?insertion(+)?? ?create?mode?100644?file_1??
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git add .
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git commit -m "my first modify"
[FireElement f9acb84] my first modify2 files changed, 1 insertion(+)create mode 100644 file_1
切換到主干上并把改動(dòng)merge過(guò)來(lái):
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?checkout?master?? Switched?to?branch?'master'?? cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?merge?FireElement?? Updating?9a39880..f9acb84?? Fast-forward?? ?README.md?|?1?+?? ?file_1????|?0?? ?2?files?changed,?1?insertion(+)?? ?create?mode?100644?file_1??
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout master
Switched to branch 'master'
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git merge FireElement
Updating 9a39880..f9acb84
Fast-forwardREADME.md | 1 +file_1 | 02 files changed, 1 insertion(+)create mode 100644 file_1
提交修改到服務(wù)器,這里提示時(shí)輸入注冊(cè)github網(wǎng)站時(shí)的用戶名和密碼:
[plain] view plaincopyprint?
cxz@ubuntu:/data/work/tool/version?control?tool/git/HelloWorld2$?git?push?origin?master?? Username?for?'https://github.com':?pire_cao@163.com?? Password?for?'https://pire_cao@163.com@github.com':??? Counting?objects:?5,?done.?? Delta?compression?using?up?to?2?threads.?? Compressing?objects:?100%?(2/2),?done.?? Writing?objects:?100%?(3/3),?283?bytes?|?0?bytes/s,?done.?? Total?3?(delta?0),?reused?0?(delta?0)?? To?https://github.com/caoxuezhu/HelloWorld2.git?? ???9a39880..f9acb84??master?->?master??
cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git push origin master
Username for 'https://github.com': pire_cao@163.com
Password for 'https://pire_cao@163.com@github.com':
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/caoxuezhu/HelloWorld2.git9a39880..f9acb84 master -> master
提交成功后在網(wǎng)站上也可以看到剛剛新增的文件和對(duì)已有文件的修改:
與50位技術(shù)專(zhuān)家面對(duì)面 20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔 為你收集整理的Git环境搭建与基本使用方法 (转自http://blog.csdn.net/fireelement/article/details/9618363) 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。