git与svn操作
操作\vcs | git | svn |
---|---|---|
克隆(检出) | git clone {url} | svn checkout {url} –username={username} |
设置用户信息 | git config –global user.name {name} git config –global user.email {e-mail} | 在命令后面加–username={username}即可 |
查看版本库信息 | × | svn info |
查看版本库下的文件 | × | svn list {url} |
查看状态 | git status | svn status |
添加文件 | git add(stage暂存(多次)) | svn add(版本管理器追踪(一次)) |
删除文件 | git rm {file} | svn rm/delete {file} |
提交 | git commit -m “message” | svn commit -m “message” |
查看远程仓库 | git remote [-v] | svn info |
修改远程地址 | git remote set-url [–push] |
svn sw |
远程提交 | git push {remote name} {remote branch} | svn import {url} -m “message” –username={username} |
删除远程分支 | git push {remote name} :{remote brach} | × |
查看提交历史 | git log –graph –pretty=oneline –abbrev-commit | svn log |
diff | git diff | svn diff |
使用远程仓库更新本地 | git pull | svn update |
恢复未提交 | git checkout – {file} | svn revert {file}/-R {dir} |
恢复已提交 | git reset –hard HEAD^/cmid, HEAD为指向当前commit的指针, ^上一个commit | svn merge -r |
命令历史 | git reflog(想要获取比当前版本更新的cmid) | × |
冲突解决 | git pull之后修改再提交 | 1.svn up更新选择df, 2.选择p推迟冲突, 3.修改文件, 4.svn resolve –accept=working {file}通知解决 |
创建标签 | git tag -a {tag} [-m “message”][cmid] | svn copy –revision={revision} {repository} tags/{tag} |
删除标签 | git tag -d {tag} | svn rm {url} |
创建分支 | git checkout -b {branch} | svn copy trunk branches/{branch} |
删除分支 | git checkout -d {branch} | svn rm {url} |
合并分支 | git merge {branch}默认快速合并,–no-ff -m “message”禁用掉快速合并 | svn merge {branch path} |
创建stash | git stash | × |
恢复stash | git stash apply {stash}/git statsh pop | × |
删除stash | git stash drop {stash} | × |
ignore | 新建一个.gitignore文件即可 | svn propset svn:ignore “file1{回车}file2{回车}dir” . |
注释:
- git pull和git fetch的区别:前者不光是拉数据还会和本地分支合并。以下两者等价:
git pull == git fetch && git merge origin/master, 默认分支为master的情况下。- git checkout -b {branch} == git branch {branch} (创建)
&& git checkout {branch}(切换)。- git有暂存区的概念,是追踪修改,而不是追踪文件。svn只需要一次add,其余的直接commit即可。
- svn的命令基本都是可以缩写,checkout=co, copy=cp, update=up等等。
- 快速合并(fast forward)通过git log –graph看不到合并的过程,–no-ff -m相当与有了一个新的commit,能看到合并的过程。
- 当使用git clone其实只有master分支,如果想要在dev分支开发,可以使用git checkout -b dev origin/dev。
- 当直接使用git pull或者git push什么的应该要求当前分支和远程分支有一个关联关系,在git push的时候的-u参数应该就是这个作用。可以通过git branch –set-upstream dev origin/dev来设置本地dev与远程的关联。
- snv的export相对与checkout来说是导出一份“干净”的项目,也就是没有.svn目录。
- git的ignore内容对于目录区分是否已/结尾,而svn不能以/结尾,不区分。
- git可以通过git add . 添加所有未追踪的文件,svn就比较麻烦了,可以使用svn st | awk ‘{if ( $1 == “?”) { print $2}}’ | xargs svn add增加,事实证明我大awk还是比较牛逼的。
- 感觉svn就是一堆文件目录拷贝,就是在操作文件,感觉分支基本没用喃,感觉太鸡肋了。
git与svn开发模式
git开发模式
- master是稳定的,创建dev分支进行开发,开发完成合并到master。当还在dev上开发的时候,老版本有bug被发现,此时的status查看有一些修改但是不想提交,可以使用git stash将工作现场“存储”起来。bug修改完成之后,切换会dev,使用git stash list查看stash,然后使用git stash apply {stash@{0}}或者git stash pop恢复,前者需要单独使用git stash drop来删除。
svn开发模式
- 一般在trunk进行主要开发,当开发完成,在trunk进行打tag,比如v1.0。然后在trunk进行2.0的开发。当1.0发现了bug,从v1.0的tag中拷贝一个为v1.0_bugfix的分支进行bug修复,修复完成够合并到trunk。
- 和git类似,trunk只是用来打tag的。开发1.0,则创建一个dev_1.0的分支进行开发,当开发完成,合并到trunk然后打tag,比如v1.0。然后copy创建一个dev_2.0的分支进行开发,当1.0发现bug,则直接在dev_1.0上进行bug修正。合适的时候可以把dev_1.0合并到dev_2.0进行测试,最后合并到trunk。
svn服务器安装问题
极客学院wiki安装svn服务器遇到的问题(1. httpd不能启动,2. 没有apache这个用户,3. import出错)解决办法如下:
参考链接
2017-7-21 于 成都