2013-08-29 38 views
11

Tôi đang gặp một số lỗi khi cố gắng sao chép/sao chép một repo GitHub. Tôi đã thử làm điều này qua HTTPS cục bộ, hoặc máy chủ đến máy chủ (vì vậy tôi có thể hotcopy nó trở lại repo máy chủ SVN của chúng tôi). Các kịch bản BASH Tôi đang sử dụng mà nên đổ repo không thành công với các lỗi này:Lỗi khi bán phá giá kho lưu trữ SVN dựa trên Git qua HTTP

$ svnsync tập tin init: /// home/jdaniel/www/clone/nghỉ ngơi https://github.com/ehime/Restful-MVC-Prototype
svnsync: E125005: sai hoặc không mong muốn giá trị tài sản
svnsync: E125003: ngày Bogus

$ svnsync sync file: /// home/jdaniel/www/clone/nghỉ ngơi https://github.com/ehime/Restful-MVC-Prototype
svnsync: E200007: Các báo cáo được yêu cầu là không rõ.

Tôi cũng đã cố gắng sử dụng snvrdump nhưng có một vấn đề lạ tương tự:

$ svnrdump dump https://github.com/ehime/CLI-Parser 

SVN-fs-dump-format-version: 3 

UUID: cfadd8e1-f89a-a5da-a424-ce57b7db7bff 

Revision-number: 0 
Prop-content-length: 163 
Content-length: 163 

K 10 
git-commit 
V 0 

K 10 
svn:author 
V 0 

K 8 
svn:date 
V 0 

K 7 
svn:log 
V 0 

K 25 
svn:wc:ra_dav:version-url 
V 39 
/ehime/Restful-MVC-Prototype/!svn/bln/0 
PROPS-END 

* Dumped revision 0. 
Revision-number: 1 
Prop-content-length: 299 
Content-length: 299 

K 10 
git-commit 
V 40 
ec089b697a5698f71d5edffb2f90b1385acbc53f 
K 10 
svn:author 
V 5 
ehime 
K 8 
svn:date 
V 27 
2013-08-16T17:16:26.000000Z 
K 7 
svn:log 
V 61 
Initial repository configuration with working hello world bs 

K 25 
svn:wc:ra_dav:version-url 
V 39 
/ehime/Restful-MVC-Prototype/!svn/bln/1 
PROPS-END 

svnrdump: E200007: The requested report is unknown. 

này kết thúc với cùng một lỗi Requested report is unknown.

Tất cả repo GitHub mà tôi đã thử nghiệm cho đến nay (4-5) ném lỗi báo cáo không xác định đó. Hãy giúp tôi.

+1

đặt cược của tôi là công cụ của bạn không thành công vì github chỉ mô phỏng tập hợp con của giao thức lật đổ (về cơ bản là webdav) được yêu cầu thực hiện kiểm tra và cam kết, trong khi các công cụ bạn đang sử dụng yêu cầu máy chủ lật đổ thực ở đầu bên kia. Bạn đã thử kiểm tra kho lưu trữ bằng cách sử dụng git và sau đó [git-svn] (https://git-scm.com/docs/git-svn) để đẩy toàn bộ lịch sử để lật đổ? – Phillip

+0

Rõ ràng, cách tốt nhất để truy cập vào repo GitHub là sử dụng Git ;-). Một khi bạn có bản sao cục bộ, bạn có thể sử dụng bất kỳ công cụ nào làm việc để bạn có thể quay lại repo SVN và bạn không bị giới hạn bởi mô phỏng SVN của GitHub. –

+0

@Phillip Bạn có thể cung cấp Git [Hub] từng bước cho svn repo làm câu trả lời không? Có vẻ như đây là cách duy nhất có thể đạt được - và do đó sẽ là câu trả lời "đúng" bị thiếu ở đây. –

Trả lời

3

@SimonSobisch

mỗi Simons yêu cầu, đây là kịch bản mà tôi đã kết thúc bằng văn bản để di chuyển Subversion vào GH

#!/usr/local/env bash 
# Converter for GitHub -> Subversion Repositories 

# CPR : Jd Daniel :: Ehime-ken 
# MOD : 2013-03-09 @ 16:26:53; 2017-01-31 @ 13:36:15 Simon Sobisch 
# VER : Version 1c 

# the Github SVN url to clone from 
URL={THE_SVN_URL} # https://github.com/user/repo/ 

# the SVN url to clone to 
REPO={THE_REPO_ROOT} in # svn+ssh://[email protected]/api/svn_name 

# the SVN structure 
SVNTRUNK=${SVN_TRUNK-trunk} 
SVNTAGS=${SVN_TAGS-tags} 
SVNBRANCHES=${SVN_BRANCHES-branches} 

# use the trunk, branch, etc... I'm using the trunk 
SVN="${REPO}/$SVNTRUNK" 


clear || cls;     # set -x #debug 

## if you want to burn and rebuild your repo, uncomment below 
# 
#echo "Burning Repo..." 
#svn rm $REPO/{$SVNTRUNK,$SVNTAGS,$SVNBRANCHES} -m "Burning..." 

#echo "Rebuilding Repo...." 
#svn mkdir $REPO/{$SVNTRUNK,$SVNTAGS,$SVNBRANCHES} -m "Rebuilding..." 

# cleanup 
find -maxdepth 1 -type d ! -name '.*' |xargs rm -rf; # tmp 

# dirs 
SVN_FOLDER=`pwd`"/svn" 
GIT_FOLDER=`pwd`"/git" 


# revs 
ENDREV=`svn info $URL |grep Revision: |awk '{print $2}'` 
CURREV=1 

    mkdir -p $SVN_FOLDER $GIT_FOLDER 

echo -e "\nLinking SVN repo\n" 

    cd $SVN_FOLDER 
    svn co $SVN . 

echo -e "\nDownloading GIT repo\n" 

    cd $GIT_FOLDER 
    git svn init -s $URL \ 
    -T $SVNTRUNK \ 
    -t $SVNTAGS \ 
    -b $SVNBRANCHES \ 
    --prefix=svn/ 

    # Set authors so we get prettier authors 
    if [ -f "../authors"]; then 
    git config svn.authorsfile ../authors 
    fi 

    echo -e "\nFound ${ENDREV} revisions\n" 

    for ((REVISION=$CURREV; REVISION<$ENDREV+1; REVISION++)) 
    do 

    cd $GIT_FOLDER 

    echo -e "\n---> FETCHING: ${REVISION}\n" 

    git svn fetch -r$REVISION;    echo -e "\n" 
    git rebase `git svn find-rev r$REVISION`; echo -e "\n" 

    # STATUS: git log -p -1 `git svn find-rev r19` --pretty=format: --name-only --diff-filter=A | sort -u 
    ADD=$(git log -p -1 `git svn find-rev r$REVISION` --pretty=format: --name-only --diff-filter=A |awk '{printf "%s ", $1}') 
    MOD=$(git log -p -1 `git svn find-rev r$REVISION` --pretty=format: --name-only --diff-filter=M |awk '{printf "%s ", $1}') 
    DEL=$(git log -p -1 `git svn find-rev r$REVISION` --pretty=format: --name-only --diff-filter=D |awk '{printf "%s ", $1}') 

     # copy new files 
     for i in $ADD 
     do 
     cp --parents $i $SVN_FOLDER/ 
     done 


     # copy modified files 
     for i in $MOD 
     do 
     cp --parents $i $SVN_FOLDER/ 
     done 


    # set opts for SVN logging 
    HASH=$(git log -1 --pretty=format:'Hash: %h <%H>') 
    AUTHOR='Jd Daniel <[email protected]>' # or $(git log -1 --pretty="%cn <%cE>") 

    TMPDATE=$(git log -1 --pretty=%ad --date=iso8601) 
    DATE=$(date --date "$TMPDATE" -u +"%Y-%m-%dT%H:%M:%S.%N" |sed 's/.....$/Z/g') 

    LOGMSG=$(git log -1 --pretty=%s) 

    # move to svn 
    cd $SVN_FOLDER 


    # burn file if it exists.... 
    if [ "$DEL" != "" ]; then 
     for i in $DEL 
     do 
     test -f $i && svn --force rm $i 
     done 
    fi 

    # first round of additions.... 
    [ -z "$ADD" ] || svn --force add $ADD 
    [ -z "$MOD" ] || svn --force add $MOD 


    # try 2 for adding in case we missed ? files 
    ADDTRY=$(svn st . |grep "^?" |awk '{print $2}') 
    [ -z "$ADDTRY" ] || svn --force add $ADDTRY 

    # do commit 
    svn ci -m "$LOGMSG"$'\n\n'"$HASH" 

    # servers pre-revprop-change 
    # cp hooks/pre-revprop-change.tmpl pre-revprop-change; chmod +x pre-revprop-change 
    # if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:author" ]; then exit 0; fi 
    # if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:date" ]; then exit 0; fi 
    # echo "Changing revision properties other than svn:log, svn:author and svn:date is prohibited" >&2 

    # change this commits author and date 
    svn propset --revprop -r HEAD svn:author "$AUTHOR" 
    svn propset --revprop -r HEAD svn:date "$DATE" 

    done 

exit 

Dù sao, git-svn hỗ trợ này thực sự tốt, chỉ với sự thay đổi nhỏ trên bản sao git svn thông thường.

Thay vì tiêu chuẩn dự án/trunk | chi nhánh | thẻ chúng tôi sử dụng hơi khác nhau parent/trunk|branches|tags/project để bạn sẽ thấy tôi chỉ định cờ - T/-t/-b.

git svn init 

Đây là những gì tôi làm, từ repo git địa phương hiện có:

# Create the project directory in subversion 
$ /usr/bin/svn mkdir 
    https://foo.com/svn/parent/trunk/project 
    -m "Make project directory." 
Committed revision 200. 

# Initialize git-svn, doesn't fetch anything yet 
$ git svn init https://foo.com/svn/ 
    -T parent/trunk/project 
    -t parent/tags/project 
    -b parent/branches/project 
    --prefix=svn/ 

# Set authors so we get prettier authors 
$ git config svn.authorsfile ../authors 

# Now pull down the svn commits 
$ git svn fetch 
W: Ignoring error from SVN, ... 
W: Do not be alarmed at the above message git-svn ... 
This may take a while on large repositories 
r200 = (guid) (refs/remotes/svn/trunk) 

# We should now see our svn trunk setup under our svn remote 
$ git branch -av 
* master   c3a7161 The latest git commit. 
    remotes/svn/trunk 3b7fed6 Make project directory. 

# Now we want to take all of our local commits and 
# rebase them on top of the new svn/trunk 
$ git rebase svn/trunk 
First, rewinding head to replay your work on top of it... 
Applying: First git commit 
Applying: The latest git commit 

# Now we should see our local commits applied 
# on top of svn/trunk 
$ git lg 
* 52b7977 (HEAD, master) The latest git commit 
* a34e162 First git commit 
* 3b7fed6 (svn/trunk) Make project directory. 

# Everything is cool, push it back to svn 
$ git svn dcommit 
Committing to https://foo.com/svn/parent/trunk/project 
... 

–prefix=svn 

Một lá cờ tôi đặc biệt thích thời gian gần đây, mà bạn cũng có thể sử dụng với git svn clone, là --prefix=svn/.

Điều này sẽ tiền tố tất cả các nhánh theo dõi của bạn trong các nhánh, thẻ và thân cây Subversion từ xa với svn /, làm cho nó trông hoàn toàn giống như nguồn gốc/thành ngữ thông thường được sử dụng bởi điều khiển từ xa thông thường.

Với các ngành theo dõi có một tiền tố, bạn cũng có thể sử dụng chúng như tên chi nhánh địa phương, ví dụ:

# Name your copy of svn/trunk "trunk" instead of "master" 
$ git checkout -b trunk master 
Switched to a new branch 'trunk' 

$ git branch -d master 
Deleted branch master (was 33c3136). 

$ git branch -av 
* trunk    33c3136 Latest svn commit 
* remotes/svn/trunk 33c3136 Latest svn commit 

Sau đó, nếu bạn có các chi nhánh khác mà bạn muốn theo dõi:

$ git checkout -b featurea svn/featurea 
+0

@SimonSobisch đây là câu trả lời bạn muốn – ehime

+0

Và nếu điều này không hoạt động tôi có khoảng ba cách khác, chỉ cần ping tôi;) – ehime

+0

Tập lệnh đầu tiên hiện đang chạy để tôi không thể nói về kết quả cuối cùng - chỉ một số vấn đề có thể tôi muốn đề cập đến nó: 1. mất rất nhiều thời gian nếu bạn sử dụng này, ngay cả khi kho svn là địa phương (tôi đã tạo một địa phương mới, truy cập nó thông qua giao thức 'file:') 2. kiểm tra git và svn binary (máy tính thử nghiệm mới của tôi không có cài đặt git) và cho svn revprop hook - kịch bản hiện tại không kiểm tra điều này. 3. Có khả năng không làm việc như nó phải - ít nhất tôi nhận được rất nhiều "cp: không thể stat' some-file': Không có tập tin hoặc thư mục "cảnh báo khi chạy (đầu tiên) script –

Các vấn đề liên quan