2012-02-24 14 views
5

Autori nella mia svn repo sono i seguenti:Come avere un carattere spazio finale nel file di autori per git svn

$ svn log --xml | autore di grep | ordina -u | perl -pe 's /> < ./$1 = /. (.?)'

uscita:

<author>ashfame</author> 
<author>clean</author> 
<author>clean </author> 
<author>rocketweb</author> 

Ma mentre la clonazione del pronti contro termine per l'importazione utilizzando git svn clone, si ferma in tra il dire Author: clean not defined in /home/ashfame/fun/authors-transform.txt file

Si noti il ​​doppio spazio dopo la pulizia, ovvero il terzo utente "clean ".

Come si formatta il file degli autori per avere uno spazio nel nome utente? miei contenuti correnti sono i seguenti:

ashfame = Ashfame <[email protected]> 
clean = Yogesh Tiwari <[email protected]> 
clean = Yogesh Tiwari <[email protected]> 
"clean\ " = Yogesh Tiwari <[email protected]> 
"clean " = Yogesh Tiwari <[email protected]> 
rocketweb = rocketweb <[email protected]> 
(no author) = Yogesh Tiwari <[email protected]> 
(no author) = no_author 

interessante scoperta: Ho provato ad importare il repo svn in git senza alcuna mappatura degli utenti e non riuscivo a vedere tutto ciò che riguarda "pulito" utente, solo "pulito" esiste, quindi sto indovinando che questo è un po 'di intoppo su svn repo. Qualche suggerimento su cosa si può fare al riguardo?

+0

cambiamento autore "pulito" per "pulire" ** ** in SVN? –

+0

@LazyBadger Come? – Ashfame

+0

@LazyBadger Inoltre, dovrei fare qualcosa sullo spazio nel metodo di rinominarlo anche. Meglio mapparlo a qualcosa o ignorarlo tutto insieme. – Ashfame

risposta

2

Non riuscivo a capire quale fosse il problema con il repository SVN, quindi li ho importati senza file di autore. E poi ho rinominato i dati dell'autore commit utilizzando questo script da Github:

#!/bin/sh 

git filter-branch --env-filter ' 

an="$GIT_AUTHOR_NAME" 
am="$GIT_AUTHOR_EMAIL" 
cn="$GIT_COMMITTER_NAME" 
cm="$GIT_COMMITTER_EMAIL" 

if [ "$GIT_COMMITTER_EMAIL" = "[email protected]" ] 
then 
    cn="Your New Committer Name" 
    cm="Your New Committer Email" 
fi 
if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ] 
then 
    an="Your New Author Name" 
    am="Your New Author Email" 
fi 

export GIT_AUTHOR_NAME="$an" 
export GIT_AUTHOR_EMAIL="$am" 
export GIT_COMMITTER_NAME="$cn" 
export GIT_COMMITTER_EMAIL="$cm" 
' 

Salvare il codice di cui sopra in un file con un nome dire change-commit-author-script.sh e mettere il file nella cartella principale di pronti contro termine. Rendilo eseguibile per chmod +x change-commit-author-script.sh e poi esegui da ./change-commit-author-script.sh

E sì, non dimenticare di modificare lo script per inserire il tuo nome e valori email.

3

Aveva il problema simile con lo spazio in authorname.

Risolvilo utilizzando l'opzione author-prog, che consente di utilizzare lo script di bash, che trasformerà gli autori sconosciuti.

#!/bin/bash 

if [ "$1" = "VisualSVN Server" ];then 
    echo "VirtualSVNServer <svn.localdomain>"; 
fi 
+0

L'opzione è chiamata '--authors-prog' e non' --author-prog'. – josch

0

Se, come me, è già creato un users.txt che si voleva passare come --authors-file salvo poi rendersi conto che non funziona, qui è uno script che fa uso del vostro esistente users.txt e permette di effettuare ulteriori personalizzazioni:

#!/bin/sh 

if [ -z ${GIT_SVN_USERS_TXT+x} ]; then 
    echo "the environment variable GIT_SVN_USERS_TXT must be set to the path of your users.txt" >&2 
    exit 1 
fi 

while read line; do 
    # remove largest suffix and trim whitespace 
    svn=$(echo ${line%%=*} | xargs) 
    # remove smallest prefix and trim whitespace 
    git=$(echo ${line#*=} | xargs) 
    if [ "$1" = "$svn" ]; then 
     echo "$git" 
     exit 0 
    fi 
done < "$GIT_SVN_USERS_TXT" 

if [ "$1" = "spaceatend " ]; then 
    echo "VirtualSVNServer <svn.localdomain>" 
    exit 0 
fi 

echo "Unable to find user $1" >&2 
exit 1 

Run in questo modo:

GIT_SVN_USERS_TXT=/path/to/users.txt git svn clone --authors-prog=/path/to/script.sh --no-metadata ... 
Problemi correlati