首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有严格权限的git-svn

具有严格权限的git-svn
EN

Stack Overflow用户
提问于 2012-04-11 22:38:22
回答 1查看 180关注 0票数 1

我正在处理一个不受我控制的svn存储库。它使用具有非常严格权限的标准布局。

我没有父文件夹的读取权限。

代码语言:javascript
复制
svn://foo.bar/project/
svn://foo.bar/project/branches

但我能读懂svn://foo.bar/project/trunksvn://foo.bar/project/branches/x

如果我在git-svn中使用多个远程,我可以获取并提交这些分支。但是git-svn不会找到分支的父分支。多个远程数据库将被视为不同的存储库。

似乎我可以修改git-svn来纠正下面的父源文件。但我不了解perl。有没有可能编写一个脚本来修复分支的父哈希。或者我可以使用一个简单的脚本来创建新的远程分支,然后让git-svn来获取它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-13 11:03:20

我编写了一个简单的脏shell脚本来初始化新的branch.It将为svn分支创建第一个提交。在此之后,git-svn fetch --all将正常工作。

代码语言:javascript
复制
#!/bin/bash

branch=$1
prefix=svn-remote.svn-$branch
rooturl=svn://example.com
branchurl=$rooturl/foo/branches
git config $prefix.ignore-paths "^exclude"
git config $prefix.url $branchurl/$branch
git config $prefix.fetch :refs/remotes/$branch

logentry=$(svn log -v -r0:HEAD --stop-on-copy -l 1 --xml $branchurl/$branch)
torev=$(echo "$logentry" |grep revision |grep -o [0-9]*)
fromrev=$(echo "$logentry" |grep copyfrom-rev |grep -o [0-9]*)
frompath=$(echo "$logentry" |grep copyfrom-path | sed -E 's/\s*copyfrom-path="(.*)"/\1/')
author=$(echo "$logentry" |grep "<author>" |sed -E 's#</?author>##g')
author_date=$(echo "$logentry" |grep "<date>" |sed -E 's#</?date>##g')

if [ -z $torev ];then
    exit 1;
fi

if [ -z $fromrev ];then
    exit 2;
fi

if [ -z $frompath ];then
    exit 3;
fi

fromurl=$rooturl$frompath@$fromrev
tourl=$branchurl/$branch@$torev
frombranch=$(basename $frompath )
echo $fromurl
echo $tourl
echo $fromrev
parent=$(git svn log -r $fromrev $frombranch --oneline --show-commit |grep $fromrev |awk '{print $3}')
if [ -z $parent ];then
    exit 4;
fi
uuid=$(git log -1 |grep git-svn-id: | awk '{print $NF}')
tree=$(git cat-file commit $parent |head -1 |cut  -d ' ' -f 2)
echo tree $tree
echo parent $parent
echo uuid $uuid

head=$(GIT_AUTHOR_NAME=$author GIT_AUTHOR_EMAIL=$author@$uuid GIT_AUTHOR_DATE=$author_date git commit-tree $tree -p $parent <<EOF
$logentry

git-svn-id: $tourl $uuid 
EOF
)
echo $head
git update-ref refs/remotes/$branch $head
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档