以前公司有的項目也用這個東東,但我的項目中還是始終使用svn,華為以前用的是VSS,不過后來也開始推別的了,如CVS(2006年,SVN貌似還不太火)。
Git這個東東不必說太多,想來大家也都聽說過。最早開始是由Ruby程序員們發起的。記得2008年接觸Ruby和Rails的時候還沒有這個東東,代碼在線管理還是百花齊放。Ruby是日本的家伙搞出來的,日本有個代碼托管網站叫heroku,當時用這個的人比較多,現在這個網站還能打開,網址是www.heroku.com。只不過后來硅谷玩ruby的兄弟們把Git搞出來了,還主動把Rails框架也搬上去了,所以自然整個Ruby社區跟著就轉用Git了。
再說說為什么非得搞Git出來,還得說其源頭Ruby。Ruby和Rails用過的人都知道,這種語言適合一兩個人快速開發一個web應用,我曾經用rails七天之內寫過一個網站。但是rails團隊開發是個問題,如果用svn這種東西,很容易就搞出沖突出來。而svn大家都知道,一旦有什么沖突文件也挺麻煩的。所以,git就應運而生了,git的思想就是每個人都在自己本地的branch上進行工作,在最終提交前再合主干合并,然后再提交。這樣做有幾點好處:
1、適合分布式開發,強調個體 2、公共服務器壓力和數據量都不會太大 3、速度快、靈活 4、任意兩個開發者之間可以很容易的解決沖突 5、離線工作
下面是一張Git工作模式的圖,有利于大家對Git的工作方式進行理解:
不 過上面這個模式的復雜之處在于主開發者很累,他要審核所有的補丁并push到公共服務器上,所以像我們這種小團隊還是由開發者自己merge并push到服務器上即可。
閑話少說,下面就正式開始說怎么玩Git。
安裝
先說windows版,從這個網站下:https://code.google.com/p/msysgit/downloads/list。安裝過程非常簡單,一路默認就可以了。
再說linux版的安裝,我用的是ubuntu,ubuntu可以直接裝:
[plain] view plaincopyprint?
apt-get?install?git??
apt-get install git
不過這么裝完有一個隱患,就是提交到GitHub的時候,會報一個錯:
[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
這是因為這么安裝的git版本是1.7.4,而官方說明要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
然后再進行安裝,或者升級:
[plain] view plaincopyprint?
apt-get?dist-upgrade??
apt-get dist-upgrade
設置Git
這一步windows和linux都是一樣的,稍微不同的是windows下在Git GUI中操作,而linux下直接在shell中操作就行。
首先我們得創建一個ssh key,這個key在github.com中個人設置中是要用到的,創建方法如下:
[plain] view plaincopyprint?
ssh-keygen?-t?rsa?-C?"caoxuezhu@cyou-inc.com"??
ssh-keygen -t rsa -C "caoxuezhu@cyou-inc.com"
然后跟據提示輸入密碼即可創建,如果沒有改默認路徑的話,生成的文件在~/.ssh/id_rsa.pub這個文件中。
注冊GitHub
要想玩轉Git,就得有個GitHub的賬號,因為基于Git的代碼都是在這個網站上進行托管的(www.github.com)。先注冊一個賬號,這自然不用說了,跟注冊別的網站一樣,關鍵是注冊完的設置,先設置剛才生成的ssh key,步驟如下:
在 下 圖藍框中填入剛剛生成的ssh key,注意把key文件的全文一字不差的填進去,否則Add不成功。Title就隨便起一個名字就可以
創建GitHub工程
下面我們就開始用GitHub托管項目了,首先得先創建一個項目,點擊這里:
然 后填上一個合適的項目名和描述(選填)就可以了
有 一點需要注意的是,下面這個設置如果不設的話,其他項目成員是沒有權限提交代碼的:
下 圖 輸入框中填入其他項目成員注冊時寫的Username
設置成功后是這樣的:
Git使用
前面說了這么多,終于到了怎么使用Git進行代碼管理的部分了,這理我先介紹命令行的方式,當然window下也有窗口工具,叫TortoiseGit。跟TortoiseSVN界面看著差不多,這個后面有機會再寫blog介紹吧。
首先做為項目的master,一開始要傳代碼上去,具體步驟如下:
首先在本地創建一個跟項目同名的文件夾,這個在哪個目錄下創建都行:
[plain] view plaincopyprint?
mkdir?HelloWorld2??
mkdir HelloWorld2
然后初始化工程:
[plain] view plaincopyprint?
git?init??
git init
然后再隨便添加一個文件:
[plain] view plaincopyprint?
touch?README.md??
touch README.md
把文件加入git,這里用“.”表示加入所有文件,當然也可以使用確切的文件名:
[plain] view plaincopyprint?
git?add?.??
git add .然后提交到本地庫中,如果不加-m參數的話,會出來對話界面讓你輸入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
將代碼發送到GitHub,這一步輸入在注冊GitHub時填的郵箱和密碼:
[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:
下面的部分是做為項目其他開發者,應該怎么進行工作。
首先先把項目下載下來:
[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
這時可以看到項目已經下載下來了:
[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
如果不是首次下載項目,在開始工作之前,最好先更新下代碼:
[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.
創建并切換到自己的本地分支上:
[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'
開始自己的工作,這里我進行了創建和修改文件的操作:
[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
切換到主干上并把改動merge過來:
[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
提交修改到服務器,這里提示時輸入注冊github網站時的用戶名和密碼:
[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
提交成功后在網站上也可以看到剛剛新增的文件和對已有文件的修改:
與50位技術專家面對面 20年技術見證,附贈技術全景圖
總結
以上是生活随笔 為你收集整理的Git环境搭建与基本使用方法 (转自http://blog.csdn.net/fireelement/article/details/9618363) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。