svn的时候必须同时使用Git和Subversion
[更新]
更多细节,为什么我在家尝试做纯Git的原因是,我的公司想迁移到Git,但管理者不愿意做出改变,因为开发人员在我们自己的仓库中对Git没有知识。 所以,我试图做的是,我尝试让每个人都使用Pure git,而在这个学习阶段有人可以合并到Subversion。 所以,在任何紧急情况下,他们仍然可以使用Subversion。
因此,在每个人都熟悉Git之前,我无法将存储库转移到使用纯Git。 因此,它将在Subversion和Git上进行更新。 (现在主版本库是Subversion)。 所以,我尝试着让Git在通过dcommit与Subversion同步存储库期间顺利运行。
[题]
我在使用Subversion作为存储库的组织中,因此将其转储为我的个人Git(并计划在将来使用替换Subversion和Git)
现在,我有使用Git和Subversion(主要来源)的存储库。 当我必须同时使用git和subversion时,我有个问题需要处理git svn rebase。
我的工作流程如下所示
在办公室
在家
现在,回到OFFICE
在第4步中,我遇到了一个问题,我已经重新分配了我的分支
现在问题在这里,当我回家
当我回家时,我不能使用'git fetch',因为这个分支已经重新分配。 所以,我必须删除分支与Git分支-D .....然后再次git结帐。
因此,我寻找可以同时使用Git存储库和Subversion的方式,并且在使用git svn rebase或git svn dcommit完成操作后,使用Git做得很好。
注意。 我不会在家使用任何git-svn 。 尝试前进,只使用Git。
好吧,你的主要问题似乎是,你不能真正从家里做一个git pull
,因为历史已经被重写了(实际上它应该可以工作,但它会尝试做一次不必要的合并)。
解决这个问题最简单的方法就是使用git pull --rebase
。 通过这种方式,您不必将自己在家中提交的提交与远程分支的提示合并,而是重新分配自分支顶端创建分支以来完成的每个提交。 Git足够聪明,可以看到一些提交的内容完全相同,并且在重新绑定期间它们将被自动修剪。
我认为你的问题的主要原因是git svn dcommit
更改提交消息以包含SVN提交数据。 由于该消息包含在提交的SHA1中,因此该更改似乎是完全不同的提交。
我的解决方案是在你的办公室repo上有一个分支,你用SVN和另一个(纯粹的git)分支来同步你的工作。当你想与SVN回购交换一些东西时,你可以合并一个或者其他方向。
在我的情况下,我已经建立了另一个专门用于SVN交换的git repo。 我有一个cron作业,每15分钟与SVN服务器同步一次回购。 这样我就不会错过git svn rebase
。
其实你应该能够git fetch
而不是与git merge origin/branch
合并,你可以使用git rebase origin/branch
。 这应该能解决你的问题
如果它没有帮助尝试git fetch
那么git checkout -f -B branch origin/branch
最后一个命令会强制从远程分支覆盖本地分支。