Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Errors in dumping a remote Git based SVN repository over HTTP

I'm running into several errors trying to clone/mirror a GitHub repo. I've tried doing this over HTTPS locally, or server to server (so I can hotcopy it back into our SVN server repo). The BASH script I'm using that should dump the repo fails with these errors:

$ svnsync init file:///home/jdaniel/www/clone/rest https://github.com/ehime/Restful-MVC-Prototype
svnsync: E125005: Wrong or unexpected property value
svnsync: E125003: Bogus date

$ svnsync sync file:///home/jdaniel/www/clone/rest https://github.com/ehime/Restful-MVC-Prototype
svnsync: E200007: The requested report is unknown.

I've also tried using snvrdump but get a similarly weird 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.

This ends with the same Requested report is unknown error.

All GitHub repos that I've tested so far (4-5) throw that report unknown error. Please help.

like image 550
ehime Avatar asked Aug 29 '13 23:08

ehime


People also ask

Can I use Git and SVN at the same time?

You can clone a subversion repository to your machine using git svn clone <SVN repo URL> . The code will be available as a git repository. You can do your work there and make local commits as you please. There is a command line option to get a "shallow" checkout rather than the entire repository which is often useful.

Which is better SVN or Git?

SVN is better than Git for architecture performance, binary files, and usability. And it may be better for access control and auditability, based on your needs.

What is SVN repository URL?

The repository URL will be: https://svn.cs.dal.ca/<student> where <student> is the student's CS user name. 2. Students create the SVN path in their repositories where coursework will be stored. The path for this course is https://svn.cs.dal.ca/<student>/csci3151. Student will be "eem" in the following examples.


1 Answers

@SimonSobisch

Per Simons request, here is the scripts that I ended up writing to move Subversion into 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

Anyway, git-svn supports this really well, with just a slight variation on the usual git svn clone.

Instead of the standard project/trunk|branches|tags we use a slightly different parent/trunk|branches|tags/project so you’ll see I specify the -T/-t/-b flags.

git svn init

Here is what I do, from the existing local git repo:

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

# Initialize git-svn, doesn't fetch anything yet
$ git svn init https://example.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://example.com/svn/parent/trunk/project
...

–prefix=svn

One flag I especially like lately, which you can also use with git svn clone, is --prefix=svn/.

This will prefix all of your tracking branches of the remote Subversion branches, tags, and trunk with svn/, making it look a whole lot like the usual origin/ idiom used by regular git remotes.

With the tracking branches having a prefix, you can also use them as local branch names, e.g.:

# 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

Then if you have other branches you want to track:

$ git checkout -b featurea svn/featurea
like image 177
ehime Avatar answered Nov 05 '22 22:11

ehime