2013-08-29 15 views
11

Występują różne błędy, które próbują sklonować/odbić lustrzane repozytorium GitHub. Próbowałem robić to przez HTTPS lokalnie lub z serwera na serwer (dzięki czemu mogę go ponownie skopiować do repozytorium SVN). Skrypt BASH Używam że powinna zrzucić repo nie z tych błędów:Błędy podczas zamykania zdalnego repozytorium SVN opartego na Git za pośrednictwem protokołu HTTP

$ svnsync plików startowych: /// home/jdaniel/www/klon/reszta https://github.com/ehime/Restful-MVC-Prototype
svnsync: E125005: Błędna lub nieoczekiwana wartość nieruchomości
svnsync: E125003: Bogus data

$ svnsync sync file: /// home/jdaniel/www/klon/reszta https://github.com/ehime/Restful-MVC-Prototype
svnsync: E200007: Żądana raport jest nieznany.

Ja również próbowałem przy użyciu snvrdump jednak uzyskać podobny dziwny problem:

$ 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. 

ten kończy się tym samym Requested report is unknown błędu.

Wszystkie repliki GitHub, które przetestowałem do tej pory (4-5), zgłaszają ten raport nieznany błąd. Proszę pomóż.

+1

mój zakład jest to, że twoje narzędzia zawodzą, ponieważ github emuluje jedynie podzbiór protokołu subversion (w zasadzie webdav), który jest wymagany do kasowania i zatwierdzania, podczas gdy narzędzia, których używasz, wymagają prawdziwego serwera subversion na drugim końcu. Czy próbowałeś wypróbować repozytorium za pomocą git, a następnie [git-svn] (https://git-scm.com/docs/git-svn), aby przepchnąć całą historię do subversion? – Phillip

+0

Najwyraźniej najlepszym sposobem uzyskania dostępu do repozytorium GitHub jest użycie Git ;-). Kiedy już masz lokalną kopię, możesz użyć dowolnego narzędzia, które pomoże ci przywrócić repozytorium SVN i nie jesteś ograniczony przez emulację SVN GitHub. –

+0

@Phillip Czy możesz podać krok po kroku Git [Hub] do svn repo jako odpowiedź? Wygląda na to, że jest to jedyny sposób, w jaki można to osiągnąć - a zatem będzie to "poprawna" odpowiedź, której tutaj brakuje. –

Odpowiedz

3

@SimonSobisch

Per Simons wniosek, jest tu skrypty że skończyło się na piśmie, aby przejść do Subversion 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 

Zresztą git-svn obsługuje to naprawdę dobrze, tylko z lekkim zmienności na zwykłym klonie git svn.

Zamiast standardowych projekt/bagażniku | oddziały | tagów użyjemy nieco inny parent/trunk|branches|tags/project więc zobaczymy ja określić - T/-t/-b flagi.

git svn init 

Oto, co robię, z istniejącego lokalnego repo git:

# 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 

Jedna flaga Szczególnie podoba mi się ostatnio, co można również skorzystać z git svn clone jest --prefix=svn/.

Spowoduje to prefiks wszystkich gałęzi śledzenia odległych gałęzi, znaczników i pnia Subversion za pomocą polecenia svn /, dzięki czemu będzie wyglądać jak zwykłe pochodzenie/idiom używany przez zwykłe piloty git.

Z gałęzi śledzenia mających przedrostek, można również używać ich jako nazw lokalnych oddziałów, np:

# 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 

Następnie, jeśli masz inne branże, które chcesz śledzić:

$ git checkout -b featurea svn/featurea 
+0

@SimonSobisch Oto odpowiedź, którą chciałeś – ehime

+0

A jeśli to nie zadziała, mam na myśli trzy inne sposoby, po prostu zadzwoń do mnie;) – ehime

+0

Pierwszy skrypt aktualnie działa, więc nie mogę powiedzieć o ostatecznym wyniku - tylko niektóre z możliwych problemów chcę wspominając o tym: 1. poświęć dużo czasu, jeśli używasz tego, nawet jeśli repozytorium svn jest lokalne (utworzyłem nowy lokalnie, uzyskując do niego dostęp poprzez protokół 'file:') 2. sprawdź git i svn binary (mój nowy testowy komputer nie miał zainstalowanego git) i svn revprop hook - skrypt aktualnie nie testuje tego. 3. Prawdopodobnie nie działa tak jak powinien - przynajmniej mam dużo "cp: can not stat" some-file': Brak takiego pliku lub katalogu "ostrzeżenia podczas uruchamiania (pierwszego) skryptu –

Powiązane problemy