我正在研究的一个SVN项目(通过git-svn)经常创建分支,然后用trunk重新整合,然后删除.
现在该项目有大约10个尚未删除的分支,但在git中,git branch -r显示大约50个.
我可以一次删除这些,检查它们是否仍然存在于svn存储库中,但它是缓慢而乏味的.有没有办法将我的git远程分支列表与svn repo同步?
小智 22
这是我在几分钟内制作的快速解决方案.它利用了各地都无法提供的漂亮的正则表达式模式.
这抓住了一个干净的分支列表.我删除每行开头的格式空格,我现在忽略标记:
git branch -r | sed 's|^[[:space:]]*||' | grep -v '^tags/' > git-branch-list
Run Code Online (Sandbox Code Playgroud)
我从svn中获取了一个类似的分支列表,再次删除了格式和尾随正斜杠:
svn ls svn://path/to/branch/dir/ | sed 's|^[[:space:]]*||' | sed 's|/$||' > svn-branch-list
Run Code Online (Sandbox Code Playgroud)
我差异列表,找到svn列表中不存在的行,删除diff格式,摆脱"trunk"分支(这是git-svn方便)并将结果保存到新列表:
diff -u git-branch-list svn-branch-list | grep '^-' | sed 's|^-||' | grep -v '^trunk$' | grep -v '^--' > old-branch-list
Run Code Online (Sandbox Code Playgroud)
现在我只为git-svn执行标准分支删除过程:
for i in `cat old-branch-list`; do git branch -d -r "$i"; rm -rf .git/svn/refs/remotes/"$i"; done
Run Code Online (Sandbox Code Playgroud)
这可能是更好的方法,但它的工作原理.欢迎其他人接受并改进.