Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 SVN merge丢失了到主干的链接_Git_Git Svn - Fatal编程技术网

Git SVN merge丢失了到主干的链接

Git SVN merge丢失了到主干的链接,git,git-svn,Git,Git Svn,编辑:我看到以前有人问过这个问题!具有正确权限的人可能会将此作为副本关闭 我正在使用git svn。我最近完成了git中一个分支的工作,该分支跟踪SVN中的一个分支。在分支中工作时,我使用了以下两个命令 $ git svn rebase $ big svn dcommit 一切都很好。git中的“master”跟踪svn/trunk,git中的“myBranch”跟踪svn/branchs/myBranch。但在我将所有内容都本地合并到git之后 $ git checkout master $

编辑:我看到以前有人问过这个问题!具有正确权限的人可能会将此作为副本关闭

我正在使用git svn。我最近完成了git中一个分支的工作,该分支跟踪SVN中的一个分支。在分支中工作时,我使用了以下两个命令

$ git svn rebase
$ big svn dcommit
一切都很好。git中的“master”跟踪svn/trunk,git中的“myBranch”跟踪svn/branchs/myBranch。但在我将所有内容都本地合并到git之后

$ git checkout master
$ git merge myBranch
我去推。。。并假设master将推送到svn/trunk。但事实并非如此。相反,“master”现在也推送到svn/branchs/myBranch。不知怎的,当我把“myBranch”合并成“master”时,“master”的跟踪功能被改变了

我可能做错了-但我试图明确地“推”到主干

$ git svn dcommit remotes/trunk master
但那个语法失败了,现在我得到了

$ Committing to http://<repo>/trunk ...
dcommitted on a detached HEAD because you gave a revision argument.
The rewritten commit is: b461234...
$Committing tohttp:///trunk ...
因为您提供了修订参数,所以D在分离的头上提交。
重写的提交是:b461234。。。
SVN主干仍未更新

如何在git中合并,然后将其推送到SVN?我遵循的指南暗示我可以与正常的git语法合并。它只是没有跟踪并解释为什么我的“主”没有跟踪我合并的分支


我还有一个与命令行并行使用的分支,在我如上所述手动合并之后,tower现在在下拉列表中将所有远程分支“显示”为“推送”或“提交到”,但我无法更改svn/myBranch中的选择。。。这可能意味着我不能?

如果
master
正在跟踪您的
svn
遥控器,您可以执行以下操作:

git svn dcommit
当您在
主机上时
。使用
--dry run
查看提交的方向以确保!如果它坏了,您可以编辑
.git/config
并修复
svn remote
条目:

[svn-remote "svn"]
     url = svn+ssh://some.machine.net/svn/path/to/tree
     fetch = trunk:refs/remotes/trunk

或者不管它需要什么。

不,您不能将git合并提交到Subversion

从您提供的链接中阅读以下段落:

当您熟悉Git工作流时,您可能会创建主题分支,处理它们,然后将它们合并到中。如果您正在通过git svn推送到Subversion服务器,那么您可能希望每次都将工作重定到单个分支上,而不是将分支合并在一起。选择重定基址的原因是Subversion有一个线性历史,并且不像Git那样处理合并,因此Git svn在将快照转换为Subversion提交时只遵循第一个父级

在具有合并历史记录的分支上运行dcommit效果很好,只是当您查看Git项目历史记录时,它没有重写您在实验分支上所做的任何一次提交—相反,所有这些更改都出现在单次合并提交的SVN版本中

当其他人克隆该工作时,他们看到的只是合并提交,所有工作都被压缩到其中;他们看不到提交数据,也看不到提交数据的来源或提交时间


根据我包含的链接,我猜以下内容是误导性的,因为尽管有限,我认为文本暗示它仍然有效。。。。现在,如果您想将您的opera分支合并到主干(您的主分支)中,您可以使用普通的git合并。但是您需要提供一个描述性的提交消息(通过-m),否则合并会说“merge branch opera”,而不是一些有用的东西(因为Git将自动为您检测适当的合并基础),这不是正常的Git合并提交。您必须将此数据推送回Subversion服务器,因为该服务器无法处理跟踪多个父级的提交;因此,在推送它之后,它看起来就像一个提交,在一个提交下的另一个分支的所有工作中被挤压。