git-svn - 当我的master已经是分支时,检查svn中已存在的远程分支。解释一下.git / config

时间:2011-02-15 13:00:02

标签: git branch git-svn git-branch

鉴于我加入的团队如何使用SVN,这是一个奇怪的问题。基本上,svn存储库遵循标准布局,但是干线确实在1。5年左右没有被触及,并且工作往往仅在分支的分支和分支中发生。因此,我使用git-svn从代表我们下一个版本的活动分支的分支进行克隆,这就是我本地git存储库中的主跟踪。让我们从这里开始在svn'release'中调用这个分支。为此目的使用git-svn只是笨拙的dory。

现在,有人已经创建了一个“发布”功能分支,我将称之为“功能”,我想要下载到我的本地分支,并承诺。当然,我可以在本地克隆分支到另一个目录/ git存储库,但我真正想做的是在我的本地git存储库中的本地分支中镜像“feature”以便在这两个人尽可能地直截了当。我已经看到其他stackoverflow.com帖子显示这是如何工作的,假设你已经git svn init--stdlayout一起使用,但由于上述原因,我没有这样做。

这是我的.git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://our.svn.server/svn/root/branches/release
    fetch = :refs/remotes/git-svn

我假设我[svn-remote]部分需要的是branches = $something,但我不知道在这种情况下是什么东西是什么,也不知道我需要什么git checkout和其他命令的咒语在我将更改改为.git / config。

之后

有什么建议吗?


编辑 - 以下作品:

所以我从头开始并执行以下克隆命令:

git svn clone https://my.svn.server/svn/root -T branches/branch_I_want_as_master -b branches

在大约16个小时后,最终将所有东西都拉下来了。结果.git / config看起来像这样:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://my.svn.server/svn/root
    fetch = branches/branch_I_want_as_master:refs/remotes/trunk
    branches = branches/*:refs/remotes/*

所以我知道这有效 - 我可以git checkout -b name-of-a-branch name-of-a-branch它给了我当地git仓库中的远程分支。以前的答案并不是我需要的确切答案,但是由于它们很有用,我已经投票了。

在这一点上,我会接受答案,只是解释了为什么这有效,也许是一个有用的链接,打破了如何正确使用.git / config做事情。

2 个答案:

答案 0 :(得分:5)

您的存储库配置应如下所示:

[svn-remote "svn"]
url = https://our.svn.server/svn/root
fetch = branches/release:refs/remotes/git-svn
branches = branches/release/feature1:refs/remotes/branches/*
branches = branches/release/feature2:refs/remotes/branches/*

url应指向您的存储库的根目录。 fetch指向您的主干(实际上可能是任何分支),并且可以有任意数量的branches条目,指向功能分支。

也许你应该从scatch构建你的git存储库,但是这个配置可以工作。

答案 1 :(得分:2)

您是否尝试过将branches=..添加到svn-remote部分? (假设url直接指向您的release分支。您将获得一个额外的release头部跟踪发布分支,但随后您将获得所有其他分支跟踪,以便您可以检查它们。奖励git svn branch也可能(可能)用于创建新分支!

作为旁注,您也可以使用--stdlayout来克隆您的svn回购,然后将主要设置为跟踪release而不是trunk。这也不难。