Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当必须同时使用Git和Subversion时,如何处理Git svn_Git_Svn_Git Svn - Fatal编程技术网

当必须同时使用Git和Subversion时,如何处理Git svn

当必须同时使用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,是因为我的公司希望使用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 svn接口
  • 我总是从这里用git svn dcommit将代码提交给Subversion
  • 我推送到Bitbucket上的远程git存储库
  • 在家

  • 我从Bitbucket克隆了存储库
  • 使用并提交Bitbucket
  • 现在回到办公室

  • 吉特拉力
  • git-svn-rebase
  • git svn数据委员会
  • git推送
  • 在步骤4中。我有一个问题,我已经重新设定了我的分支的基础

    当我回到家时,问题就在这里

    当我回到家中时,我不能使用'git fetch',因为分支已经重定了基础。因此,我必须用git branch-D删除分支。。。。。然后git再次结账

    因此,我寻找一种方法,使我们能够同时使用Git repository和Subversion,并在使用Git svn rebase或Git svn dcommit完成操作后很好地使用Git


    注意。我不喜欢在家里使用任何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
    时,它会尝试在远程分支的当前提示上重新设置提交的基础。这样就可以了。