当必须同时使用Git和Subversion时,如何处理Git svn
[更新] 更详细地说,我之所以尝试在家中使用纯Git,是因为我的公司希望使用Git,但经理不愿意进行更改,因为开发人员在我们自己的存储库中不了解Git。所以,我尝试做的是,我尝试让每个人都使用纯git,而在这个学习阶段,有人可以合并回Subversion。因此,在任何紧急情况下,他们仍然可以使用Subversion 所以,在大家都熟悉Git之前,我不能将存储库转换为使用纯Git。因此,它将同时更新Subversion和Git。(现在的主存储库是Subversion)。所以,我试图使Git能够在dcommit将存储库同步回Subversion的过程中顺利工作 [问题] 我所在的组织使用Subversion作为存储库,因此我将其作为我的个人Git转储(并计划将来使用Git替换Subversion) 现在,我有了使用Git和Subversion(主要源代码)的存储库。当我必须同时使用git和subversion时,我在处理git svn rebase时遇到了一个问题 我的工作流程如下 在办公室当必须同时使用Git和Subversion时,如何处理Git svn,git,svn,git-svn,Git,Svn,Git Svn,[更新] 更详细地说,我之所以尝试在家中使用纯Git,是因为我的公司希望使用Git,但经理不愿意进行更改,因为开发人员在我们自己的存储库中不了解Git。所以,我尝试做的是,我尝试让每个人都使用纯git,而在这个学习阶段,有人可以合并回Subversion。因此,在任何紧急情况下,他们仍然可以使用Subversion 所以,在大家都熟悉Git之前,我不能将存储库转换为使用纯Git。因此,它将同时更新Subversion和Git。(现在的主存储库是Subversion)。所以,我试图使Git能够在d
注意。我不喜欢在家里使用任何git svn。尝试只使用Git。你没有提到为什么要保留svn。但我的建议是从一个干净的git回购开始,一劳永逸。避免不必要的问题 我相信Casey在迁移到git时给出了最好的答案: 当然,您必须进行备份,然后启动该过程
另一个想法是,如果问题出在rebase上,为什么不使用纯svn更新,然后将更改提交给Git(仅Git提交),就好像是您自己编写的一样。好吧,您这里的主要问题似乎是您无法真正从家中执行
Git pull
历史已经重写了吗(实际上它应该可以工作,但它会尝试进行不必要的合并)
解决这个问题最简单的方法是使用
git pull--rebase
。这样,您就不用将您在家中所做的提交与远程分支尖端合并,而是在分支尖端重新设置自分支创建以来所做的每一次提交的基础。git将足够聪明,可以看到一些提交完全相同,并且它们是相同的将在重新基址期间自动修剪。实际上,您应该能够git fetch
,但不必与git merge origin/branch
合并,您可以使用git rebase origin/branch
。这应该可以解决您的问题
如果没有帮助,请尝试
git fetch
,然后git checkout-f-B branch origin/branch
最后一个命令将强制覆盖来自远程分支的本地分支。我假设问题的主要原因是git svn dcommit
更改提交消息以包含svn提交数据包括在提交的SHA1中,git认为这个更改是一个完全不同的提交
我的解决方案是,在你的办公室回购协议中有一个分支与SVN同步,另一个(纯git)分支与SVN回购协议进行工作。无论何时,只要你想与SVN回购协议交换某些内容,你都可以在一个或另一个方向进行合并
在我的例子中,我已经设置了另一个git repo,专门用于SVN exchange。我有一个cron作业,每15分钟将该repo与SVN服务器同步一次。这样我就不会错过一个git SVN rebase
从书中找到的解决方案。第295页
与其使用本地主分支,不如签出远程分支
git checkout remote/master (Detach HEAD)
git merge --no-ff master (merge the local master)
git svn dcommit
git push origin (update to git Repository)
此模型适用于一个人合并回Subversion存储库,而另一个人使用纯Git或纯Subversion。通过这种方式,Git用户可以使用Git而不会出现合并问题。MacroA,如果它是我自己的存储库,一切都很容易管理。但是当你在大型开发团队的公司工作时,你需要的东西很难管理确实如此。仍然有许多部署系统依赖于它们。有些东西无法插入,除非一切都准备好迁移。我对git pull--rebase命令很感兴趣。如果我已经完成git svn dcommit,那么它还能工作吗?因为sha1在那之后发生了更改。当你执行
pull--rebase
时,它会尝试在远程分支的当前提示上重新设置提交的基础。这样就可以了。