导言

作为一个只用过git的童鞋,因为工作需要遇见了svn。初次见面时还很羞涩,经过了一段时间的交往,我们之间的关系突飞猛进,也成功地收到了svn的“好人卡”(这是个悲伤的故事)。所以为了让和我一样的svn新童鞋能够快速收获好人卡,整理了一下git和svn各种操作的对应关系,希望可以帮助到大家。

svn简介

从使用的角度来说,svn和git的最大区别是svn是集中式版本控制,svn是分布式版本控制。svn本地保存的是远程仓库的镜像,没有本地仓库 or 本地分支的概念,所以每次commit都是直接提交到远程仓库。而git每次commit是对本地分支操作,即提交到本地仓库的某个分支,然后再将本地分支的修改同步到远程仓库。

git与svn命令对应关系

git命令 svn命令 备注
git –version svn –version 查看git or svn的版本
git clone \$url svn checkout \$url
或者 svn co \$url
git add svn add
git status svn status svn没有自带彩色显示,哭~
git diff svn diff
git diff \$file svn diff \$file
git pull svn update 或者 svn up 一般说up一下就是update一下
git commit -m \$comment svn不支持本地commit,commit直接push到远程仓库
git push svn不支持本地commit,所以也不存在push的概念
git commit -m \$comment &&
git push
svn commit -m \$comment
或者 svn ci -m $comment
git commit + push的效果和svn commit相同。git push之前需要先pull一下,对应的,svn commit之前需要update一下。
git log svn log | less 直接使用svn log会直接打印所有log,如果commit很多的话就233333
git show \$version svn diff -c \$version 查看某个commit的变更内容
git diff \$version1 \$version2 svn diff -r \$version1:\$version2 查看两次commit的差异
git diff \$version1 \$version2 $file svn diff -r \$version1 \$version2 $file 查看两次commit的差异,$file可以是目录或者文件
git clean -df svn st | grep ‘^?’ | awk ‘{print \$2}’ | xargs rm -rf

如果svn版本大于等于1.9,还可以使用:
svn cleanup . –remove-unversioned
git checkout \$file svn revert \$file svn没有暂存区的概念,所以svn是从最新的版本库本地镜像里面checkout
git reset –hard HEAD svn revert . -R 完全回退到最近一次commit
git reset \$version svn revert . -R &&
svn merge -r HEAD:\$version .
svn merge不会修改commit历史,只是用$version版本的文件覆盖当前文件。这点和git不一样
git reset –hard \$version svn revert . -R &&
svn update -r \$version
svn update会回退本地镜像的commit历史,远程仓库不受影响,提交前本地镜像的commit历史必须恢复到和远端一致。
git reset –hard \$version &&
git push –force
svn revert . -R &&
svn merge -r HEAD:$version . &&
svn commit -m \$comment
svn远程仓库的commit历史是不可修改的,所以只能通过恢复$version的文件内容,并再次提交来实现伪hard reset。
git fetch svn没有本地分支的概念,所以没有和fetch对应的操作
git rm svn rm
git remote -v svn info 查看远程仓库信息
___________________________ ____________________________________ _____________________