美文网首页
使用Git 作为 Subversion 仓库的客户端

使用Git 作为 Subversion 仓库的客户端

作者: Joker_Lee | 来源:发表于2018-12-06 22:18 被阅读0次
来自我的CSDN博客:https://blog.csdn.net/dahaohan/article/details/83545403

Git 与 Subversion

Git 和 Subversion两个大名鼎鼎的版本控制系统,有着各自的特点和长处。笔者更喜欢Git分布式去中心化不依赖网络的便捷和强大的本地分支管理,目前开源项目以及大量的商业项目都使用 Subversion 来管理源码。当代码仓库为SVN仓库而又想使用git时,恰好git svn工具可以满足您的需求。

Warning

在使用 git svn 的时候,你实际是在与 Subversion 交互,Git 比它要高级复杂的多。尽管可以在本地随意的进行分支和合并,最好还是通过衍合保持线性的提交历史,尽量避免类似与远程 Git 仓库动态交互这样的操作。
避免修改历史再重新推送的做法,也不要同时推送到并行的 Git 仓库来试图与其他 Git 用户合作。Subersion 只能保存单一的线性提交历史,一不小心就会被搞糊涂。合作团队中同时有人用 SVN 和 Git,一定要确保所有人都使用 SVN 服务来协作——这会让生活轻松很多。

Start

远程SVN仓库地址:

svn://svnbucket.com/****/svn_test

本地git svn clone

git svn clone svn仓库地址 -s可以将远程Subversion 仓库导入到一个本地的 Git 仓库中。-s 命令,它意味着标准布局(s 是 Standard layout 的首字母):Subversion 仓库遵循了基本的分支和标签命名法则(如上图trunk、tags、branches文件夹命名)。完整命令为:git svn clone svn仓库地址 -T trunk -b branches -t tags;若您的仓库命名与标准不一致请做出相应的改动。

若出现:Using higher level of URL: xxxxxx错误
使用git svn clone svn仓库 -s --no-minimize-url具体可参考:
https://stackoverflow.com/questions/1453416/git-svn-clone-checkouts-wrong-repo

向SVN仓库提交


可以看到本地git仓库初始完成之后,本地代码的管理完全基于git命令,只是向服务器仓库提交代码有变动使用git svn dcommit
拉取服务器最新代码

sit svn fetch 能获取最新的数据,git svn rebase 才会在获取之后在本地进行更新 。



事实上sit svn fetch类似git fetch会将远程仓库代码拉取到本地对应分支上:

需要牢记的一点是,Git 要求我们在推送之前先合并上游仓库中最新的内容,而 git svn 只要求存在冲突的时候才这样做。假如有人向一个文件推送了一些修改,这时你要向另一个文件推送一些修改,那么 dcommit 将正常工作。
众所周知SVN仓库只保持单一的线性提交历史,而不像git的commit历史可以有合并的历史“分叉”,所以使用git的本地分支尽可能使用rebase到主干master保持干净的线性历史对于svn dcommit来说是一个好的选择。

分支操作-创建新的 SVN 分支

git svn branch [your_branch_name] -m "message"命令可以在svn服务器上创建一个新的分支等价于svn copy trunk branches/your_branch_name
若出现:


git svn branch [your_branch_name] -m "test" --destination branches
详情参阅:https://stackoverflow.com/questions/2974016/git-svn-branching

上述命令仅仅创建svn分支并不会切换分支。
切换分支并提交到SVN指定分支

使用git svn dcommit命令需要注意:

Git 通过搜寻提交历史中 Subversion 分支的头部来决定 dcommit 的目的地——而它应该只有一个,那就是当前分支历史中最近一次包含 git-svn-id 的提交。

如果要提交到上面步骤在svn仓库创建的new_branch分支,则需要基于该remote svn 分支创建一个本地分支(上例子的hotfix),基于hotfix分支修改执行dcommit则提交到对应的svn new_branch分支。查看hotfix分支的log:



可以发现其最近的git-svn-id记录对应的svn仓库的new_branch分支,git svn执行dcommit命令以此提交更改到对应远程对应分支。git svn rebase命令也类似会拉取new_branch的最新修改更新到本地。

合并更改到主分支

若是基于svn new_branch分支做了修改提交,例如在本地的hotfix分支(对应svn的new_branch)分支开发完成了一个新模块想合并到git主分支并且提交到master对应的svn trunk分支该如何操作:



上述情况,new_branch已经有提交"change for test" 而 master分支还停留在"add img"提交处:

git checkout master //切换到主分支

//合并分支使用--squash将commit记录合并更新为一个新commit
git merge --squash hotfix  
git commit -am "merge new_branch branch features"
git svn dcommit

这样就可以把new_branch通过git svn合并提交到svn的trunk,可以看到略显麻烦并且在new_branch上的提交记录被隐藏了;当然也可以选择使用svn来执行svn 分支的合并然后再通过git svn rebase获取更新到本地git分支。不过本博文旨在尽量弱化svn操作,尽可能使用git svn来完成版本的管理。

Tag操作

git svn tag操作与git svn branch 操作类似:


分支/Tag的删除

由于git和svn分支的概念和管理上有很大差异,git svn命令没有提供删除svn 分支的方法。删除svn分支通过svn命令删除:

//1.删除远程svn仓库的分支
svn rm svn_branch_url -m 'messge:rm branch'
//2.删除本地git对应的追踪分支
git branch -D -r remote_name/the_branch
//3.删除本地git svn文件
rm -rf .git/svn/refs/remotes/your_branch


tag删除是类似的:

svn rm $URL/tags/the_tag_will_delete // step 1
git branch -D -r remote_name/tags/your_tag_name
rm -rf .git/svn/refs/remotes/remote_name/tags/your_tag_name

相关文章

  • 使用Git 作为 Subversion 仓库的客户端

    来自我的CSDN博客:https://blog.csdn.net/dahaohan/article/details...

  • [实践2] 项目初始化准备

    项目准备 代码仓库 使用bitbucket 提供的免费git仓库 使用sourcetree作为git客户端工具 s...

  • Git 笔记

    初始化 Git 仓库进入要作为为仓库的目录中,使用 git init 命令。添加文件到Git仓库,分两步: 使用命...

  • SVN git

    SVN(subversion):工具 cornerstone version Git clone整个仓库 而不是p...

  • Git使用教程

    Git使用教程 使用Git前,需要先建立一个仓库(repository)。可以使用一个已经存在的目录作为Git仓库...

  • VPS配置Git Hooks实现hexo博客更新

    客户端使用Hexo生成静态文件,通过Git推送到VPS的Git仓库。VPS配置Git Hooks,将静态文件同步到...

  • Git

    git安装 创建git用户 新建一个项目仓库 仓库初始化 git客户端拉取 免密拉取 配置信息 配置使用者信息 查...

  • 记 多个git账号的SSH配置及上传项目到gitlab

    一.同一客户端下使用多个git账号 当本地git仓库和github上的仓库进行通信的时候,必须得双方建立连接才行,...

  • Linux下安装配置svn

    安装 使用yum安装yum install subversion 建立svn仓库 建立svn仓库(reposito...

  • git svn注意事项

    git svn 工具集在当前不得不使用 Subversion 服务器或者开发环境要求使用 Subversion 服...

网友评论

      本文标题:使用Git 作为 Subversion 仓库的客户端

      本文链接:https://www.haomeiwen.com/subject/ksiacqtx.html