我正在使用git-svn我公司的中央git branch -r存储库.我们最近在中央仓库中创建了一个新功能分支.我怎么fetch说呢?当我跑步时,git-svn我只能看到当我git branch -r与fetch仓库对抗以初始化我的git-svn仓库时存在的分支?
vja*_*gus 289
您可以手动添加远程分支,
git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/
git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch
git svn fetch newbranch [-r<rev>]
git checkout -b local-newbranch -t newbranch
git svn rebase newbranch
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 92
如果要跟踪所有远程svn分支,那么解决方案就像下面这样简单:
git svn fetch
Run Code Online (Sandbox Code Playgroud)
这将获取尚未获取的所有远程分支.
额外提示:如果您最初只检查了主干,稍后您想要跟踪所有分支,那么编辑.git/config看起来像这样并重新运行git svn fetch:
[svn-remote "svn"]
url = https://svn/path_to_repo_root/
fetch = path_to_trunk:refs/remotes/git-svn
branches = path_to_branches/*:refs/remotes/*
Run Code Online (Sandbox Code Playgroud)
其要点是url应指向库根,并在限定的路径fetch和branches应该是相对于url.
如果你只想获取特定的分支而不是ALL,那么有一个很好的例子git svn --help:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
branches = branches/{red,green}/src:refs/remotes/branches/*
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
Run Code Online (Sandbox Code Playgroud)
对于旧版本git-svn,一旦您指定了这样的分支,您可能无法获得新的分支git svn fetch.一种解决方法是添加更多fetch行,如下所示:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
fetch = branches/blue:refs/remotes/branches/blue
fetch = branches/yellow:refs/remotes/branches/yellow
branches = branches/{red,green}/src:refs/remotes/branches/*
Run Code Online (Sandbox Code Playgroud)
另一种解决方法由@AndyEstes:编辑.git/svn/.metadata和更改的值branches-maxRev或tags-maxRev创建任何新指定的分支或标签之前的修订版.完成此操作后,运行git svn fetch以跟踪新的svn远程分支.
Han*_*Gay 53
看来我只需要git svn fetch; 不知怎的,我已经说服自己将获取整个回购而不仅仅是改变.
Mat*_*rog 15
也许我以某种方式弄乱了它,但我按照vjangus的回答中的指示,它几乎奏效了.唯一的问题是newbranch似乎没有从行李箱分支.在gitk中,它本身就是一种"浮动"; 它与躯干没有共同的祖先.
解决方法是:
git diff-tree <sha1 from step 1> <sha1 from step 2> - 应该没有输出.如果有输出,则可能选择了错误的提交.git checkout local-newbranch然后git rebase <sha1 from step 1>.这将重新绑定local-newbranch到新树上,但remotes/newbranch仍将断开连接..git/refs/remotes/newbranch并对其进行编辑以包含新提交的完整SHA1 (在重新设置上newbranch),该SHA1 对应于它当前指向的旧提交.(或者也许可以使用git-update-ref refs/remotes/newbranch <new-SHA>.谢谢你.)git svn dcommit来newbranch,你会得到一堆关于它的消息更新一些日志.我认为这是正常的.我建议保持gitk --all打开时间并经常刷新以跟踪你正在做的事情.我仍然是git和git svn的新手,所以请建议改进这种方法.
vjangus答案的简化:
如果你在SVN中使用标准布局并且已经完成了通常的svn init,那么git-svn会为你做配置.只是:
一个例子.SVN网址是svn+ssh://gil@svn.myplace.com/repo.我正在寻找的SVN分支是newbranch.本地git分支(跟踪远程newbranch)将是git-newbranch.
第1步:找到分支副本修订版
# svn log --stop-on-copy svn+ssh://gil@svn.myplace.com/repo/branches/newbranch | tail -4
r7802 | someone | 2014-03-21 18:54:58 +0000 (Fri, 21 Mar 2014) | 1 line
branching HEAD to newbranch
------------------------------------------------------------------------
因此SVN中的分支点是修订版7802.
第2步:获取修订版
# git svn fetch -r 7802
Found possible branch point: svn+ssh://gil@svn.myplace.com/repo/trunk => svn+ssh://gil@svn.myplace.com/repo/branches/newbranch, 7801
Found branch parent: (refs/remotes/trunk) 8dcf3c5793ff1a8a79dc94d268c91c2bf388894a
Following parent with do_switch
Successfully followed parent
r7802 = 9bbd4194041675ca5c9c6f3917e05ca5654a8a1e (refs/remotes/newbranch)
git-svn做了所有的工作,现在知道了遥控器:
# git show-ref | grep newbranch
2df23af4733f36f5ad3c14cc1fa582ceeb3edb5c refs/remotes/newbranch
第3步:创建跟踪远程分支的新本地分支:
# git checkout -b git-newbranch -t newbranch
Checking out files: 100% (413/413), done.
Branch git-newbranch set up to track local ref refs/remotes/newbranch.
Switched to a new branch 'git-newbranch'
我没有找到任何关于此功能的文档,但看起来git svn配置支持多个获取条目.这样,您还可以单独添加分支,而无需在配置中添加另一个远程svn存储库条目,也不需要使用通配符来获取某个目录的所有分支.
假设您的SVN树真的很讨厌有很多分支,没有任何逻辑它们如何定位,例如,分支和子目录包含更多分支.
即
trunk
branches
-> branch1
-> sub-dir1
-> branch2
-> branch3
-> sub-dir2
-> branch4
-> sub-dir3
-> branchX
<... hundreds more ...>
Run Code Online (Sandbox Code Playgroud)
而你只是想亲自挑选一些要包含在你的git存储库中的分支.
您可以首先使用trunk而不使用任何其他分支来初始化您的存储库:
git svn clone -r 10000:HEAD https://svn.com/MyRepo myrepo --prefix=svn/ --trunk=trunk
Run Code Online (Sandbox Code Playgroud)
之后你应该看到以下配置:
localhost: elhigu$ git config --get-regexp "svn-remote."
svn-remote.svn.url https://svn.com/MyRepo
svn-remote.svn.fetch trunk:refs/remotes/svn/trunk
Run Code Online (Sandbox Code Playgroud)
当您想要从MyRepo获取新分支时,您可以通过以下方式添加新的获取条目到配置:
git config --add svn-remote.svn.fetch branches/sub-dir2/branch4:refs/remotes/svn/branches/sub-dir2/branch4
Run Code Online (Sandbox Code Playgroud)
或者您可以在.git/config中编辑相同的配置
要在将新分支添加到配置后获取新分支,请运行:
git svn fetch -r 10000:HEAD
Run Code Online (Sandbox Code Playgroud)
[编辑]有时似乎有必要使用--all参数运行fetch来获取新添加的分支:
git svn fetch --all -r 10000:HEAD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68347 次 |
| 最近记录: |