首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git svn dcommit如何确定提交位置?

git svn dcommit如何确定提交位置?
EN

Stack Overflow用户
提问于 2010-08-31 21:42:32
回答 3查看 3.3K关注 0票数 9

我使用git-svn跟踪同一svn存储库中的多个分支。通常这很好用,但是今天我做了一些重置和重置,突然我的分支不再提交到正确的远程分支:

代码语言:javascript
复制
$ git branch
* master
  a
  b

$ git svn dcommit -n
Committing to svn://server/repo/trunk ...

$ git checkout a
$ git svn dcommit -n
Committing to svn://server/repo/branches/a ...

$ git checkout b
$ git svn dcommit -n
Committing to svn://server/repo/branches/a ...

因此,分支b将提交到分支/a目录,而不是分支/b目录。

我已经尝试更改被跟踪的分支:

代码语言:javascript
复制
$ git branch --set-upstream b remotes/b

和其他事情,但唯一有效的解决方案是删除分支b并重新创建它:

代码语言:javascript
复制
$ git branch -D b
$ git branch b remotes/b
$ git svn dcommit -n
Committing to svn://server/repo/branches/b ...

现在我的问题是: git svn如何确定提交到哪个目录?那么如何修改这个目录呢?

谢谢,

乔纳斯

EN

回答 3

Stack Overflow用户

发布于 2011-02-01 03:21:09

您要查找的SVN配置位于您的克隆存储库的.git/config文件中。可以使用文本编辑器对其进行操作。下面是一个示例:

代码语言:javascript
复制
$ cat .git/config        
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[svn-remote "svn"]
    url = https://pdfsam.svn.sourceforge.net/svnroot/pdfsam
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

默认情况下,假设分支是名称对名称匹配的。要跟踪不匹配的分支名称,请重命名本地分支或为名称奇怪的分支添加显式配置(远程):

代码语言:javascript
复制
[svn-remote "weirdbranch"]
    url = svn+ssh://ambientideas.com/svnrepos/myproject/branches/myweirdbranch
    fetch = :refs/remotes/git-svn-myweirdbranchlocalname

此外,如果对来自多个SVN repos的分支执行Git合并,dcommit将(逻辑上,但对于第一次使用的用户来说是混乱的)以第一个合并提交父级的SVN为目标。Git文档声明"git svn dcommit将尝试在git log --grep=^git-svn-id: --first-parent -1中命名的SVN提交之上提交“。

如果将一个SVN分支重新设置为另一个分支的基础,这意味着“最新的”提交(从属分支)将成为dcommit的目标。通常,用户希望以主要的SVN存储库(分支)为目标。这要求用户在重新建立基础时使用--no-ff选项,以确保最后提交指向主要分支(新的精挑细选的提交)。

其他相关的StackOverflow问题包括:

票数 5
EN

Stack Overflow用户

发布于 2014-06-28 19:15:28

我在使用svn git时遇到的问题与此类似。我的分支结构是这样的层次结构:

代码语言:javascript
复制
svn/projectX/branches/
svn/projectX/branches/Android
svn/projectX/branches/Android/dev-shared

我首先遵循了git-svn手册中的说明和示例:

https://www.kernel.org/pub/software/scm/git/docs/git-svn.html

并使用以下命令克隆我的树干:

代码语言:javascript
复制
git svn clone -s --prefix=svn/ https://mw.com/svn/projectX -T trunk -t tags -b branches/Android

然后我签出了分支/Android/dev-shared分支,做了修改,并将它们提交给了我本地的git分支。然后,我尝试使用"git svn dcommit -n“,看看在没有实际提交的情况下它会做什么。

我看到它正在尝试将我的分支提交提交到svn上的主干。

所以很高兴我使用了"-n“选项,避免了提交到错误的地方。

经过大量的研究,我发现最好的资源是:

http://www.janosgyerik.com/practical-tips-for-using-git-with-large-subversion-repositories/

它建议的解决方案是首先从svn签出一个新的克隆,使用:

代码语言:javascript
复制
git svn clone http://me.com/projectX/trunk projectX

然后手动编辑.git\config文件,为我要处理的每个分支添加额外的获取条目:

代码语言:javascript
复制
[svn-remote "svn"]
    url = https://me.com/svn/projectX
    fetch = trunk:refs/remotes/svn/trunk
    fetch = branches/Android/dev-shared:refs/remotes/svn/branches/Android/dev-shared

然后,当我重试"git svn dcommit -n“时,它现在提交到了正确的分支”分支/Android/dev-shared“。

票数 0
EN

Stack Overflow用户

发布于 2020-05-20 09:07:38

它确定从您签出的提交中可以到达哪个SVN分支(仅在第一个父级之后),并提交到该分支。永远不能有多个分支,因为git-svn不会在其他分支之上创建分支。

你可以在dcommitting之前修改你的本地分支,这样它就是你想要提交的SVN提交的后代(即你想要提交的SVN分支的头)。

来自https://git-scm.com/docs/git-svn

中命名的SVN提交之后,

git svn dcommit将尝试提交

git日志--grep=^git-svn-id:--first-parent -1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3609556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档