gpt4 book ai didi

svn - 无缝 git svn 设置

转载 作者:IT王子 更新时间:2023-10-29 01:21:44 26 4
gpt4 key购买 nike

我是一个强大的 git 用户,并且乐此不疲。

现在,我被迫使用 svn,但我并不十分乐意这样做。还不太习惯使用 git svn

所以,这是我想要的设置。

  • 我使用一个 git 存储库,在所有方面都是 git,有许多本地分支机构。
  • 我定期在 git 中创建多个分支并 merge ,让 git 处理所有这些。
  • 我想将选定的 git 分支作为 svn 分支发送,并镜像所有内容。
  • 当我删除本地 svn 镜像 git 分支时,svn 分支也会被删除。

强调的一点是,我希望 git 完成 merge 和分支的所有艰苦工作,然后推送到 svn 并使其成为一个商店。

听起来我是在寻求 git-svn 教程。除了我已经多次通过它们,然而,我在执行 git svn rebasegit svn commit 时经常遇到错误,而且它似乎总是单独与 trunk 交谈.

我想要的是镜像的 svn 命令发送和镜像的分支。

最佳答案

参见 this question了解git svn branchthat question了解如何删除远程分支 - 或在下方了解 git svn 基础知识的完整摘要(包括上述两个问题的信息)。

为了给你一个更完整的教程(涵盖本地和远程分支的完整设置,提交, merge 本地分支 - 请参阅水平线下方的分支设置),这里是如何使用 svn 存储库轻松工作:

  • 使用 git svn clone <url> 初始化您的本地 git 仓库, 与参数 -s (stdlayout) 或使用参数 --trunk, --tags, --branches在 svn dir 中指定 trunk、tags 和 branches 的目录。

-s意思是,svn repo 有这样的目录布局

/trunk
/branches/new_feature
/branches/long_fix
/tags/0.0.9
/tags/0.1.0

如果没有,您可以使用上面提供的参数指定trunkbranchestags 的位置。

当您克隆 repo 时,您将自动登陆名为 master 的本地分支,该分支将自动跟踪 trunk

在这里,您进行提交就像您不知道您使用 git svn 克隆了 repo 一样,除非你不推送提交:

  • 使用git commit对你的分支做 promise
  • 使用git branch <branch name>创建本地分支机构
  • 使用git merge <branch name> merge 本地分支的更改
  • 等等

您无需担心自己处于 git svn 中-repo,直到您想要推送您的更改

从上面的设置中,我们有本地分支 master 正在跟踪 trunk。因此,在本地 master 分支内完成提交后,可以使用以下命令将它们推送到 trunk:

  • git svn dcommit (在您本地的分支 master 内)

(注意 dcommit 中的 d)。

要测试你提交的地方,做

  • git svn dcommit -n

现在到了有趣的部分:在您这边创建可跟踪的分支。真正简单的阅读the question above ,我将复制并粘贴示例:

  • git svn branch -n -m "Branch for authentication bug" auth_bug

注意这个例子有 -n仅进行试运行的标志。删除该标志以真正做到这一点。该命令在您在上面设置的 branches 目录中的 svn 存储库中创建分支 auth_bug,并且

  • git checkout -b auth_bug auth_bug

创建一个本地分支auth_bug(第一个参数)并让它跟随远程分支auth_bug(第二个参数),它被映射到目录/branches/auth_bug在 svn repo 协议(protocol)上。远程分支 auth_bug 存在,因为您使用 git svn branch 创建了它-command(并且可以是任何其他已经存在的分支)。

在这个本地分支 auth_bug 中,您所有的提交都将被推送到分支目录中的 svn 仓库 /branches/auth_bug做的时候 git svn dcommit (通过将 -n 附加到命令来测试它。)

要删除一个分支(我以前没有做过),看起来像git svn不会为你处理这个,所以根据another question ,您必须直接使用 svn 执行以下操作命令:

  • svn rm $URL/branches/the_branch

这将从远程 svn 仓库中删除分支,然后您必须从本地 git 仓库中删除它,具体取决于它是一个分支(如上面的命令)还是一个标签:

git branch -D -r the_branch
rm -rf .git/svn/the_branch

git branch -D -r tags/the_tag
rm -rf .git/svn/tags/the_tag

要使用来自上游 svn 分支的更改(“pull ”)更新您的分支,您可以在更改的基础上重新设置分支:

  • git svn rebase

这会在 svn 中获取新的提交, rebase 你的分支并回放你的本地提交(如果有的话)。

关于svn - 无缝 git svn 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4883453/

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