1

私は自分のコントロールできないsvnリポジトリに取り組んでいます。非常に厳格な権限を持つ標準レイアウトを使用します。

親フォルダへの権限を読み取っていません。

svn://foo.bar/project/
svn://foo.bar/project/branches

しかし、私は読むことができsvn://foo.bar/project/trunkますsvn://foo.bar/project/branches/x

git-svnで複数のリモートを使用する場合、これらのブランチをフェッチしてコミットできます。しかし、git-svnはブランチの親を見つけられません。複数のリモートは異なるリポジトリとして扱われます。

次の親ソースを修正するためにgit-svnを変更できるようです。しかし、私はperlを知りません。ブランチの親ハッシュを修正するスクリプトを書くことは可能ですか?または、簡単なスクリプトを使用して新しいリモートブランチを作成し、git-svnにフェッチさせることはできますか?

4

1 に答える 1

1

新しいブランチを初期化するための簡単なダーティシェルスクリプトを作成しました。これにより、svnブランチの最初のコミットが作成されます。その後、git-svn fetch --all動作します。

#!/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
于 2012-04-13T03:03:19.640 に答える