中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Git和SVN的區別有哪些

發布時間:2021-10-28 15:00:49 來源:億速云 閱讀:168 作者:iii 欄目:web開發

這篇文章主要介紹“使用Git和SVN的區別有哪些”,在日常操作中,相信很多人在使用Git和SVN的區別有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”使用Git和SVN的區別有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Git與SVN的區別

存儲方式不同

Git把內容按元數據方式存儲類似k/v數據庫,而SVN是按文件(新版SVN已改成元數據存儲)

這里,我們給出一個簡單的Git使用示例。

cd .git/objects/df/ git cat-file -p df70460b4b4aece5915caf5c68d12f560a9de56e echo 'version1' > text.txt git hash-object -w text.txt

使用方式不同

從本地把文件推送遠程服務,SVN只需要commint 而Git需要 add、commint、push 三個步驟。

比如,我們使用下圖來模擬SVN的使用過程。

使用Git和SVN的區別有哪些

我們可以使用下圖來模擬Git的使用過程。

使用Git和SVN的區別有哪些

版本的管理模式不同

Git是一個分布式的版本管理系統,而要SVN是一個遠程集中式的管理系統。

例如,我們可以使用下圖來表示SVN的集中式管理。

使用Git和SVN的區別有哪些

我們可以使用下圖來表示Git的分布式管理。

使用Git和SVN的區別有哪些

Git核心命令總結

Git客戶端安裝

官方客戶端下載:https://git-scm.com/downloads

其他客戶端下載:https://tortoisegit.org/download/

Git命令的使用

(1)基于遠程倉庫克隆至本地

git clone <remote_url>

(2)當前目錄初始化為git 本地倉庫

git init  <directory>

(3)基于mvn 模板創建項目

mvn archetype:generate

本地添加

(1)添加指定文件至暫存區

git add <fileName>

(2)添加指定目錄至暫存區

git add <directory>

(3)添加所有

git add -A

(4)將指定目錄及子目錄移除出暫存區

git rm --cached target -r

(5)添加忽略配置文件 .gitignore

本地提交

(1)提交至本地倉庫

git commit file -m '提交的注釋信息'

(2)快捷提交至本地倉庫

git commit -am '快捷添加與提交'

分支管理

(1)查看當前分支

git branch [-avv]

(2)基于當前分支新建分支

git branch <branch name>

(3)基于提交新建分支

git branch <branch name> <commit id> $ git branch -d {dev}

(4)切換分支

git checkout <branch name>

(5)合并分支

git merge <merge target>

(6)解決沖突

如果因沖突導致自動合并失敗,此時 status 為mergeing 狀態。需要手動修改后重新提交(commit)

遠程倉庫管理

(1)查看遠程配置

git remote [-v]

(2)添加遠程地址

git remote add origin http:xxx.xxx

(3)刪除遠程地址

git remote remove origin

(4)上傳新分支至遠程

git push --set-upstream origin master

(5)將本地分支與遠程建立關聯

git branch --track --set-upstream-to=origin/test test

Tag管理

(1)查看當前

git tag

(2)創建分支

git tag <tag name> <branch name>

(3)刪除分支

git tag -d <tag name>

日志管理

(1)查看當前分支下所有提交日志

git log

(2)查看當前分支下所有提交日志

git log {branch}

(3)單行顯示日志

git log --oneline

(4)比較兩個版本的區別

git log master..experiment

(5)以圖表的方式顯示提交合并網絡

git log --pretty=format:'%h %s' --graph

Git底層原理

GIT存儲對像(hashMap)

Git 是一個內容尋址文件系統,其核心部分是一個簡單的鍵值對數據庫(key-value data  store),你可以向數據庫中插入任意內容,它會返回一個用于取回該值的hash 鍵。

(1) Git 鍵值庫中插入數據

echo 'binghe' | git hash-object -w --stdin 79362d07cf264f8078b489a47132afbc73f87b9a

(2)基于鍵獲取指定內容

git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a

Git基于該功能 把每個文件的版本中內容都保存在數據庫中,當要進行版本回滾的時候就通過其中一個鍵將其取回并替換。

Git版本寫入與回滾過程

(1)查找所有的git 對像

find .git/objects/ -type f

(2)寫入版本1

echo 'version1' > README.MF; git hash-object -w README.MF;

(3)寫入版本2

echo 'version2' > README.MF; git hash-object -w README.MF;

(4)寫入版本3

echo 'version3' > README.MF; git hash-object -w README.MF;

(5)回滾指定版本

git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF

所以我們平常用的 git add 其實就是把修改之后的內容 插入到鍵值庫中。當我們執行 git add README.MF 等同于執行了 git  hash-object -w README.MF 把文件寫到數據庫中。

我們解決了存儲的問題,但其只能存儲內容同并沒有存儲文件名,如果要進行回滾 怎么知道哪個內容對應哪個文件呢?接下要我們就看下樹對象,它解決了文件名存儲的問題  。

Git樹對象

樹對像解決了文件名的問題,它的目的將多個文件名組織在一起,其內包含多個文件名稱與其對應的Key和其它樹對像的用引用,可以理解成操作系統當中的文件夾,一個文件夾包含多個文件和多個其它文件夾。

每一個分支當中都關聯了一個樹對像,他存儲了當前分支下所有的文件名及對應的 key。通過以下命令即可查看

git cat-file -p master^{tree}

Git提交對象

一次提交即為當前版本的一個快照,該快照就是通過提交對像保存,其存儲的內容為:一個頂級樹對象、上一次提交的對像啥希、提交者用戶名及郵箱、提交時間戳、提交評論。

$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836  tree 002adb8152f7cd49f400a0480ef2d4c09b060c07  parent 8be903f5e1046b851117a21cdc3c80bdcaf97570  author binghe <binghe@gmail.com> 1532959457 +0800  committer binghe <binghe@gmail.com> 1532959457 +0800

綜上,我們可以推測出從修改一個文件到提交的過程總共生成了三個對象:

  • 一個內容對象:存儲了文件內容

  • 一個樹對像:存儲了文件名及內容對像的key

  • 一個提交對像:存儲了樹對像的key 及提交評論。

Git引用

當我們執行 git branch {branchName} 時創建了一個分支,其本質就是在git 基于指定提交創建了一個引用文件,保存在  .git\refs\heads\ 下。

(1)創建分支

git branch dev  cat.git\refs\heads\dev

Git總共 有三種類型的引用:

  • 分支引用

  • 遠程分支引用

  • 標簽引用

(2)查詢比較兩個版本

git log master..experiment

(3)版本提交歷史網絡

git log --pretty=format:'%h %s' --graph

(4)查看分支樹

git cat-file -p master^{tree}

到此,關于“使用Git和SVN的區別有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆河县| 仙桃市| 淮滨县| 忻州市| 富宁县| 岳阳市| 砀山县| 门头沟区| 阿克苏市| 会昌县| 广灵县| 平武县| 乌苏市| 阳曲县| 曲阜市| 呼伦贝尔市| 伊金霍洛旗| 韶关市| 阳山县| 沅陵县| 广水市| 绥棱县| 永春县| 奉新县| 彭泽县| 蒙阴县| 安阳县| 穆棱市| 曲沃县| 蒙自县| 信宜市| 广宗县| 南充市| 灌云县| 礼泉县| 祁阳县| 黔西| 平江县| 城市| 陇西县| 朝阳市|