如何在svn系统中使用git

如何在svn系统中使用git,第1张

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
也就是说自己机器上有一个git仓库。
这和svn是不同的,svn是没有本地的仓库的。
所以git是先提交到本地仓库,然后推送到服务器。而svn是直接提交到服务器。
这里说一下几个含义:
拉取:将服务器中git仓库的数据拉取到本地git仓库,同时修改(更新)当前分支文件
获取:仅仅将服务器中git仓库的数据拉取到本地git仓库
提交:将修改的文件提交到本地git仓库。
推送:将本地git仓库上的数据推送到服务器。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
git和svn的一点不同在于svn是通过目录结构来区分不同的分支的。而git你可以点击切换/检出 来切换不同的分支。
在svn上右键点击Repository Browser可以看见整个工程的目录结构
在git上可以点击版本分支图查看整个工程的分支解构。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
git分支保护:自己并没有权限推送到当前分支:
1自己创建一个分支,
2将自己创建的分支推送上去,
3登录git,发送Merge Requests(合并分支的请求)给相关人员。
4通知相关人员,并由相关人员将你的代码合并到主分支

你和小明在改同一个文件。
你在第4行加了几个字,他把第8行删除了。你们俩提交更改后,系统自动合并,你们的修改都体现在了新的文件中:第4行多了几个字,第8行没了;
你在第4行加了几个字,而他把第4行删除了。这种情况是没办法合并的,因为逻辑上说不可能既做到删除第4行,又显示加了几个字的第4行。于是就冲突了。

git svn 工具集在当前不得不使用 Subversion 服务器或者开发环境要求使用 Subversion 服务器的时候格外有用。不妨把它看成一个跛脚的 Git,然而,你还是有可能在转换过程中碰到一些困惑你和合作者们的迷题。为了避免麻烦,试着遵守如下守则:
保持一个不包含由 git merge 生成的 commit 的线性提交历史。将在主线分支外进行的开发通通衍合回主线;避免直接合并。

不要单独建立和使用一个 Git 服务器来搞合作。可以为了加速新开发者的克隆进程建立一个,但是不要向它提供任何不包含 git-svn-id 条目的内容。甚至可以添加一个 pre-receive 挂钩来在每一个提交信息中查找 git-svn-id 并拒绝提交那些不包含它的 commit。

如果遵循这些守则,在 Subversion 上工作还可以接受。然而,如果能迁徙到真正的 Git 服务器,则能为团队带来更多好处。

在团队开发中,同时对某一个文件进行改写是常见的事,但是我们应该尽可能避免。每个模块之间应该进行良好的隔离。但一旦遇到冲突,git也有很好的解决方法。
在同步代码的过程中,git会自动检查冲突,并尝试进行自动合并。最好的情况应该是大家同时修改一个文件,但是大家修改的地方不同了。在这样的情况下,git会进行非冲突合并,这时,在调用 git pull 的时候,git会尝试进行非冲突合并。
而在合并过程中有冲突的时候, git 会把修改记录直接保存在文件中,让开发者判断文件如何解决合并。例如,在一个描述文件中同时修改了一句话,在合并的时候,git会这么做:
<<<<<<< HEAD
It's not a project cool enough for you to enjoy the code but a mix of my thoughts in the year 2012~2013 I didn't know where the project leads to Hope it will became useful after practice
=======
It's not a project cool enough for you to enjoy the code but it's a mix of my thoughts in the year 2012~2013 I didn't know where the project leads to Hope it will became useful after practice
>>>>>>> 2b41083cf969979d8e4a1eedc987976af544d129
即把两个更改都写在文件上,但是用=======来区别发生冲突的位置,在=======以上是 HEAD,即本地的代码;而=======以下则是来自远程的更改了。这个时候,你可以选择保留远程或本地的修改或者都不要(简单地说,把不需要的内容删除即可)。

命令行用git remote -v show origin,tortoisegit不太清楚。
origin是远程那边的名字,你可能不是这个
不过你既然git push用起来不行,最好还是先解决这个问题。不然可能整个remote功能都不能用。
Whatever is worth doing is worth doing well


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13332232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存