2012-02-24 3 views
5

저자입니다 자식 SVN에 대한 저자 파일에 후행 공백 문자를하는 방법 :다음과 같이 내 svn의 환매 특약에

$ svn의 로그 --xml을 | grep 작성자 | 정렬 -u | 펄 -pe의 /> < ./$1 = /. (.?) '

출력 :

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

그러나 git svn clone를 사용하여 가져 오기를 위해 REPO를 복제하는 동안, 그것은 Author: clean not defined in /home/ashfame/fun/authors-transform.txt file 말을 중간에 중단

제 3의 사용자 "clean "을 의미하는 정리 후 더블 스페이스에 주목하십시오.

작성자 파일의 형식을 지정하여 사용자 이름에 공백을 넣으려면 어떻게해야합니까? 다음과 같이 내 현재의 내용은 다음과 같습니다

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 

재미있는 발견 : 어떤 사용자 매핑없이 자식에 svn의 REPO를 가져 오기 시도와 I가 "깨끗한"사용자 만 "깨끗한"관련 아무것도 볼 수 없었다 존재하기 때문에 이것은 svn repo에 몇 가지 딸꾹질입니다. 그것에 대해 할 수있는 것에 대한 조언이 있습니까?

+0

변경 저자 ** ** 추가로 사용자? –

+0

@LazyBadger 어떻게? – Ashfame

+0

@LazyBadger 게다가 공간 이름을 바꾸는 방법에 대해서도 뭔가해야 할 것입니다. 더 나은 것은 그냥 무언가에 매핑하거나 함께 무시하는 것입니다. – Ashfame

답변

2

나는 딸꾹질이 SVN repo에 무엇인지 알 수 없으므로 필자는 제작자 파일없이 가져 왔습니다. 그리고 나는 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" 
' 

저장 이름의 파일에 위의 코드는 change-commit-author-script.sh 말을하고 REPO 루트에 파일을 넣어. 실행 파일을 chmod +x change-commit-author-script.sh으로 만들고 실행하십시오. ./change-commit-author-script.sh

그리고 이름과 이메일 값을 입력하여 스크립트를 편집하는 것을 잊지 마십시오.

3

authorname의 공백과 비슷한 문제가있었습니다.

알려지지 않은 작성자를 변형시키는 bash 스크립트를 사용할 수있는 author-prog 옵션을 사용하여 해결하십시오.

#!/bin/bash 

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

이 옵션은'--author-prog'가 아니라'--authors-prog'라고합니다. – josch

0

는 경우, 나처럼, 당신은 이미 당신이 만에 --authors-file로 전달할 작동하지 않는 것을 실현하고 싶어하는 users.txt이 여기에 활용하는 스크립트 작성하여 users.txt 기존과 하나가 있습니다 이 같은

#!/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 

실행이 : SVN에서 "깨끗한"에서 "깨끗한"

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