我通过git-svn镜像的一个svn存储库已经更改了URL。
在vanilla svn中,您只需执行svn switch --relocate old_url_base new_url_base
。
如何使用git-svn完成此操作?
简单地更改配置文件中的svn url将失败。
发布于 2008-11-06 13:46:03
Git svn严重依赖于svn URL。从svn导入的每个提交都有一个包含svn URL的git-svn-id
。
有效的重新定位策略是在新的存储库上调用git-svn clone
,并将更改合并到新的关闭上。有关更详细的过程,请参阅本文:
http://www.sanityinc.com/articles/relocating-git-svn-repositories
发布于 2013-08-22 21:22:52
git filter-branch
取自a blog entry的This script一直在为我工作。提供旧的和新的repo URL作为参数,就像svn switch --relocate
一样。
该脚本调用git filter-branch
来替换提交消息中git-svn-id
中的Subversion URL,更新.git/config
,并通过使用git svn rebase
重新创建git-svn
元数据来更新它。虽然git svn clone
可能是更健壮的解决方案,但filter-branch
方法对于大型存储库(几小时而不是几天)的工作速度要快得多。
#!/bin/sh
# Must be called with two command-line args.
# Example: git-svn-relocate.sh http://old.server https://new.server
if [ $# -ne 2 ]
then
echo "Please invoke this script with two command-line arguments (old and new SVN URLs)."
exit $E_NO_ARGS
fi
# Prepare URLs for regex search and replace.
oldUrl=`echo $1 | awk '{gsub("[\\\.]", "\\\\\\\&");print}'`
newUrl=`echo $2 | awk '{gsub("[\\\&]", "\\\\\\\&");print}'`
filter="sed \"s|^git-svn-id: $oldUrl|git-svn-id: $newUrl|g\""
git filter-branch --msg-filter "$filter" -- --all
sed -i.backup -e "s|$oldUrl|$newUrl|g" .git/config
rm -rf .git/svn
git svn rebase
https://stackoverflow.com/questions/268736
复制相似问题