将 git 项目的基于 svn 的分支合并回 git
merging svn-based fork of git project back into git
我正在 git 开发一个项目。其他人已经对我的项目进行了快照并继续在 svn 中进行开发。现在我想将来自 svn 的更改合并回 git。
有没有一种简单的方法可以将 svn 中的更改合并到 git 中?我能想到的最好办法是创建一个新的 git 分支并手动添加所有文件。
我对git-svn的理解是它在svn repo的基础上创建了一个新的git repo。文档还说 "don’t push to a parallel Git repository to collaborate with fellow Git developers at the same time",这听起来正是我想要的。唯一的简化是我不需要在 svn 中写入任何东西;更改仅从 svn 移动到 git。
我会避免任何花哨的技巧并保持简单。
只需在 git 中创建一个新分支即可。接下来,将 svn 分支中的文件覆盖(复制)到 git 分支中。提交您的更改。
我喜欢使用可视化的 kdiff3 来合并两个文件夹,因为我假设您想挑选更改。但是,有很多很棒的工具可以合并两个相似的文件夹。
一旦这些文件覆盖在您的 git 文件之上,您就有最后的机会在提交之前检查更改。 Atlassian Source Tree 是一个很好的工具,可以直观地查看更改,但同样有很多很棒的工具。
您需要注意,使用 git-svn svn-branch 的历史很可能不会与您的 git 历史合并。所以这就是你需要做的。
- 使用 git-svn 从您的 svn 创建一个(新的!)git 存储库。
- 将您的 git 存储库添加为远程
- 看看历史——也许有一些神奇的历史联系在一起。如果是这样,你就完成了。
- 在两个回购协议中找到历史分歧点。注意它们的 SHA:
OUR-DIV
代表你的 git 历史中最后一个共同提交版本的 sha,THEIR-DIV
代表导入的 svn 历史中最后一个共同提交版本的 sha .
- 运行
git replace $THEIR-DIV $OUR-DIV
(参见 docu of git replace)
- 复制你的 svn 分支,让我们将新分支命名为
svn_branch
看看新的 git log
看看结果是否合您意。如果是,运行:
git filter-branch svn_branch
- 您现在可以将
svn_branch
推送到您的主 git 存储库
之后,您不能简单地将进一步的更改从 svn 导入 svn_branch
。如果您想要这样做,您需要删除 svn_branch
,导入您的更改,然后从第 6 步重新开始。不过,我不能 100% 确定这绝对有效。小心轻放。
我正在 git 开发一个项目。其他人已经对我的项目进行了快照并继续在 svn 中进行开发。现在我想将来自 svn 的更改合并回 git。
有没有一种简单的方法可以将 svn 中的更改合并到 git 中?我能想到的最好办法是创建一个新的 git 分支并手动添加所有文件。
我对git-svn的理解是它在svn repo的基础上创建了一个新的git repo。文档还说 "don’t push to a parallel Git repository to collaborate with fellow Git developers at the same time",这听起来正是我想要的。唯一的简化是我不需要在 svn 中写入任何东西;更改仅从 svn 移动到 git。
我会避免任何花哨的技巧并保持简单。
只需在 git 中创建一个新分支即可。接下来,将 svn 分支中的文件覆盖(复制)到 git 分支中。提交您的更改。
我喜欢使用可视化的 kdiff3 来合并两个文件夹,因为我假设您想挑选更改。但是,有很多很棒的工具可以合并两个相似的文件夹。
一旦这些文件覆盖在您的 git 文件之上,您就有最后的机会在提交之前检查更改。 Atlassian Source Tree 是一个很好的工具,可以直观地查看更改,但同样有很多很棒的工具。
您需要注意,使用 git-svn svn-branch 的历史很可能不会与您的 git 历史合并。所以这就是你需要做的。
- 使用 git-svn 从您的 svn 创建一个(新的!)git 存储库。
- 将您的 git 存储库添加为远程
- 看看历史——也许有一些神奇的历史联系在一起。如果是这样,你就完成了。
- 在两个回购协议中找到历史分歧点。注意它们的 SHA:
OUR-DIV
代表你的 git 历史中最后一个共同提交版本的 sha,THEIR-DIV
代表导入的 svn 历史中最后一个共同提交版本的 sha . - 运行
git replace $THEIR-DIV $OUR-DIV
(参见 docu of git replace) - 复制你的 svn 分支,让我们将新分支命名为
svn_branch
看看新的
git log
看看结果是否合您意。如果是,运行:git filter-branch svn_branch
- 您现在可以将
svn_branch
推送到您的主 git 存储库
之后,您不能简单地将进一步的更改从 svn 导入 svn_branch
。如果您想要这样做,您需要删除 svn_branch
,导入您的更改,然后从第 6 步重新开始。不过,我不能 100% 确定这绝对有效。小心轻放。