Git vs SVN

一、Git vs SVN

Git 和 SVN 孰優孰好,每個人有不同的體驗。
Git是分布式的,SVN是集中式的
這是 Git 和 SVN 最大的區別。若能掌握這個概念,兩者區別基本搞懂大半。因為 Git 是分布式的,所以 Git 支持離線工作,在本地可以進行很多操作,包括接下來將要重磅推出的分支功能。而 SVN 必須聯網才能正常工作。

Git復雜概念多,SVN簡單易上手

所有同時掌握 Git 和 SVN 的開發者都必須承認,Git 的命令實在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟練掌握,還必須掌握rebase和merge的區別,fetch和pull的區別等,除此之外,還有cherry-pick,submodule,stash等功能,僅是這些名詞聽著都很繞。

在易用性這方面,SVN對于新手來說會更有好一些。但是從另外一方面看,Git 命令多意味著功能多,若我們能掌握大部分 Git 的功能,體會到其中的奧妙,會發現再也回不去 SVN 的時代了。

Git分支廉價,SVN分支昂貴

在版本管理里,分支是很常使用的功能。在發布版本前,需要發布分支,進行大需求開發,需要 feature 分支,大團隊還會有開發分支,穩定分支等。在大團隊開發過程中,常常存在創建分支,切換分支的求。

Git 分支是指針指向某次提交,而 SVN 分支是拷貝的目錄。這個特性使 Git 的分支切換非常迅速,并且創建成本非常低。

而且 Git 有本地分支,SVN 無本地分支。在實際開發過程中,經常會遇到有些代碼沒寫完,但是需緊急處理其他問題,若我們使用 Git,便可以創建本地分支存儲沒寫完的代碼,待問題處理完后,再回到本地分支繼續完成代碼。

二、Git 核心概念

Git 最核心的一個概念就是工作流。

*工作區(Workspace)是電腦中實際的目錄。
暫存區(Index)類似于緩存區域,臨時保存你的改動。
倉庫區(Repository),分為本地倉庫和遠程倉庫。

從 SVN 切換到 Git,最難理解并且最不能理解的是暫存區和本地倉庫。熟練使用 Git 后,會發現這簡直是神設計,由于這兩者的存在,使許多工作變得易管理。

通常提交代碼分為幾步:

1、git add從工作區提交到暫存區
2、git commit從暫存區提交到本地倉庫
3、git push或git svn dcommit從本地倉庫提交到遠程倉庫
一般來說,記住以下命令,便可進行日常工作了(圖片來源于網絡):

Git vs SVN

三、Git-SVN常用命令

若服務器使用的 SVN,但是本地想要體驗 Git 的本地分支,離線操作等功能,可以使用 Git-SVN功能。

常用操作如下:Git vs SVN

[ Git-SVN ]``

# 下載一個 SVN 項目和它的整個代碼歷史,并初始化為 Git 代碼庫
$ git svn clone -s [repository]
# 查看當前版本庫情況
$ git svn info
# 取回遠程倉庫所有分支的變化
$ git svn fetch
# 取回遠程倉庫當前分支的變化,并與本地分支變基合并
$ git svn rebase 
# 上傳當前分支的本地倉庫到遠程倉庫
$ git svn dcommit
# 拉取新分支,并提交到遠程倉庫
$ svn copy [remote_branch] [new_remote_branch] -m [message]
# 創建遠程分支對應的本地分支
$ git checkout -b [local_branch] [remote_branch]

四、初始化

從本節開始,除特殊說明,以下命令均適用于 Git 與 Git-SVN。


# 在當前目錄新建一個Git代碼庫
$ git init
# 下載一個項目和它的整個代碼歷史 [Git only]
$ git clone [url]

五、配置


# 列舉所有配置
$ git config -l
# 為命令配置別名
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.br branch
# 設置提交代碼時的用戶信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
Git 用戶的配置文件位于 ~/.gitconfigGit 單個倉庫的配置文件位于 ~/$PROJECT_PATH/.git/config

六、增刪文件

# 添加當前目錄的所有文件到暫存區
$ git add .
# 添加指定文件到暫存區
$ git add <file1> <file2> ...
# 添加指定目錄到暫存區,包括其子目錄
$ git add <dir>
# 刪除工作區文件,并且將這次刪除放入暫存區
$ git rm [file1] [file2] ...
# 停止追蹤指定文件,但該文件會保留在工作區
$ git rm --cached [file]
# 改名文件,并且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
把文件名 file1 添加到 .gitignore 文件里,Git 會停止跟蹤 file1 的狀態。

七、分支

# 列出所有本地分支
$ git branch
# 列出所有本地分支和遠程分支
$ git branch -a
# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]
# 新建一個分支,并切換到該分支
$ git checkout -b [new_branch] [remote-branch]
# 切換到指定分支,并更新工作區
$ git checkout [branch-name]
# 合并指定分支到當前分支
$ git merge [branch]
# 選擇一個 commit,合并進當前分支
$ git cherry-pick [commit]
# 刪除本地分支,-D 參數強制刪除分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push [remote] :[remote-branch]

八、提交

# 提交暫存區到倉庫區
$ git commit -m [message]
# 提交工作區與暫存區的變化直接到倉庫區
$ git commit -a
# 提交時顯示所有 diff 信息
$ git commit -v
# 提交暫存區修改到倉庫區,合并到上次修改,并修改上次的提交信息
$ git commit --amend -m [message]
# 上傳本地指定分支到遠程倉庫
$ git push [remote] [remote-branch]

九、拉取

# 下載遠程倉庫的所有變動 (Git only)
$ git fetch [remote]
# 顯示所有遠程倉庫 (Git only)
$ git remote -v
# 顯示某個遠程倉庫的信息 (Git only)
$ git remote show [remote]
# 增加一個新的遠程倉庫,并命名 (Git only)
$ git remote add [remote-name] [url]
# 取回遠程倉庫的變化,并與本地分支合并,(Git only), 若使用 Git-SVN,請查看第三節
$ git pull [remote] [branch]
# 取回遠程倉庫的變化,并與本地分支變基合并,(Git only), 若使用 Git-SVN,請查看第三節
$ git pull --rebase [remote] [branch]

十、撤銷

# 恢復暫存區的指定文件到工作區
$ git checkout [file]
# 恢復暫存區當前目錄的所有文件到工作區
$ git checkout .
# 恢復工作區到指定 commit
$ git checkout [commit]
# 重置暫存區的指定文件,與上一次 commit 保持一致,但工作區不變
$ git reset [file]
# 重置暫存區與工作區,與上一次 commit 保持一致
$ git reset --hard
# 重置當前分支的指針為指定 commit,同時重置暫存區,但工作區不變
$ git reset [commit]
# 重置當前分支的HEAD為指定 commit,同時重置暫存區和工作區,與指定 commit 一致
$ git reset --hard [commit]
# 新建一個 commit,用于撤銷指定 commit
$ git revert [commit]
# 將未提交的變化放在儲藏區
$ git stash
# 將儲藏區的內容恢復到當前工作區
$ git stash pop

十一、查詢

# 查看工作區文件修改狀態
$ git status 
# 查看工作區文件修改具體內容 
$ git diff [file]
# 查看暫存區文件修改內容
$ git diff --cached [file] 
# 查看版本庫修改記錄
$ git log 
# 查看某人提交記錄
$ git log --author=someone 
# 查看某個文件的歷史具體修改內容
$ git log -p [file] 
# 查看某次提交具體修改內容
$ git show [commit]

實際環境,Git的使用的確比SVN要多一點,畢竟功能要強大一些。

轉載于:https://blog.51cto.com/2416402119/2354520

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280136.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.net api 和java平臺對接技術總結

這兩天 一直和京東對接接口&#xff0c;我們用.net api 提供接口&#xff0c;對方用java調用&#xff0c;本來沒什么問題&#xff0c;但是對方對數據安全要求特別嚴&#xff0c;要驗簽&#xff0c;于是噩夢開始了。 1、在傳輸的時候&#xff0c;約定傳輸格式&#xff1a; HttpW…

Burpsuite學習(4)

2019獨角獸企業重金招聘Python工程師標準>>> burpsuite spider模塊通過跟蹤 HTML 和 JavaScript 以及提交的表單中的超鏈接來映射目標應用程序&#xff0c;它還使用了一些其他的線索&#xff0c;如目錄列表&#xff0c;資源類型的注釋&#xff0c;以及 robots.txt 文…

Git刪除分支/恢復分支

這是https://www.cnblogs.com/utank/p/7880441.html的方法&#xff0c;雖然很老現在有點不一樣&#xff0c;但總體還是能用的。 總結就是兩種方法 1.用commit的id恢復 2.用reflog的頭指針恢復 ?刪除一個已被終止的分支 如果需要刪除的分支不是當前正在打開的分支&#xff0c;使…

NetCore2.0Web應用之Startup

為什么80%的碼農都做不了架構師&#xff1f;>>> 作為main函數的程序啟動文件UseStartup 默認就是調用我們的整個應用程序的啟動文件 class Program{static void Main(string[] args){var host new WebHostBuilder().UseKestrel() // 指定WebServer為Kes…

windows XP系統下oracle完整卸載過程

NT環境下&#xff1a; 1、以NT的Administrator 登陸 2、通過控制面版-〉服務&#xff0c;停掉所有ORACLE服務 3、打開注冊表&#xff08;REGEDIT命令&#xff09;&#xff0c;刪除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 4、打開注冊表中的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont…

Hadoop----hdfs的基本操作

2019獨角獸企業重金招聘Python工程師標準>>> HDFS操作文件的基本命令 1.創建文件夾 $>hdfs dfs -mkdir /user/centos/hadoop 2.展示目錄 $>hdfs dfs -ls -r /user/centos/hadoop 3.遞歸展示 $>hdfs dfs -lsr /user/centos/hadoop 4.上傳文件 $&g…

原生sql實現restful接口調用

index.php <?phpinclude ./Request.php; include ./Response.php; //獲取數據 $dataRequest::getRequest(); $resultResponse::sendResponse($data); echo $result; ?> Request.php <?php class Request{private static $method_typearray(get,post,put,delete,pa…

彈幕效果

<!DOCTYPE html><html> <head> <meta charset"UTF-8"> <title>彈幕效果</title> <script src"../../jquery-1.12.4.min.js" type"text/javascript" charset"utf-8"></script> </h…

基于.NetCore開發博客項目 StarBlog - (21) 開始開發RESTFul接口

1前言最近電腦壞了&#xff0c;開源項目的進度也受到一些影響這篇醞釀很久了&#xff0c;作為本系列第二部分&#xff08;API接口開發&#xff09;的第一篇&#xff0c;得想一個好的開頭&#xff0c;想著想著就鴿了好久&#xff0c;索性不扯那么多了&#xff0c;直接開寫吧~2關…

03 Oracle分區表

Oracle分區表 先說句題外話… 歡迎成都天府軟件園的小伙伴來面基交流經驗~ 一&#xff1a;什么是分區&#xff08;Partition&#xff09;&#xff1f; 分區是將一個表或索引物理地分解為多個更小、更可管理的部分。 分區對應用透明&#xff0c;即對訪問數據庫的應用而言&…

windows獲取本地時間_如何在Windows 8中重新獲得本地登錄

windows獲取本地時間By default a fresh Windows 8 installation prompts you to create a synchronized cloud-enabled login. While there are distinct perks to Microsoft’s live login system, sometimes you just want to keep things simple and local. Read on as we …

如何解決高并發,秒殺問題

相信不少人會被這個問題困擾&#xff0c;分享大家一篇這樣的文章&#xff0c;希望能夠幫到你&#xff01; 一、秒殺業務為什么難做&#xff1f;1&#xff09;im系統&#xff0c;例如qq或者微博&#xff0c;每個人都讀自己的數據&#xff08;好友列表、群列表、個人信息&#xf…

Spring原理之代理與動態代理模式總結(四)

2019獨角獸企業重金招聘Python工程師標準>>> 代理模式 1&#xff0c;什么是代理模式&#xff1f; 代理模式的作用是&#xff1a;為其他對象提供一種代理以控制對這個對象的訪問。2&#xff0c;代理模式有什么好處&#xff1f; 在某些情況下&#xff0c;一個客戶不…

可執行文件添加快捷方式_如何停止Windows向快捷方式文件名添加“-快捷方式”...

可執行文件添加快捷方式When you make a new shortcut in Windows, it automatically adds “- Shortcut” to the end of the shortcut’s file name. This doesn’t seem like a big deal, but they can be bothersome. Sure, you can remove the text yourself when you cre…

Red hat6.4重新安裝yum

今天在Red Hat上安裝軟件時&#xff0c;發現需要依賴軟件&#xff0c;然而在用yum指令時&#xff0c;出現了下面的錯誤&#xff1a; This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. 出現這個問題的原因是&…

使用 BenchmarkDotNet 比較指定容量的 List 的性能

我們之前提到 List 是 .NET 中常用的數據結構&#xff0c;其在存儲大量數據時&#xff0c;如果能夠指定它的初始化容量&#xff0c;就會有性能提升。這個優化的方法并不是很明顯&#xff0c;因此本文將使用 BenchmarkDotNet 庫&#xff0c;通過定量對比的方式來證明這一點。實驗…

看明星合影爭C位,學PPT中C位排版法

在娛樂圈里&#xff0c;C位是大咖位&#xff0c;是對藝人實力的最好證明&#xff0c;藝人們自然會想著去力爭C位&#xff0c;正所謂“不想當將軍的兵不是好兵&#xff0c;不想站C位的明星不是好明星”。那么&#xff0c;C位是什么意思&#xff1f;C位&#xff0c;網絡流行語&am…

javafx由淺到深的 認識(一)

javafx是一款比較新興的語言框架,隨著javafx越來越實用,估計許多程序員也會慢慢接觸它,故我在這里對它由淺到深進行介紹一下. 首先,要了解javafx,就應該先知道.xml文件的布局軟件,以往java都是通過敲代碼來進行布局的,但javafx有力新的突破,它實現了拖動方式,目前我使用的輔助軟…

linux用戶的根目錄_為什么Linux允許用戶刪除根目錄?

linux用戶的根目錄Most of the time, none of us willingly performs an action that will literally break our operating systems and force us to reinstall them. But what if such an action could easily occur even by accident on the user’s part? Today’s SuperUs…

純css實現叉號

HMTL部分 <a href"#" class"close"></a> CSS部分 .close {position: absolute;right: 32px;top: 32px;width: 32px;height: 32px; } .close:before, .close:after {position: absolute;left: 15px;content: ;height: 33px;width: 2px;backgro…