2012-03-02 24 views
5

Sau khi giải quyết vô số vấn đề với công cụ xuất nhanh hg-nhanh trên Windows (từ phiên bản python khó tính cần thiết để dọn dẹp kho lanh lợi để đáp ứng công cụ) tôi đã tình cờ gặp một lỗi mà tôi không thể giải quyết:Cách giải quyết lỗi hg-fast-export: "Tên chi nhánh không tuân thủ các tiêu chuẩn GIT: refs/heads/master"

master: Exporting full revision 1/98 with 142/0/0 added/changed/removed files 
fatal: Branch name doesn't conform to GIT standards: refs/heads/master 
fast-import: dumping crash report to .git/fast_import_crash_5956 
Traceback (most recent call last): 
    File "../fast-export/hg-fast-export.py", line 388, in <module> 
    options.statusfile,authors=a,sob=options.sob,force=options.force)) 
    File "../fast-export/hg-fast-export.py", line 322, in hg2git 
    c=export_commit(ui,repo,rev,old_marks,max,c,authors,sob,brmap) 
    File "../fast-export/hg-fast-export.py", line 214, in export_commit 
    export_file_contents(ctx,man,added) 
    File "../fast-export/hg-fast-export.py", line 126, in export_file_contents 
    wr(d) 
    File "../fast-export/hg-fast-export.py", line 28, in wr 
    print msg 
    File "c:\Python26\lib\site-packages\mercurial\windows.py", line 70, in write 
    raise IOError(errno.EPIPE, 'Broken pipe') 
IOError: [Errno 32] Broken pipe 

các lỗi có vẻ là: tên chi nhánh không phù hợp với tiêu chuẩn GIT: refs/con/chủ

Có ai có manh mối về cách giải quyết vấn đề này không?

Kho lưu trữ thủy ngân của tôi sạch sẽ và hoạt động bình thường, chỉ với một đầu, tất cả đều đẹp và sẵn sàng để xuất.

EDIT:

tôi giải quyết vấn đề bằng cách sử dụng kết hợp với TortoiseHG hg-git. Đối với bất cứ ai tìm kiếm một cách để xuất khẩu một đại diện mercurial. để git hoặc ngược lại, chỉ cần thực hiện theo các bước được mô tả tại đây: http://www.ffuts.org/blog/accessing-a-git-repository-with-tortoisehg-on-windows/

+0

đầu ra của 'chi nhánh hg' là gì? – krtek

Trả lời

8

Tôi vừa giải quyết vấn đề này cho bản thân mình.

Nó chỉ ra rằng Python đã buộc phải có một '\r\n' ở cuối mỗi dòng được xuất ra bởi hg-fast-export. Điều này có nghĩa là các tên chi nhánh đã được hiểu là 'refs/heads/master\r', không hợp lệ.

Câu trả lời cho questsion này ...

Make Python stop emitting a carriage return when writing newlines to sys.stdout

... có thể được đặt ở phía trên cùng của tập tin hg-nhanh-xuất khẩu, để chuyển sang một chế độ nhị phân.

EDIT:
Mã này để thêm là:

if sys.platform == "win32": 
    import os, msvcrt 
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) 

Chỉ cần đặt nó ở phía trên cùng của hg-fast-export.py và chắc chắn rằng bạn có một import sys ở đầu trang.

+0

Tôi đã thử điều đó và điều đó không giúp được gì. – Adabada

+0

Mặc dù tôi chưa bao giờ chạm vào tệp hg-export. Tôi đang đánh dấu điều này như là một câu trả lời nhưng tôi khuyên bạn nên bất cứ ai muốn trộn mercurial và git để đi với con đường TortoiseHG và hg-git. Nó dễ dàng hơn, nhanh hơn và thậm chí có giao diện người dùng đẹp mà bạn có thể sử dụng. – Adabada

+0

Nó làm việc cho tôi. msvcrt.setmode (sys.stdout.fileno(), os.O_BINARY) ở đầu hg-fast-export.py làm việc như một sự quyến rũ. –

Các vấn đề liên quan