2012-04-11 7 views
0

私は自分のコントロールからsvnリポジトリに取り組んでいます。非常に厳密な権限を持つ標準レイアウトを使用します。厳重な許可を受けたgit-svn

親フォルダへの読み取りアクセス権がありません。

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にそれを取得させることができます。

答えて

0

私は新しいブランチを初期化するためのシンプルなダーティシェルスクリプトを書いています。これは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 

[email protected]$fromrev 
tourl=$branchurl/[email protected]$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 [email protected]$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 
+0

私は自分自身から答えを受け入れます。 – Yaocl

関連する問題