回覆列表
  • 1 # 塵風沐雨Alick

    Git 和svn的最大區別以及Git原理介紹

    Git是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。

    Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。

    Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的方式,不必伺服器端軟體支援。

    一、Git 與 SVN 區別

    GIT不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。

    如果你是一個具有使用SVN背景的人,你需要做一定的思想轉換,來適應GIT提供的一些概念和特徵。

    Git 與 SVN 區別點:

    1、GIT是分散式的,SVN不是:這是GIT和其它非分散式的版本控制系統,例如SVN,CVS等,最核心的區別。

    2、GIT把內容按元資料方式儲存,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隱藏在一個類似.svn,.cvs等的資料夾裡。

    3、GIT分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。

    4、GIT沒有一個全域性的版本號,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特徵。

    5、GIT的內容完整性要優於SVN:GIT的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

    二、Git原理:Git 工作區、暫存區和版本庫

    基本概念

    我們先來理解下Git 工作區、暫存區和版本庫概念

    工作區:就是你在電腦裡能看到的目錄。

    暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)。

    版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

    三、Git常用操作指南

    使用Git前,需要先建立一個倉庫(repository)。您可以使用一個已經存在的目錄作為Git倉庫或建立一個空目錄。

    使用您當前目錄作為Git倉庫,我們只需使它初始化。

    git init

    使用我們指定目錄作為Git倉庫。

    git init newrepo

    從現在開始,我們將假設您在Git倉庫根目錄下,除非另有說明。

    新增新檔案

    我們有一個倉庫,但什麼也沒有,可以使用add命令新增檔案。

    git add filename

    可以使用add... 繼續新增任務檔案。

    提交版本

    現在我們已經添加了這些檔案,我們希望它們能夠真正被儲存在Git倉庫。

    為此,我們將它們提交到倉庫。

    git commit -m "Adding files"

    如果您不使用-m,會出現編輯器來讓你寫自己的註釋資訊。

    當我們修改了很多檔案,而不想每一個都add,想commit自動來提交本地修改,我們可以使用-a標識。

    git commit -a -m "Changed some files"

    千萬注意,-a不會造成新檔案被提交,只能修改。

    釋出版本

    我們先從伺服器克隆一個庫並上傳。

    git clone ssh://example.com/~/www/project.git

    現在我們修改之後可以進行推送到伺服器。

    git push ssh://example.com/~/www/project.git

    取回更新

    如果您已經按上面的進行push,下面命令表示,當前分支自動與唯一一個追蹤分支進行合併。

    git pull

    從非預設位置更新到指定的url。

    git pull http://git.example.com/project.git

    git rm file

    分支與合併

    分支在本地完成,速度快。要建立一個新的分支,我們使用branch命令。

    git branch test

    branch命令不會將我們帶入分支,只是建立一個新分支。所以我們使用checkout命令來更改分支。

    git checkout test

    第一個分支,或主分支,被稱為"master"。

    git checkout master

    對其他分支的更改不會反映在主分支上。如果想將更改提交到主分支,則需切換回master分支,然後使用合併。

    git checkout mastergit merge test

    git branch -d test

  • 2 # 風行科技說

    Git是Linus之父 Torvalds 為了管理 Linux 核心程式碼設計而開發的一個開源的版本控制系統。

    Linux核心的開發迭代是由眾多分散的程式設計師完成。當時大家常用的程式碼管理工具BitKeeper,因為不開源,引起我們的linux大佬強烈的不滿,但又讚許BitKeeper的優於其他工具的分散式架構,索性Torvalds自己開發了程式碼管理工具,就是GIT。聽說從無到實戰部署只花了10天時間。

    而GIT與Svn最核心的區別就是GIT是分散式架構平臺。而相對於Svn只是一個單純的檔案版本管理系統而言,GIT更是一個內容管理平臺,版本控制甚至只是一個次屬功能。

    我們瞭解GIT的結構就大致知道其工作原理。git分3個數據儲存區:

    工作區:存放專案檔案。

    暫存區:臨時存放的改動資料,即將提交到倉庫。

    git倉庫:最後存放檔案版本的倉庫。

    工作原理及主要操作命令:

    對工作區修改(或新增)- git add 。暫存區的目錄樹被更新,同時工作區修改(或新增)的檔案內容被寫入到一個新物件,而該物件的ID被記錄在暫存區的檔案索引中。

    執行提交操作 - git commit。暫存區的目錄樹寫到版本庫中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

    重置暫存區 - git reset HEAD。暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

    暫存區檔案覆蓋工作區 - git checkout 。會用暫存區全部或指定的檔案替換工作區的檔案。這個操作很危險,會清除工作區中未新增到暫存區的改動。

    版本master分支檔案覆蓋暫存區和工作區 - git checkout HEAD ,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及工作區中的檔案。這個命令極具危險性:因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

    至於svn,目前我用的極少,操作比git 簡單,兩者區別:

    GIT是分散式的,SVN只有一箇中央版本庫。 GIT把內容按元資料方式儲存,而SVN是按檔案方式。 Git下載下來後,在OffLine狀態下可以看到所有的Log,SVN不可以。 GIT沒有一個全域性的版本號,而SVN有,此點是svn的優點。SVN只能有一個指定中央版本庫。當這個中央版本庫有問題時,所有工作成員會沿襲錯誤。而 Git可以有無限個版本庫。 GIT的內容完整性要優於SVN。GIT的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

  • 中秋節和大豐收的關聯?
  • 在古文中?