如何导入颠覆性将其提交到上游存储库中



这是我的场景:

  • a 上游 git标签1.2已被用作没有git svn的空subversion存储库中的第一个提交。文件已被复制并添加到Subversion trunk工作副本中。

  • 在颠覆中,/trunk

  • 中已经提交了一小部分更改集

我现在想使用原始上游(大存储库)中的git叉,并将这些颠覆更改集导入从初始标签1.2创建的A feature 分支中。p> subversion存储库中没有分支或标签,我有兴趣将导入到上游 git存储库中。

我对git-svn的第一次试验并没有成功,因为该分支没有用上游历史记录的共同祖先创建。那我应该如何导入颠覆变更集以便能够在git中进行合并?

我认为您对使用git svn的看法在这里可以。
您可以将无关历史的合并与使用--allow-unrelated-histories作为Merge命令的参数。
或者,您只需使用git cherry-pick重新申请您的新导入的提交在git标签之上。

您可以首先通过 git svn clone <URL for svn repo> 将SVN迁移到git 。然后,您可以将新的转换后的Git Repo(假设主分支)合并到上游Git Repo Master Branch 中。合并步骤如下:

# in your upstream git repo
git remote add new <path for the new converted git repo>
git fetch new
git checkout master
git rebase master new/master
git checkout -b temp
git checkout master
git merge temp

为了自动解决冲突文件,您可以使用-X选项:

  • 使用主版本git rebase master new/master -X ours
  • 解决冲突文件
  • 使用新/主版本git rebase master new/master -X theirs
  • 解决冲突文件

在记录中,这是我有效地完成的详细过程。想法是在处理最新升级之前先检查自定义代码的潜在冲突。

1)准备您的git存储库。灵感来自:在现有的git存储库中添加一个新的颠覆遥控器

$ git clone UPSTREAM

.git/config

中添加git-svn遥控器中的遥控器
[svn-remote "remote-trunk"]
    url = SUBVERSION_TRUNK_FOLDER_URL
    fetch = :refs/remotes/git-svn-remote-trunk

运行转换为git consits

$ git svn fetch --authors-prog=map_authors.sh remote-trunk

2)1.2分支上的颠覆变化:

$ git branch custom-v1.2 v1.2
$ git checkout -b custom-trunk remotes/git-svn-remote-trunk
$ git rebase custom-v1.2

预计第一个重新命名的提交是空的,必须用git rebase --skip确认。

在现实生活中,我对几个我必须还原为原始文件以避免以后的冲突的终结不匹配。

在几乎没有git rebase --continue的情况下,如果需要解决冲突,现在可以将自定义代码集成到最新的主体中:

$ git checkout -b custom-master origin/master
$ git merge custom-trunk

*)吸血鬼的更快替代方法是直接与基于标签的分支合并,或直接与最新的origin/master

直接合并
$ git checkout -b custom-v1.2 v1.2
$ git merge --allow-unrelated-histories remotes/git-svn-custom-trunk
$ git checkout -b custom-master origin/master
$ git merge custom-v1.2

最新更新