git-svn - 当我的 master 已经是一个分支时,签出 svn 中已经存在的远程分支。解释一下这个.git/config
考虑到我加入的团队是如何使用 SVN 的,这是一个有点奇怪的问题。基本上,svn 存储库遵循标准布局,但主干确实在 1.5 年左右的时间里没有被触及,工作往往只发生在分支和分支的分支中。因此,我使用 git-svn 从代表下一个版本的活动分支的分支进行克隆,这也是 master 在我的本地 git 存储库中跟踪的内容。从现在开始,我们将 svn 中的这个分支称为“release”。使用 git-svn 来达到这个目的简直是太棒了。
现在,有人创建了一个“发布”的功能分支,我将其称为“功能”,我想将其下拉到我的本地分支,并提交给它。当然,我可以只将该分支克隆到本地另一个目录/git 存储库中,但我真正想做的是将“功能”镜像到本地 git 存储库中的本地分支中,以便在之间进行合并两者尽可能简单。我已经看到其他 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
但我不知道那是什么在这种情况下,$something 也不是 git checkout 的咒语和我对 .git/config 进行更改后需要的其他命令。
有什么建议吗?
编辑 - 以下工作:
所以我从头开始并执行以下克隆命令:
git svn clone https://my.svn.server/svn/root -T Branches/branch_I_want_as_master -b Branchs
经过大约 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 正确执行操作。
This is a bit of an oddball question given how the team I've joined is using SVN. Basically, the svn repository follows a standard layout, but trunk really hasn't been touched in 1.5 years or so and work tends to happen in branches and branches of branches only. As such, I've used git-svn to clone from the branch that represents the active branch for our next release and that is what master tracks in my local git repository. Let's call this branch in svn 'release' from here on out. Using git-svn for this purpose is just hunky dory.
Now, someone has created a feature branch off of 'release', that I'm going to call 'feature', that I'd like to pull down to a local branch of mine, and commit to as well. Sure, I can get away with just cloning that branch off into another directory/git repository locally, but what I'd really like to do is have 'feature' mirrored in a local branch within my local git repository as well to make merging between the two as straightfoward as possible. I've seen other stackoverflow.com posts show how this works assuming you've used git svn init
with --stdlayout
, but I didn't do that in my case for the reasons stated above.
Here is my .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
I'm assuming what I need in my [svn-remote]
section is a branches = $something
but I don't know what that $something is in this case nor what incantation of git checkout and other commands I need after I make that change to .git/config.
Any suggestions?
Edit - The following works:
So I started from scratch and did the following clone command:
git svn clone https://my.svn.server/svn/root -T branches/branch_I_want_as_master -b branches
Which, after about 16 hours, finally pulled everything down that it needed to. The resultant .git/config looks like this:
[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/*
So I know this works - I can git checkout -b name-of-a-branch name-of-a-branch
and it gives me the remote branch in my local git repo. The previous answers weren't the exact answers I needed, but I've upvoted since they were helpful.
At this point, I'll accept answer that just explains why this works and perhaps a useful link that breaks down how to do things properly with .git/config.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的存储库配置应如下所示:
url
应指向存储库的根目录。fetch
指向您的主干(实际上可以是任何分支),并且可以有任意数量的分支
条目,指向您的功能 分支机构。也许你应该从 scatch 构建你的 git 存储库,但这个配置是有效的。
You repository config should be looking like this:
url
should point at root of your repository.fetch
points to your trunk (it could be any branch in fact), and there could be any number ofbranches
entries, that points to your feature branches.Maybe you should construct your git repository from scatch, but this config works.
您是否尝试过将
branches=..
添加到 svn-remote 部分? (假设url
直接指向您的release
分支)。您将获得一个额外的release
头来跟踪发布分支,但随后您也会跟踪所有其他分支,以便您可以检查它们。作为奖励,git svnbranch
(可能)也可以用于创建新分支!顺便说一句,您也可以只使用
--stdlayout
克隆您的 svn 存储库,然后将 master 设置为跟踪release
而不是trunk.这也不难做到。
Have you tried just adding
branches=..
to your svn-remote section? (presumingurl
points directly at yourrelease
branch). You'll get an extrarelease
head tracking the release branch, but then you'll get all the other branches tracked too so that you can check them out. As a bonusgit svn branch
will (probably) work for creating new branches too!As a side note, you could have also just used
--stdlayout
to clone your svn repo, and then set master up to trackrelease
instead oftrunk
. That's not hard to do either.