搜尋
首頁開發工具Gitgit和svn實現的原理一樣嗎

git和svn實現的原理是不一樣的;git是分散式的版本控制系統,svn不是,這是git和svn非分散式的版本控制系統最核心的區別,git把內容按元資料方式存儲,而svn是按文件方式存儲。

git和svn實現的原理一樣嗎

本文操作環境:Windows10系統、Git2.30.0版、Dell G3電腦。

git和svn實作的原理一樣嗎

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和svn實現的原理一樣嗎

 圖中左邊為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage, index),標記為 "master" 的是 master 分支所代表的目錄樹。

 圖中我們可以看出此時 "HEAD" 實際上是指向 master 分支的一個"遊標"。所以圖示的指令中出現 HEAD 的地方可以用 master 來取代。

 圖中的 objects 所識別的區域為 Git 的物件庫,實際位於 ".git/objects" 目錄下,內麵包含了所建立的各種物件及內容。

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

 當執行提交作業(git commit)時,暫存區的目錄樹寫到版本庫(物件庫)中,master 分支會做相對應的更新。即 master 所指向的目錄樹就是提交時暫存區的目錄樹。

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

 當執行 "git rm --cached " 指令時,會直接從暫存區刪除文件,工作區則不做出改變。

 當執行 "git checkout ." 或 "git checkout -- " 指令時,會用暫存區全部或指定的檔案取代工作區的檔案。這個操作很危險,會清除工作區中未加入暫存區的變更。

 當執行"git checkout HEAD ." 或"git checkout HEAD " 指令時,會用HEAD 所指向的master 分支中的全部或部分檔案取代暫存區和以及工作區中的文件。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

推薦學習:《Git教學

#

以上是git和svn實現的原理一樣嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
git和github:他們的關係解釋了git和github:他們的關係解釋了Apr 18, 2025 am 12:03 AM

Git和GitHub不是同一個東西:Git是一個分佈式版本控制系統,而GitHub是一個基於Git的在線平台。 Git幫助開發者管理代碼版本,通過分支、合併等功能實現協作;GitHub則提供代碼託管、審查、問題管理和社交互動功能,增強了Git的協作能力。

Git下載後需要設置什麼嗎Git下載後需要設置什麼嗎Apr 17, 2025 pm 04:57 PM

安裝 Git 後,為了更有效地使用,需要進行以下設置:設置用戶信息(姓名和郵箱)選擇文本編輯器設置外部合併工俱生成 SSH 秘鑰設置忽略文件模式

git下載不動怎麼辦git下載不動怎麼辦Apr 17, 2025 pm 04:54 PM

解決 Git 下載速度慢時可採取以下步驟:檢查網絡連接,嘗試切換連接方式。優化 Git 配置:增加 POST 緩衝區大小(git config --global http.postBuffer 524288000)、降低低速限制(git config --global http.lowSpeedLimit 1000)。使用 Git 代理(如 git-proxy 或 git-lfs-proxy)。嘗試使用不同的 Git 客戶端(如 Sourcetree 或 Github Desktop)。檢查防火

git為什麼下載這麼慢git為什麼下載這麼慢Apr 17, 2025 pm 04:51 PM

Git 下載慢的原因包括網絡連接差、Git 服務器問題、大文件或大量提交、Git 配置問題、計算機資源不足以及其他因素,如惡意軟件。解決方法包括改善網絡連接、調整防火牆設置、避免下載不必要的文件或提交、優化 Git 配置、提供充足的計算機資源以及掃描並刪除惡意軟件。

git怎麼更新本地代碼git怎麼更新本地代碼Apr 17, 2025 pm 04:48 PM

如何更新本地 Git 代碼?用 git fetch 從遠程倉庫拉取最新更改。用 git merge origin/<遠程分支名稱> 將遠程變更合併到本地分支。解決因合併產生的衝突。用 git commit -m "Merge branch <遠程分支名稱>" 提交合併更改,應用更新。

git怎麼更新代碼git怎麼更新代碼Apr 17, 2025 pm 04:45 PM

更新 git 代碼的步驟:檢出代碼:git clone https://github.com/username/repo.git獲取最新更改:git fetch合併更改:git merge origin/master推送更改(可選):git push origin master

git怎麼刪除分支git怎麼刪除分支Apr 17, 2025 pm 04:42 PM

可以通過以下步驟刪除 Git 分支:1. 刪除本地分支:使用 git branch -d <branch-name> 命令;2. 刪除遠程分支:使用 git push <remote-name> --delete <branch-name> 命令;3. 保護分支:使用 git config branch. <branch-name>.protected true 添加保護分支設置。

git怎麼合併代碼git怎麼合併代碼Apr 17, 2025 pm 04:39 PM

Git 代碼合併過程:拉取最新更改以避免衝突。切換到要合併的分支。發起合併,指定要合併的分支。解決合併衝突(如有)。暫存和提交合併,提供提交消息。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版