Git命令詳解


一個中文git手冊:http://progit.org/book/zh/

 

原文:http://blog.csdn.net/sunboy_2050/article/details/7529841

前面兩篇博客 Git 版本管理工具 和 Git 常用命令詳解,分別介紹了Git 基礎知識和命令用法

 

本文將對Git 命令,做一下全面而系統的簡短總結,整理成簡潔、明了的圖表結構,方便查詢

  

一、 Git 常用命令速查

 

git branch 查看本地所有分支
git status 查看當前狀態 
git commit 提交
 
git branch -a 查看所有的分支
git branch -r 查看遠程所有分支
git commit -am "init" 提交並且加注釋 

git remote add origin git@192.168.1.119:ndshow
git push origin master 將文件給推到服務器上 
git remote show origin 顯示遠程庫origin里的資源 
git push origin master:develop
git push origin master:hb-dev 將本地庫與服務器上的庫進行關聯 
git checkout --track origin/dev 切換到遠程dev分支
git branch -d master develop 刪除本地庫develop
git checkout -b dev 建立一個新的本地分支dev
git merge origin/dev 將分支dev與當前分支進行合並
git checkout dev 切換到本地dev分支
git remote show 查看遠程庫
git add .
git rm 文件名(包括路徑) 從git中刪除指定文件
git clone git://github.com/schacon/grit.git 從服務器上將代碼給拉下來
git config --list 看所有用戶
git ls-files 看已經被提交的
git rm [file name] 刪除一個文件
git commit -a 提交當前repos的所有的改變
git add [file name] 添加一個文件到git index
git commit -v 當你用-v參數的時候可以看commit的差異
git commit -m "This is the message describing the commit" 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暫存的更新
git rm a.a 移除文件(從暫存區和工作區中刪除)
git rm --cached a.a 移除文件(只從暫存區中刪除)
git commit -m "remove" 移除文件(從Git中刪除)
git rm -f a.a 強行移除修改后文件(從暫存區和工作區中刪除)
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git stash push 將文件給push到一個臨時空間中
git stash pop 將文件從臨時空間pop下來
---------------------------------------------------------
git remote add origin git@github.com:username/Hello-World.git
git push origin master 將本地項目給提交到服務器中
-----------------------------------------------------------
git pull 本地與服務器端同步
-----------------------------------------------------------------
git push (遠程倉庫名) (分支名) 將本地分支推送到服務器上去。
git push origin serverfix:awesomebranch
------------------------------------------------------------------
git fetch 相當於是從遠程獲取最新版本到本地,不會自動merge
git commit -a -m "log_message" (-a是提交所有改動,-m是加入log信息) 本地修改同步至服務器端 :
git branch branch_0.1 master 從主分支master創建branch_0.1分支
git branch -m branch_0.1 branch_1.0 將branch_0.1重命名為branch_1.0
git checkout branch_1.0/master 切換到branch_1.0/master分支

刪除遠程branch 

git push origin :branch_remote_name

 

git branch -r -d branch_remote_name

-----------------------------------------------------------

 

初始化版本庫,並提交到遠程服務器端
mkdir WebApp
cd WebApp
git init本地初始化
touch README
git add README添加文件
git commit -m 'first commit'
git remote add origin git@github.com:daixu/WebApp.git 增加一個遠程服務器端

 

上面的命令會增加URL地址為'git@github.com:daixu/WebApp.git',名稱為origin的遠程服務器庫,以后提交代碼的時候只需要使用 origin別名即可

 

 

二、 Git 命令速查表

 

1、常用的Git命令

命令

簡要說明

git add

添加至暫存區

git add–interactive

交互式添加

git apply

應用補丁

git am

應用郵件格式補丁

git annotate

同義詞,等同於 git blame

git archive

文件歸檔打包

git bisect

二分查找

git blame

文件逐行追溯

git branch

分支管理

git cat-file

版本庫對象研究工具

git checkout

檢出到工作區、切換或創建分支

git cherry-pick

提交揀選

git citool

圖形化提交,相當於 git gui 命令

git clean

清除工作區未跟蹤文件

git clone

克隆版本庫

git commit

提交

git config

查詢和修改配置

git describe

通過里程碑直觀地顯示提交ID

git diff

差異比較

git difftool

調用圖形化差異比較工具

git fetch

獲取遠程版本庫的提交

git format-patch

創建郵件格式的補丁文件。參見 git am 命令

git grep

文件內容搜索定位工具

git gui

基於Tcl/Tk的圖形化工具,側重提交等操作

git help

幫助

git init

版本庫初始化

git init-db*

同義詞,等同於 git init

git log

顯示提交日志

git merge

分支合並

git mergetool

圖形化沖突解決

git mv

重命名

git pull

拉回遠程版本庫的提交

git push

推送至遠程版本庫

git rebase

分支變基

git rebase–interactive

交互式分支變基

git reflog

分支等引用變更記錄管理

git remote

遠程版本庫管理

git repo-config*

同義詞,等同於 git config

git reset

重置改變分支“游標”指向

git rev-parse

將各種引用表示法轉換為哈希值等

git revert

反轉提交

git rm

刪除文件

git show

顯示各種類型的對象

git stage*

同義詞,等同於 git add

git stash

保存和恢復進度

git status

顯示工作區文件狀態

git tag

里程碑管理

 

2、對象庫操作相關命令

 

命令

簡要說明

git commit-tree

從樹對象創建提交

git hash-object

從標准輸入或文件計算哈希值或創建對象

git ls-files

顯示工作區和暫存區文件

git ls-tree

顯示樹對象包含的文件

git mktag

讀取標准輸入創建一個里程碑對象

git mktree

讀取標准輸入創建一個樹對象

git read-tree

讀取樹對象到暫存區

git update-index

工作區內容注冊到暫存區及暫存區管理

git unpack-file

創建臨時文件包含指定 blob 的內容

git write-tree

從暫存區創建一個樹對象

 

3、引用操作相關命令

 

命令

簡要說明

git check-ref-format

檢查引用名稱是否符合規范

git for-each-ref

引用迭代器,用於shell編程

git ls-remote

顯示遠程版本庫的引用

git name-rev

將提交ID顯示為友好名稱

git peek-remote*

過時命令,請使用 git ls-remote

git rev-list

顯示版本范圍

git show-branch

顯示分支列表及拓撲關系

git show-ref

顯示本地引用

git symbolic-ref

顯示或者設置符號引用

git update-ref

更新引用的指向

git verify-tag

校驗 GPG 簽名的Tag

 

4、版本庫管理相關命令

 

命令

簡要說明

git count-objects

顯示松散對象的數量和磁盤占用

git filter-branch

版本庫重構

git fsck

對象庫完整性檢查

git fsck-objects*

同義詞,等同於 git fsck

git gc

版本庫存儲優化

git index-pack

從打包文件創建對應的索引文件

git lost-found*

過時,請使用 git fsck –lost-found 命令

git pack-objects

從標准輸入讀入對象ID,打包到文件

git pack-redundant

查找多余的 pack 文件

git pack-refs

將引用打包到 .git/packed-refs 文件中

git prune

從對象庫刪除過期對象

git prune-packed

將已經打包的松散對象刪除

git relink

為本地版本庫中相同的對象建立硬連接

git repack

將版本庫未打包的松散對象打包

git show-index

讀取包的索引文件,顯示打包文件中的內容

git unpack-objects

從打包文件釋放文件

git verify-pack

校驗對象庫打包文件

 

5、數據傳輸相關命令

 

命令

簡要說明

 

git fetch-pack

執行 git fetch 或 git pull 命令時在本地執行此命令,用於從其他版本庫獲取缺失的對象

git receive-pack

執行 git push 命令時在遠程執行的命令,用於接受推送的數據

git send-pack

執行 git push 命令時在本地執行的命令,用於向其他版本庫推送數據

git upload-archive

執行 git archive –remote 命令基於遠程版本庫創建歸檔時,遠程版本庫執行此命令傳送歸檔

git upload-pack

執行 git fetch 或 git pull 命令時在遠程執行此命令,將對象打包、上傳

 

6、郵件相關命令

 

命令

簡要說明

git imap-send

將補丁通過 IMAP 發送

git mailinfo

從郵件導出提交說明和補丁

git mailsplit

將 mbox 或 Maildir 格式郵箱中郵件逐一提取為文件

git request-pull

創建包含提交間差異和執行PULL操作地址的信息

git send-email

發送郵件

 

7、協議相關命令

 

命令

簡要說明

git daemon

實現Git協議

git http-backend

實現HTTP協議的CGI程序,支持智能HTTP協議

git instaweb

即時啟動瀏覽器通過 gitweb 瀏覽當前版本庫

git shell

受限制的shell,提供僅執行Git命令的SSH訪問

git update-server-info

更新啞協議需要的輔助文件

git http-fetch

通過HTTP協議獲取版本庫

git http-push

通過HTTP/DAV協議推送

git remote-ext

由Git命令調用,通過外部命令提供擴展協議支持

git remote-fd

由Git命令調用,使用文件描述符作為協議接口

git remote-ftp

由Git命令調用,提供對FTP協議的支持

git remote-ftps

由Git命令調用,提供對FTPS協議的支持

git remote-http

由Git命令調用,提供對HTTP協議的支持

git remote-https

由Git命令調用,提供對HTTPS協議的支持

git remote-testgit

協議擴展示例腳本

 

8、版本庫轉換和交互相關命令

 

命令

簡要說明

git archimport

導入Arch版本庫到Git

git bundle

提交打包和解包,以便在不同版本庫間傳遞

git cvsexportcommit

將Git的一個提交作為一個CVS檢出

git cvsimport

導入CVS版本庫到Git。或者使用 cvs2git

git cvsserver

Git的CVS協議模擬器,可供CVS命令訪問Git版本庫

git fast-export

將提交導出為 git-fast-import 格式

git fast-import

其他版本庫遷移至Git的通用工具

git svn

Git 作為前端操作 Subversion

 

9、合並相關的輔助命令

 

命令

簡要說明

git merge-base

供其他腳本調用,找到兩個或多個提交最近的共同祖先

git merge-file

針對文件的兩個不同版本執行三向文件合並

git merge-index

對index中的沖突文件調用指定的沖突解決工具

git merge-octopus

合並兩個以上分支。參見 git merge 的octopus合並策略

git merge-one-file

由 git merge-index 調用的標准輔助程序

git merge-ours

合並使用本地版本,拋棄他人版本。參見 git merge 的ours合並策略

git merge-recursive

針對兩個分支的三向合並。參見 git merge 的recursive合並策略

git merge-resolve

針對兩個分支的三向合並。參見 git merge 的resolve合並策略

git merge-subtree

子樹合並。參見 git merge 的 subtree 合並策略

git merge-tree

顯式三向合並結果,不改變暫存區

git fmt-merge-msg

供執行合並操作的腳本調用,用於創建一個合並提交說明

git rerere

重用所記錄的沖突解決方案

 

10、 雜項

 

 

命令

簡要說明

git bisect–helper

由 git bisect 命令調用,確認二分查找進度

git check-attr

顯示某個文件是否設置了某個屬性

git checkout-index

從暫存區拷貝文件至工作區

git cherry

查找沒有合並到上游的提交

git diff-files

比較暫存區和工作區,相當於 git diff –raw

git diff-index

比較暫存區和版本庫,相當於 git diff –cached –raw

git diff-tree

比較兩個樹對象,相當於 git diff –raw A B

git difftool–helper

由 git difftool 命令調用,默認要使用的差異比較工具

git get-tar-commit-id

從 git archive 創建的 tar 包中提取提交ID

git gui–askpass

命令 git gui 的獲取用戶口令輸入界面

git notes

提交評論管理

git patch-id

補丁過濾行號和空白字符后生成補丁唯一ID

git quiltimport

將Quilt補丁列表應用到當前分支

git replace

提交替換

git shortlog

對 git log 的匯總輸出,適合於產品發布說明

git stripspace

刪除空行,供其他腳本調用

git submodule

子模組管理

git tar-tree

過時命令,請使用 git archive

git var

顯示 Git 環境變量

git web–browse

啟動瀏覽器以查看目錄或文件

git whatchanged

顯示提交歷史及每次提交的改動

git-mergetool–lib

包含於其他腳本中,提供合並/差異比較工具的選擇和執行

git-parse-remote

包含於其他腳本中,提供操作遠程版本庫的函數

git-sh-setup

包含於其他腳本中,提供 shell 編程的函數庫

 

 

 


 

原文:http://hi.baidu.com/wade_hit/item/848869db05e53af4cb0c391b

 

總結一下ubuntu下github常用的命令,設置部分跳過,假設repository的名字叫hello-world:

 

 

 

1.創建一個新的repository:

 

先在github上創建並寫好相關名字,描述。

 

$cd ~/hello-world        //到hello-world目錄

 

$git init                     //初始化

 

$git add .                   //把所有文件加入到索引(不想把所有文件加入,可以用gitignore或add 具體文件)

 

$git commit               //提交到本地倉庫,然后會填寫更新日志( -m “更新日志”也可)

 

$git remote add origin git@github.com:WadeLeng/hello-world.git        //增加到remote

 

$git push origin master    //push到github上

 

2.更新項目(新加了文件):

 

$cd ~/hello-world

 

$git add .                  //這樣可以自動判斷新加了哪些文件,或者手動加入文件名字

 

$git commit              //提交到本地倉庫

 

$git push origin master    //不是新創建的,不用再add 到remote上了

 

3.更新項目(沒新加文件,只有刪除或者修改文件):

 

$cd ~/hello-world

 

$git commit -a          //記錄刪除或修改了哪些文件

 

$git push origin master  //提交到github

 

4.忽略一些文件,比如*.o等:

 

$cd ~/hello-world

 

$vim .gitignore     //把文件類型加入到.gitignore中,保存

 

然后就可以git add . 能自動過濾這種文件

 

5.clone代碼到本地:

 

$git clone git@github.com:WadeLeng/hello-world.git

 

假如本地已經存在了代碼,而倉庫里有更新,把更改的合並到本地的項目:

 

$git fetch origin    //獲取遠程更新

 

$git merge origin/master //把更新的內容合並到本地分支

 

6.撤銷

 

$git reset

 

7.刪除

 

$git rm  * // 不是用rm

 

//------------------------------常見錯誤-----------------------------------

 

1.$ git remote add origin git@github.com:WadeLeng/hello-world.git

 錯誤提示:fatal: remote origin already exists.

 解決辦法:$ git remote rm origin

 然后在執行:$ git remote add origin git@github.com:WadeLeng/hello-world.git 就不會報錯誤了

 

 2. $ git push origin master

 錯誤提示:error:failed to push som refs to

 解決辦法:$ git pull origin master //先把遠程服務器github上面的文件拉先來,再push 上去。

 

Git 是一個很強大的分布式版本管理工具,它不但適用於管理大型開源軟件的源代碼(如:linux kernel),管理私人的文檔和源代碼也有很多優勢(如:wsi-lgame-pro

Git 的更多介紹,請參考我的上一篇博客:Git 版本管理工具

 

一、 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別名即可

 

 

Git 是一個很強大的分布式版本管理工具,它不但適用於管理大型開源軟件的源代碼(如:linux kernel),管理私人的文檔和源代碼也有很多優勢(如:wsi-lgame-pro

Git 的更多介紹,請參考我的上一篇博客:Git 版本管理工具

 

一、 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別名即可

 

 

二、 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

 

三、 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標簽名,而不是哈希值了

Git 之所以能夠提供方便的本地分支等特性,是與它的文件存儲機制有關的。Git存儲版本控制信息時使用它自己定義的一套文件系統存儲機制,在代碼根目錄下有一個.git文件夾,會有如下這樣的目錄結構:

 

 


 

 

有 幾個比較重要的文件和目錄需要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git采用這種樹形結構來存儲版本信息,那么 HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各種不同引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有heads、 remotes、stash、tags四個子目錄,分別存儲對不同的根、遠程版本庫、Git棧和標簽的四種引用,你可以通過命令'git show-ref'更清晰地查看引用信息;logs目錄根據不同的引用存儲了日志信息。因此,Git只需要代碼根目錄下的這一個.git目錄就可以記錄完 整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那么下面就來看一下Git與SVN的區別吧

 

 

四、 Git 與SVN 比較

SVN(Subversion)是當前使用最多的版本控制工具。與它相比較,Git 最大的優勢在於兩點:易於本地增加分支和分布式的特性

下面兩幅圖可以形象的展示Git與SVN的不同之處:

 

 

 

 

------------

 

 

 

 

1)本地增加分支

圖中Git本地和服務器端結構都很靈活,所有版本都存儲在一個目錄中,你只需要進行分支的切換即可達到在某個分支工作的效果

而SVN則完全不同,如果你需要在本地試驗一些自己的代碼,只能本地維護多個不同的拷貝,每個拷貝對應一個SVN服務器地址

 

舉一個實際的例子:

使用SVN作為版本控制工具,當正在試圖增強一個模塊,工作做到一半,由於會改變原模塊的行為導致代碼服務器上許多測試的失敗,所以並沒有提交代碼。

這 時候假如現在有一個很緊急的Bug需要處理, 必須在兩個小時內完成。我只好將本地的所有修改diff,並輸出成為一個patch文件,然后回滾有關當前任務的所有代碼,再開始修改Bug的任務,等到 修改好后,在將patch應用回來。前前后后要完成多個繁瑣的步驟,這還不計中間代碼發生沖突所要進行的工作量。

可是如果使用Git, 我們只需要開一個分支或者轉回到主分支上,就可以隨時開始Bug修改的任務,完成之后,只要切換到原來的分支就可以優雅的繼續以前的任務。只要你願意,每一個新的任務都可以開一個分支,完成后,再將它合並到主分支上,輕松而優雅。

 

2)分布式提交

Git 可以本地提交代碼,所以在上面的圖中,Git有利於將一個大任務分解,進行本地的多次提交

而SVN只能在本地進行大量的一次性更改,導致將來合並到主干上造成巨大的風險

 

3)日志查看

Git 的代碼日志是在本地的,可以隨時查看

SVN的日志在服務器上的,每次查看日志需要先從服務器上下載下來

例如:代碼服務器在美國,當每次查看幾年前所做的工作時,日志下載可能需要十分鍾,這不能不說是一個痛苦。但是如果遷移到Git上,利用Git日志在本地的特性,查看某個具體任務的所有代碼歷史,每次只需要幾秒鍾,大大方便了工作,提高了效率。

當然分布式並不是說用了Git就不需要一個代碼中心服務器,如果你工作在一個團隊里,還是需要一個服務器來保存所有的代碼的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM