svn - git-svn 如何知道要提交到哪个分支?

标签 svn git git-svn

我的代码库是 SVN,我使用 git 进行所有开发。我们有一个标准的布局,我用 git svn init -s <url to repo> 初始化了我的本地仓库。

这是我使用分支的工作流程:

# creates a new branch remotely
git svn branch new-branch-name

# switches to a branch or trunk locally
git reset --hard name-of-branch
git reset --hard trunk

# merge changes from trunk into a branch
git reset —hard name-of-branch
git merge trunk
git svn dcommit

上面的最后一个命令会将更改提交到分支名称的分支。我的问题是,git 是怎么知道的?当我做 git reset --hard foo ,到底发生了什么?

这可能只是关于 git 的一般问题。每次我尝试研究答案时,我都会对 svn 集成是否是特例感到困惑。

最佳答案

git-svn 将查找对应于事件 SVN 分支的祖先提交的提交树(refs/remotes/... 分支对应于分支SVN)。然后它将提交给那些。

请注意,您不应该先 merge 再提交——SVN 和 Git 的分支模型不匹配,这种事情会破坏您的 SVN 历史记录。当你在分支上时,你应该改为 git rebase trunk。 (或者,git svn rebase。)

此外,请注意,您在 rebase 之前 checkout 的分支应该是本地分支。如果不是,您可以使用 git checkout -b local-branch-to-create remote-branch 创建一个。然后 git rebase trunk

如果你想将所有 rebase 的提交压缩为一个,那么在 rebase 之后执行此操作:git reset --soft trunk && git commit

一旦您对现在位于主干之上的提交感到满意,只需 git svn dcommit 将它们推送到 SVN 服务器。

关于svn - git-svn 如何知道要提交到哪个分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168411/

相关文章:

android - 从git克隆后如何删除错误包名称和Gradle

cron - 如何通过 cron 同步 Git-Svn 克隆?

svn - 将 git 与 svn 结合使用

SVN提交失败: Directory out of date

svn - Magento 和 Subversion (SVN) - 开始构建开发环境吗?

git - merge 后删除的好习惯?如果删除,我如何跟踪 merge 历史?

git - 从 git 到 svn 的挑选(或者,如何在 git 中保存项目历史记录并在 svn 中发布)

git - "svn update -r"的 git 等价物是什么?

python - 提交电子邮件的提交后 Hook 详细信息中数字的含义

git merge 分支像 pull 链一样时尚