標籤:git
Git是一個分布式的版本控制系統。作為一個分布式的版本控制系統,在Git中並不存在主庫這樣的概念,每一份複製出的庫都可以獨立使用,任何兩個庫之間的不一致之處都可以進行合并。
GIT最初是由Linus Benedict Torvalds為了更有效地管理Linux核心開發而創立的分布式版本控制軟體,與常用的版本控制工具如CVS、Subversion不同,它不必伺服器端軟體支援,速度和效率也有著相當程度的提高。
GIT和SVN之間的五個基本區別
GIT是分布式的,SVN不是
GIT把內容按中繼資料方式儲存,而SVN是按檔案
GIT分支和SVN的分支不同
GIT沒有一個全域的版本號碼,而SVN有
GIT的內容完整性要優於SVN
一、安裝依賴軟體
yum install zlib zlib-devel openssl openssl-devel libcurl-devel gcc gcc-c++ -y
二、下載和安裝GIT
從 http://git-scm.com/download 下載GIT或者使用wget命令擷取
$ wget http://distfiles.macports.org/git/git-2.1.1.tar.gz
解壓後切換到其目錄
$ tar xvfj git-1.7.6.tar.bz2
$ cd git-1.7.6
使用預設配置進行安裝,如果想修改配置,可以使用 ./configure --help 來擷取協助
$ ./configure
$ make
$ make install
三、初始化配置
GIT預設安裝在 /usr/local/bin ,安裝之後可以驗證一下是否安裝好
$ whereis git 查看安裝路徑
git: /usr/local/bin/git
$ git --version 查看版本
git version 1.7.6
$ git --help 查看協助資訊
四、git命令
1、 Git 命令初識
在正式介紹Git命令之前,先介紹一下Git 的基本命令和操作,對Git命令有一個總體的認識
樣本:從Git 版本庫的初始化,通常有兩種方式:
1)git clone:這是一種較為簡單的初始化方式,當你已經有一個遠端Git版本庫,只需要在本地複製一份
例如:git clone git://github.com/someone/some_project.git some_project
上面的命令就是將‘git://github.com/someone/some_project.git‘這個URL地址的遠程版本庫,完全複製到本地some_project目錄下
2)git init 和 git remote:這種方式稍微複雜一些,當你本地建立了一個工作目錄,你可以進入這個目錄,使用‘git init‘命令進行初始化;Git以後就會對該目錄下的檔案進資料列版本設定,這時候如果你需要將它放到遠程伺服器上,可以在遠程伺服器上建立一個目錄,並把可訪問的URL記錄下來,此時你就可以利用‘git remote add‘命令來增加一個遠程伺服器端,
例如:git remote add origin git://github.com/someone/another_project.git
上面的命令就會增加URL地址為‘git: //github.com/someone/another_project.git‘,名稱為origin的遠程伺服器,以後提交代碼的時候只需要使用 origin別名即可
2、 Git 常用命令
1) 遠程倉庫相關命令
檢出倉庫: $ git clone git://github.com/jquery/jquery.git
查看遠程倉庫:$ git remote -v
添加遠程倉庫:$ git remote add [name] [url]
刪除遠程倉庫:$ git remote rm [name]
修改遠程倉庫:$ git remote set-url --push [name] [newUrl]
拉取遠程倉庫:$ git pull [remoteName] [localBranchName]
推送遠程倉庫:$ git push [remoteName] [localBranchName]
*如果想把本地的某個分支test提交到遠程倉庫,並作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,如下:
$git push origin test:master // 提交本地test分支作為遠端master分支
$git push origin test:test // 提交本地test分支作為遠端test分支
2)分支(branch)操作相關命令
查看本地分支:$ git branch
查看遠程分支:$ git branch -r
建立本地分支:$ git branch [name] ----注意新分支建立後不會自動切換為當前分支
切換分支:$ git checkout [name]
建立新分支並立即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經參與了合并的分支,對於未有合并的分支是無法刪除的。如果想強制移除一個分支,可以使用-D選項
合并分支:$ git merge [name] ----將名稱為[name]的分支與當前分支合并
建立遠程分支(本地分支push到遠程):$ git push origin [name]
刪除遠程分支:$ git push origin :heads/[name] 或 $ gitpush origin :[name]
*建立空的分支:(執行命令之前記得先提交你當前分支的修改,否則會被強制刪乾淨沒得後悔)
$git symbolic-ref HEAD refs/heads/[name]
$rm .git/index
$git clean -fdx
3)版本(tag)操作相關命令
查看版本:$ git tag
建立版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠程版本:$ git tag -r
建立遠程版本(本地版本push到遠程):$ git push origin [name]
刪除遠程版本:$ git push origin :refs/tags/[name]
合并遠程倉庫的tag到本地:$ git pull origin --tags
上傳本地tag到遠程倉庫:$ git push origin --tags
建立帶注釋的tag:$ git tag -a [name] -m ‘yourMessage‘
4) 子模組(submodule)相關操作命令
添加子模組:$ git submodule add [url] [path]
如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模組:$ git submodule init ----只在首次檢出倉庫時運行一次就行
更新子模組:$ git submodule update ----每次更新或切換分支後都需要運行一下
刪除子模組:(分4步走哦)
1) $ git rm --cached [path]
2) 編輯“.gitmodules”檔案,將子模組的相關配置節點刪除掉
3) 編輯“ .git/config”檔案,將子模組的相關配置節點刪除掉
4) 手動刪除子模組殘留的目錄
5)忽略一些檔案、檔案夾不提交
在倉庫根目錄下建立名稱為“.gitignore”的檔案,寫入不需要的檔案夾名或檔案,每個元素佔一行即可,如
target
bin
*.db
3、 Git 命令詳解
現在我們有了本地和遠端版本庫,讓我們來試著用用Git的基本命令:
git pull:從其他的版本庫(既可以是遠端也可以是本地的)將代碼更新到本地,例如:‘git pull origin master‘就是將origin這個版本庫的代碼更新到本地的master主枝,該功能類似於SVN的update
git add:是將當前更改或者新增的檔案加入到Git的索引中,加入到Git的索引中就表示記入了版本曆史中,這也是提交之前所需要執行的一步,例如‘git add app/model/user.rb‘就會增加app/model/user.rb檔案到Git的索引中,該功能類似於SVN的add
git rm:從當前的工作空間中和索引中刪除檔案,例如‘git rm app/model/user.rb‘,該功能類似於SVN的rm、del
git commit:提交當前工作空間的修改內容,類似於SVN的commit命令,例如‘git commit -m story #3, add user model‘,提交的時候必須用-m來輸入一條提交資訊,該功能類似於SVN的commit
git push:將本地commit的代碼更新到遠程版本庫中,例如‘git push origin‘就會將本地的代碼更新到名為orgin的遠程版本庫中
git log:查看曆史日誌,該功能類似於SVN的log
git revert:還原一個版本的修改,必須提供一個具體的Git版本號碼,例如‘git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20‘,Git的版本號碼都是產生的一個雜湊
上面的命令幾乎都是每個版本控制工具所公有的,下面就開始嘗試一下Git專屬的一些命令:
git branch:對分支的增、刪、查等操作,例如‘git branch new_branch‘會從當前的工作版本建立一個叫做new_branch的新分支,‘git branch -D new_branch‘就會強制移除叫做new_branch的分支,‘git branch‘就會列出本地所有的分支
git checkout:Git的checkout有兩個作用,其一是在不同的branch之間進行切換,例如‘git checkout new_branch‘就會切換到new_branch的分支上去;另一個功能是還原代碼的作用,例如‘git checkout app/model/user.rb‘就會將user.rb檔案從上一個已提交的版本中更新回來,未提交的內容全部會復原
git rebase:用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,實際上是將分支點從C移到了G,這樣分支也就具有了從C到G的功能
git reset:將當前的工作目錄完全復原到指定的版本號碼,假設如,我們有A-G五次提交的版本,其中C的版本號碼是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20,我們執行了‘git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20‘那麼結果就只剩下了A-C三個提交的版本
git stash:將當前未提交的工作存入Git工作棧中,時機成熟的時候再應用回來,這裡暫時提一下這個命令的用法,後面在技巧篇會重點講解
git config:利用這個命令可以新增、更改Git的各種設定,例如‘git config branch.master.remote origin‘就將master的遠程版本庫設定為別名叫做origin版本庫,後面在技巧篇會利用這個命令個人化你的Git,為你打造獨一無二的 Git
git tag:可以將某個具體的版本打上一個標籤,這樣你就不需要記憶複雜的版本號碼雜湊值了,例如你可以使用‘git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20‘來標記這個被你還原的版本,那麼以後你想查看該版本時,就可以使用 revert_version標籤名,而不是雜湊值了
本文出自 “小五台車神” 部落格,請務必保留此出處http://linuxtech.blog.51cto.com/3670088/1772592
GIT簡介以及在Centos上的安裝