gpt4 book ai didi

git - 将现有的 Git repo 推送到 svn 中的文件夹

转载 作者:太空狗 更新时间:2023-10-29 13:51:36 25 4
gpt4 key购买 nike

我有一个现有的 git 存储库,我一直在其中工作。但最近,我需要将提交推送到 svn(不需要包括所有 merge ,但至少一个线性主分支就可以了)

我不是很擅长 git/svn,我只是一个普通用户,使用 SourceTree 和 CornerStone 或 Tortoise 和漂亮的 UI 来做我的提交、分支和标记。我以前使用 git-svn 将 svn 存储库迁移到 git,但从未做过相反的操作。

这可能吗?我用谷歌搜索了几个教程,但没有一个有效。我对 rebasereflog 等术语也不太熟悉,如果有一些很好的指南让您无需学习即可完成简单的事情,我将不胜感激通过 git/svn 的更复杂的部分。 (很简单,我想一定有人遇到过同样的问题并且以前做过)

提前致谢!

最佳答案

其实很简单.. 首先你需要通过 git 克隆你的 svn,然后将 git repo 作为另一个远程添加到它。这将为您提供两个单独的 HEAD,这就是为什么您需要 git-rebase 您的 git 提交到 git-svn head 中。尽管 svn 只有线性提交,但可能存在冲突。这就是为什么在您最终 git svn dcommit 将所有内容推送到 svn 之前,您需要使用各种 git 命令来修复所有这些问题。

总结如下:

<强>1。创建一个git svn clone跟踪svn

git svn clone svn://DEST/repo/projectname/trunk dest

现在我们有一个 git 存储库来跟踪导入操作的目标 svn 登陆点。

2:跟踪我们要导入的git repo

cd dest
git remote add -f source /path/to/git/source/repo

现在,如果你检查 git 历史,你会看到来自原始 git repo 的一系列提交,并且与此断开连接,主 HEAD 加上指向原始(单个)svn 提交的 git-svn HEAD我们克隆了。

3:将原来的 git repo rebase 到 git-svn

secret 魔法就在这里。我似乎有很多方法可以从这里开始。这是我发现唯一有效的方法。当然,我尝试了很多方法都失败了。一旦我找到了一个有效的方法,我就停止了尝试。因此,如果有更好的方法,我很乐意听到,但这似乎很有效。

git rebase --onto remotes/git-svn --root source/master

此时,我意识到我的 git 历史并不是严格线性的;我在几台机器上工作过,所以 trunk 的历史有点绕。

这意味着我所期望的是一个简单的操作(这就是你在 SVN 帽子上所期望的)需要在此过程中进行一些 rebase 修复:

(
gvim foo # fix merge conflict
git add foo
git rebase --continue
)
# ... rinse and repeat

这些是必需的,因为在不同机器上工作的源代码库中的分支被 merge 在一起形成“源代码”开发主干线,如果不进行一些调整,就不会扁平化为 rebase 。

总的来说,冲突很小而且不难解决。

4:上推到svn

现在我们已经在 git-svn 之上安排了一切,这是一个简单的例子:

git svn dcommit

将更改推送到 svn。

来源:http://goodliffe.blogspot.sg/2011/08/pushing-git-repository-into-existing.html

关于git - 将现有的 Git repo 推送到 svn 中的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com