[更新]
有关详细信息,我尝试在家中使用纯Git的原因是,我的公司希望转移到Git,但是经理不愿意做出更改,因为开发人员对我们的Git不了解自己的存储库所以,我尝试做的是,我试图让每个人都使用Pure git,而有人可以在这个学习阶段合并回Subversion。因此,在任何紧急情况下,他们仍然可以使用Subversion。
所以,在每个人都熟悉Git之前,我无法转移存储库以使用纯Git。因此,它将同时更新Subversion和Git。 (现在主存储库是Subversion)。因此,我尝试通过dcommit将存储库同步回Subversion,让Git可以顺利运行。
[问题]
我在组织中使用Subversion作为存储库,因此我将其作为我的个人Git转储(并计划将来使用将Subversion替换为Git)
现在,我的存储库同时使用 Git 和 Subversion(主要来源)。当我必须同时使用git和subversion时,我有一个问题需要处理 git svn rebase 。
我的工作流程如下所示
在办公室
- 存储库具有Git-svn接口
- 我总是从这里用 git svn dcommit 将代码提交给Subversion。
- 我推送到Bitbucket的远程git存储库
醇>
在家
- 我从Bitbucket克隆存储库
- 使用并承诺使用Bitbucket
醇>
现在,回到OFfice
- git pull
- git svn rebase
- git svn dcommit
- git push
醇>
在第4步中,我遇到了一个问题,即我已经重新设定了我的分支
现在问题出现在我回家的时候
当我回到家时,我不能使用'git fetch',因为分支已经重新定位。所以,我必须用 git branch -D ..... 删除分支,然后再次 git checkout 。
因此,我寻找可以同时使用Git存储库和Subversion的方式,并在使用 git svn rebase 或 git svn dcommit
请注意。我不想在家里使用任何 git-svn 。尝试继续使用Git。
答案 0 :(得分:2)
好吧,你在这里的主要问题似乎是你不能真正从家里做git pull
历史已被重写(实际上它应该可以工作,但它会尝试进行不必要的合并)。< / p>
解决该问题的最简单方法是使用git pull --rebase
。这样,您不必将您在家中提交的提交与远程分支的提示合并,而是重新设置自分支创建分支创建以来所做的每个提交。 Git会非常聪明地看到一些提交完全相同,并且它们会在rebase期间自动修剪。
答案 1 :(得分:1)
我认为问题的主要原因是git svn dcommit
更改了提交消息以包含SVN提交数据。由于消息包含在提交的SHA1中,因此这个更改似乎是一个完全不同的提交。
我的解决方案是在你的办公室仓库中有一个分支,你与SVN和另一个(纯粹的git)分支同步来完成你的工作。每当你想与SVN仓库交换一些东西时,你做一个合并一个或另一个方向。
就我而言,我已经设立了另一个专门用于SVN交换的git仓库。我有一个cron作业,它每15分钟与SVN服务器同步一次repo。这样我就不会错过git svn rebase
。
答案 2 :(得分:0)
你没有提到你为什么要保留svn。但我的建议是从一个干净的git repo开始,一劳永逸。并避免不必要的问题。
我相信Casey在迁移到git时做出了最佳答案: How to migrate SVN repository with history to a new Git repository?
当然,您必须进行备份,然后开始此过程。
另一个想法是,如果rebase是问题,为什么不使用纯svn更新,然后将更改提交给Git(仅限git commit),就像你自己编写它一样。
答案 3 :(得分:0)
实际上您应该能够git fetch
,但您可以使用git merge origin/branch
而不是与git rebase origin/branch
合并。这应该可以解决你的问题
如果没有帮助尝试git fetch
,那么git checkout -f -B branch origin/branch
最后一个命令将强制从远程分支覆盖本地分支。
答案 4 :(得分:0)
从Version Control with Git书中找到解决方案。第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 OR纯Subversion。通过这种方式,Git用户可以使用Git而不会出现合并问题。