CVS2SVN은 "XXX가 유효하지 않음, V 파일"으로 실패합니다.
문제
나는 그것을 게시하고 싶을 때 마침내 내 질문에 대한 답을 찾았다! 그러나 다른 사람을 돕는 경우를 대비하여 내 대답을 포함하여 여전히 게시 할 것입니다.
CVS에서 Subversion으로 변환 할 때 CVS2SVN은 메시지가있는 일부 파일에서 실패했습니다.
"xxx is not a valid ,v file"
뭐가 문제 야?
해결책
CVSNT는 CVS2SVN이 필요한 일부 파일에서 마지막 0xA를 생략 한 것으로 나타났습니다. 다음 C# 코드로 쉽게 수정할 수 있습니다.
static void Main(string[] args)
{
foreach (string file in Directory.GetFiles(args[0], "*,v", SearchOption.AllDirectories))
{
using (FileStream sin=File.Open(file, FileMode.Open, FileAccess.ReadWrite))
{
sin.Position=sin.Length-1;
if (sin.ReadByte()==0x40)
{
Console.WriteLine("fixed "+file);
sin.WriteByte(0xa);
}
}
}
}
다른 팁
제 경우에는 부패가있었습니다 symbols
섹션의 섹션 xxx,v
파일. 예상 형식은입니다 tag_name:tag_rev
, 그러나 다음의 사례가있었습니다.
- 잃어버린
:tag_rev
예를 들어tag_name
선을 삭제하여 수정되었습니다. - 다수의
tag_name
예를 들어tag_name1:tag_name2:tag_rev
두 번째 태그 이름을 제거하여 고정되었습니다 (제거 한 이름은 아마도 그 이름에 따라 다릅니다). - 잘못된 이름/개정 구분 기호. 제 경우에는 잘못된 캐릭터가 항상있었습니다
z
(ASCII 간에는 1 비트 차이 만 있습니다:
그리고z
).
예를 들어tag_nameztag_rev
교체하여 수정되었습니다z
~와 함께:
.
조사 중에 도움을주기 위해 a를 추가했습니다 print
라인으로 cvs2svn_rcsparse\common.py
. 기호를 구문 분석하는 경우 인쇄 된 마지막 태그가 원인입니다.
def _parse_admin_symbols(self, token):
while 1:
tag_name = self.ts.get()
# WileCau print the token and tag_name
print 'token=|%s| tag_name=|%s|' % (token, tag_name)
if tag_name == ';':
break
self.ts.match(':')
tag_rev = self.ts.get()
self.sink.define_tag(tag_name, tag_rev)
추가 인쇄는 출력에 상당히 많은 소음을 추가하므로 예외가 발생하면 인쇄하는 것이 좋을 수 있지만 이는 내 요구에 충분했습니다.
또한이 링크가 내 문제가 아닌 것으로 밝혀졌지만 다른 사람을 도울 수 있습니다. 그것을 문서화 한 Christian Haarmann에게 신용.
링크가 유효하지 않은 경우 요약은 누군가가 편집 한 것입니다. xxx,v
파일과 편집기는 0x0A (LF)를 0x0D/0X0A (CR/LF)로 대체했으며 추가 문자로 인해 파서가 파일이 손상되었다고 생각했습니다.
나는 또한 그런 오류입니다. CVS2GIT를 사용하여 CVS 저장소를 GIT로 마이그레이션하면 여러 파일의 경우이 오류가 발생합니다. 폐쇄가 누락되어 있음을 감지했습니다 0x40 (@) 파일 끝에.
그래서 내 해결책은 다음과 같습니다.
1. Open the corrupted cvs-history-file e.g. with vim (maybe in binary mode)
2. Add the missing @
이것이 문제를 해결하지 않으면 손상된 파일의 내용을 RCS-File 형식과 비교하십시오. RCS_MAN_PAGE
문제를 해결하는 한 가지 방법은 실행하는 것입니다 rcs log *file,v*
, 그것은 당신에게 통찰력을 제공 할 수 있습니다.
내 경우에는 @가 누락되어 있고 일부 파일에는 세미콜론이 누락되었으며, 기존 저장소를 CVSPServer로 가져 오는 데 사용한 도구가 참조되지 않은 버전으로 던져졌습니다.
행운을 빕니다!