Git和SVN命令-对比
SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的版本控制器!这是两者之间最核心的区别。
SVN只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
Git每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
Git和SVN命令-对比
1.git是分布式的,有本地和远程两个版本库,SVN是集中式,只有一个远程版本库;
2.git的内容是按元数据方式存贮,所有控制文件在.git中,svn是按文件处理,所有资源控制文件在.svn中;
3.svn的分支是一个目录,git不是;
4.git没有一个全局的版本号,svn有;
5.git内容存贮是使用SHA-1哈希算法,能确保代码完整性;
6.git 有工作区,暂存区,远程仓库,git add将代码提交到暂存区, commit提交到本地版本库,push推送到远程版本库。svn是add 提交到暂存,commit是提交到远程版本库。
作用 | git | svn |
---|---|---|
版本库初始化 | git init | svn create |
clone | git clone | svn co(checkout) |
add | git add (.除去.gitignore,*所有的文件) | svn add |
commit | git commit | svn commit |
pull | git pull | svn update |
push | git push | - |
查看工作状态 | git status | svn status |
创建分支 | git branch <分支名> | svn cp <分支名> |
删除分支 | git branch -d <分支名> | svn rm <分支名> |
分支合并 | git merge <分支名> | svn merge <分支名> |
工作区差异 | git differ (-cached / head) | svn diff |
更新至历史版本 | git checkout | svn update -r |
切换tag | git checkout | svn switch |
切换分支 | git checkout branch | svn switch branch |
还原文件 | git checkout - path | svn revert path |
删除文件 | git rm path | svn rm path |
移动文件 | git mv path | svn mv path |
清除未追踪文件 | git clean | svn status sed -e |
实践
推荐大SVN仓库,不限私有,不限成员:SVNBucket
# checkout代码
svn co svn://svnbucket.com/xxx/xxx
# 更新代码
svn up
# 添加新文件到版本库
svn add filename
# 添加当前目录下所有java文件
svn add *.java
# 递归添加当前目录下的所有新文件
svn add . --no-ignore --force
# 提交代码
svn commit -m "提交描述"
# 查看指定文件的所有log
svn log test.java
# 查看指定版本号的log
svn log -r 100
# 撤销本地文件的修改(还没提交的)
svn revert test.java
svn revert -r 目录名
# 撤销目录下所有本地修改
svn revert --recursive 目录名
# 查看当前工作区的所有改动
svn diff
# 查看当前工作区test.php文件与最新版本的差异
svn diff test.java
# 指定版本号比较差异
svn diff -r 200:201 test.java
# 查看当前工作区和版本301中bin目录的差异
svn diff -r 301 bin
# 查看当前工作区的状态
svn status
# 查看svn信息
svn info
# 查看文件列表,可以指定-r查看,查看指定版本号的文件列表
svn ls
svn ls -r 100
# 显示文件的每一行最后是谁修改的(出了BUG,经常用来查这段代码是谁改的)
svn blame filename.java
# 查看指定版本的文件内容,不加版本号就是查看最新版本的
svn cat test.java -r 2
# 清理
svn cleanup
# 若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容
$ svn mkdir spool
$ svn propset svn:ignore '*' spool
$ svn ci -m 'Adding "spool" and ignoring its contents.'
# 若想创建一个文件夹,但不加入版本控制,即忽略这个文件夹
$ mkdir spool
$ svn propset svn:ignore 'spool' .
$ svn ci -m 'Ignoring a directory called "spool".'
# 切换当前项目到指定分支。服务器上更新新版本我们经常就用这个命令来把当前代码切换到新的分支
svn switch svn://svnbucket.com/test/branches/online1.0
# 重定向仓库地址到新地址
svn switch --relocate 原svn地址 新svn地址
# 创建分支,从主干创建一个分支保存到branches/online1.0
svn cp -m "描述内容" http://svnbucket.com/repos/trunk http://svnbucket.com/repos/branches/online1.0
# 合并主干上的最新代码到分支上
cd branches/online1.0
svn merge http://svnbucket.com/repos/trunk
# 分支合并到主干
svn merge --reintegrate http://svnbucket.com/repos/branches/online1.0
# 删除分支
svn rm http://svnbucket.com/repos/branches/online1.0
# 查看SVN帮助
svn help
# 查看指定命令的帮助信息
svn help commit
Pycharm中使用SVN的配置教程
https://svnbucket.com/posts/pycharm-svn/