git 和 svn 的比較


Git  VS SVN  
1 .功能
主體功能 Git SVN
1、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。 1 、SVN是基於關系數據庫的(BerkleyDB)或一系列二進制文件的(FS_FS)
2、在自己的機器上根據不同的開發目的,創建分支,修改代碼 2 、SVN采用標志和分支而拋棄了其他三件東西,實際上這意味着他們把
這個概念替換為在檔案庫內部復制文件或目錄以便保存日志。
3、在單機上自己創建的分支上提交代碼。 3、開發的時候不一定要鎖定
4、在單機上合並分支。 4、速度與穩定性看起來都不錯。
5、把服務器上最新版的代碼fetch下來,然后跟自己的主分支合並。 5、面向用戶的集中安全策略管理;
6、生成補丁(patch),把補丁發送給主開發者。  
7、看主開發者的反饋,如果主開發者發現兩個一般開發者之間有沖突
(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然后再由
其中一個人提交。如果主開發者可以自己解決,或者沒有沖突,就通過。
 
8、一般開發者之間解決沖突的方法,開發者之間可以使用pull 命令解決
沖突,解決完沖突之后再向主開發者提交補丁。
 
從主開發者的角度(假設主開發者
不用開發代碼)看,git有以下功能:
   
1、查看郵件或者通過其它方式查看一般開發者的提交狀態  
2、打上補丁,解決沖突(可以自己解決,也可以要求開發者之間解決以
后再重新提交,如果是開源項目,還要決定哪些補丁有用,哪些不用)。
 
3、向公共服務器提交結果,然后通知所有開發人員。  
2.優點    
1、適合分布式開發,強調個體。 1、管理方便,邏輯明確,符合一般人思維習慣。
2、公共服務器壓力和數據量都不會太大。 2、易於管理,集中式服務器更能保證安全性
3、速度快、靈活。 3、代碼一致性非常高。
4、任意兩個開發者之間可以很容易的解決沖突。 4、適合開發人數不多的項目開發。
5、離線工作。 5、大部分軟件配置管理的大學教材都是使用svn
   
3. 缺點  
1、學習周期相對而言比較長 1、服務器壓力太大,數據庫容量暴增。
2、不符合常規思維。 2、如果不能連接到服務器上,基本上不可以工作,看上面第二步,如果服務器
不能連接上,就不能提交,還原,對比等等。
3、代碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有代
碼和版本信息
一般集中式管理的有非常明確的權限管理機制(例如分支訪問限制),可以實現分層管理,從而很好的解決開發人數眾多的問題
   
區別
     
比較項目 Git 命令 SVN 命令
URL git://host/path/to/repos.git svn://host/path/to/repos
ssh://user@host/path/to/repos https://host/path/repos
file:///path/to/repos file:///path/to/repos
user@host:path/to/repos  
/path/to/repos.git  
版本庫初始化 git init[--bare]<path> svnadmin create<path>
導入數據 git clone; git add; git commit svn import<path><url>-m
版本庫檢驗出 git clone<url><path> svn checkout<url/of/trunk><path>
版本庫分支檢出 git clone -b <branch><url><path> svn checkout<url/ofranches/name><path>
工作區更新 git pull svn update
更新至歷史版本 git checkout <commit> suv update -r <rev>
更新到指定日期 git  checkout HEAD@'{<date>}' git update -r {<date>}
更新至最新提交 git checkout master git update -r HEAD
切換至里程碑 git checkout <tag> svn switch<url/of/tags/name>
切換至分支 git checkout <branch> svn switch<url/of/branches/name>
還原文件/強制覆蓋 git checkout --<path> svn revert<path>
添加文件 git add <path> svn add <path>
刪除文件 git rm <path> svn rm <path>
移動文件 git mv <old> <new> svn mv <old><new>
清除未跟蹤文件 git clean svn status | sed -e??
清除工作鎖定 _ svn clean
讀取文件歷史版本 git show <commit>:<path>><output> svn cat -r<rev><url/of/file>@<rev>><output>
反刪除文件 git add <path> svn cp -r
工作區差異比較 git diff
git diff --cached
git diff HEAD
svn diff
版本間差異比較 git diff <commit1><commit2>--<path> svn diff -r <rev1>:<rev2><path>
查看工作區狀態 git status -s svn status
提交 git commit -a -m "<msg>":git push svn commit -m "<msg>"
顯示提交日志 git log svn log | less
逐行追溯 git blame git blame
顯示里程碑/分支 git tag
git branch
git show -ref
svn ls <url/of/tags/>
svn ls <url/of/branches/>
創建里程碑 git tag [-m "<msg>"]<tagname> [<commit>] svn cp <url/of/trunk><url/of/tags/name>
刪除里程碑 git tag -d <tagname> svn  rm <url/of/tags/name>
創建分支 git branch <brach> <commit> git checkout -b <branch><commit> svn cp <url/of/trunk> <url/braches/name>
刪除分支 git bracn -d<branch> svn rm <url/of/branches/name>
導出項目文件 git archive -o <output.tar><commit> svn export -r <rev> <path><oupt/path>
svn export -r <rev><url><output/path>
反轉提交 git revert<commit> git merge -c <rev>
提交練選 git cherry-pick<commit> git merg -c <rev>
分支合並 git merge <branch> svn merge <url/of/branch>
沖突解決 git mergetool
git add <path>
svn resolve --accept = <ARG><path>
svn resolved<path>
顯示文件列表 git ls-files
git ls-tree<commit>
git ls
git ls <url> -r <rev>
更改提交說明 git commit -amend svn ps -revprop -r <rev>svn:log "<<msg>"
撤銷提交 git reset[--soft|hard]HEAD^ svnadmin dump, svnadmin load ,svndumpfiler
屬性 .gitignore 文件
text 屬性
eol 屬性
git submodule  命令
svn :ignore
svn: mime-type
svn:eol-style
svn:externals
svn:keywords


免責聲明!

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



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