svn是集中式的,git是分布式的,但是我们日常使用的都是按照集中式唯一服务器仓库的方式来去做的,最终我们的代码都要提交到一个唯一仓库中。
他们最大的区别是本地工作拷贝的工作方式不同,
一、svn本地工作拷贝,包括分支都是目录,直截了当,看到的就是服务器的,svn update 更新服务器到本地;svn commit 就是提交到服务器
二、git与svn对比,本地工作拷贝的工作方式就大大不同了,git主要是分支 有本地分支 和远程分支,也就是 local(即branch) 和remote 的区别,可以使用命令:
git remote -v #查看git仓库关联的远程分支,可以有多个,都有别名(例如 origin 对应着远程的 git@xxx.com/project/server.git)
git branch -v #查看本地分支,本地分支 可选设置 《上游分支》
git branch (--set-upstream-to=
如 git branch master --set-upstream-to origin/master #设置本地的master 的上游分支为 origin/master
分支 master 设置为跟踪来自 origin 的远程分支 master。
git status #查看当前分支的修改状态,并且 也可以查看 对应的 《上游分支》的信息,如下图 红字所示。
位于分支 master
您的分支与上游分支 'origin/master' 一致。
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: pbtest/package_depends.sh
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: model/sql/main_db.sql
修改: model/sql/server_db.sql
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
.gitignore
.vscode/
api/protocol_test.go
可以使用
git branch --unset-upstream [
命令来删除当前分支的 《上游分支》
如 git branch --unset-upstream master
再次使用git status 就会发现,少了
您的分支与上游分支 'origin/master' 一致。
这一行了。
三、svn info 所显示了当前工作拷贝的服务器端与本地信息,git没有info的指令,但是我们可以组合,那就是 git remote -v +git status + git log -1 ;
四、svn log 与git log对比
之前我一直都在使用 TortoiseSVN 客户端,查看日志,查看分支树,查看 blame 修改追溯,都特别方便,但是git 查看log 其实还是没那么方便的,待梳理,学习。
-------
以前环境是 Windows7 +TortoiseSVN +Visual Studio 2013(C++)
现在环境是 DeepinOS15+git +codelite(Go语言)