2012-03-06 24 views
34

Khi chạy git svn clone và thường xuyên trong git svn fetch hoạt động tiếp theo tôi nhận được tin nhắn này đối với một số thư mục:git-svn "Không thể tìm thấy bản đồ" - ý nghĩa của nó là gì?

Couldn't find revmap for <SVN folder URL> 

kho My dường như để hoạt động tốt. Thông báo này có ý nghĩa gì? Tôi có nên lo ngại về điều đó không?

+4

Bản đồ là bản đồ giữa các số sửa đổi cam kết (r123) và Git cam kết băm (b389fe…).Không có ý tưởng những gì các lỗi có nghĩa là mặc dù, khác hơn là tôi nhìn thấy nó khá thường xuyên và nó có vẻ lành tính. –

+0

Tôi đoán điều đó có nghĩa là lịch sử sửa đổi có thể không được giữ nguyên. – bancer

Trả lời

32

Tôi không có câu trả lời hoàn chỉnh, nhưng lỗi này được tạo bởi git-svn.perl. (Đường dẫn mã có liên quan có vẻ là do_fetch -> make_log_entry -> find_extra_svn_parents -> lookup_svn_merge.) Mã đó dường như đang cố gắng xem xét thuộc tính svn merge commit của svn merge merge để tìm ra tất cả các commit/nhánh của nó, với hy vọng biến điều đó thành một cam kết hợp nhất, nhiều phụ huynh bên trong bản sao git. Nếu độ phân giải phụ huynh đó không thành công, cam kết của bạn sẽ vẫn được tìm nạp vào git; nó sẽ không có thông tin cha mẹ giống như nó sẽ khác.

Cho đến nay, tôi chưa tìm thấy bất kỳ vấn đề lớn nào xuất phát từ lỗi này cho trường hợp sử dụng chính hiện tại của tôi, đang chuyển đổi một repo svn thành git; git-svn đã có thể giải quyết những sự hợp nhất lớn thực sự quan trọng đối với tôi, và những lỗi này cho đến nay dường như chỉ giới hạn ở một trong hai sự kết hợp lựa chọn anh đào hoặc các nhánh cũ mà tôi không quan tâm nữa.

Thực tế, trong nháy mắt thứ hai, có vẻ như trong trường hợp của tôi, hầu hết các lỗi này xuất phát từ các cam kết trong đó svn:mergeinfo được ghi lại ở mức tôi hiểu là sai mức trong svn. Trong repo svn, chúng ta thường cố gắng ghi svn: mergeinfo tại gốc nhánh, ví dụ: tại svn/trunk, trong khi các trường hợp git phàn nàn về việc dường như liên quan đến mergeinfo được đính kèm với các thư mục con chi nhánh cụ thể, ví dụ: tại svn/trunk/dir1. Tôi không phải là một chuyên gia svn, nhưng hiện tại của tôi heuristic là nếu bạn có rất nhiều svn: mergeinfos mà không phải ở gốc nhánh, có thể có một cái gì đó không ổn với repo svn của bạn hoặc quá trình sáp nhập của bạn. Nếu đúng vậy, có thể hiểu được git sẽ phàn nàn. Trong trường hợp của riêng tôi, tôi nghĩ rằng hầu hết các commit "lạ" này sửa đổi svn: mergeinfo cả ở gốc nhánh (ví dụ: svn/trunk) ở cấp subdir (ví dụ: svn/trunk/dir1); git gleans bất cứ điều gì nó cần từ cấp độ gốc, và ném một lỗi rõ ràng vô hại về cấp độ subdir.

Điều đó nói rằng, một số người dường như đang báo cáo sự cố trong một số trường hợp, có lẽ đặc biệt là khi rebasing in a git-svn repo where not all the branches were checked out.

2

Chỉ muốn lưu ý - có thực sự là một tập tin ẩn trong git-svn, được gọi là một cái gì đó giống như

.git/svn/refs/remotes/git-svn/.rev_map.00088888-caaa-4444-9999-2222eeeeeee4 

... nơi id bế mạc là UUID Repository hoặc git-svn-id.

Đây là một tập tin nhị phân, và có một chút thêm về nó trong /usr/lib/git-core/git-svn:

# rev_map: ... 
# This is the replacement for the rev_db format, which was too big 
# and inefficient for large repositories with a lot of sparse history 
# (mainly tags) 
# 
# The format is this: 
# - 24 bytes for every record, 
#  * 4 bytes for the integer representing an SVN revision number 
#  * 20 bytes representing the sha1 of a git commit 
... 
# - Piping the file to xxd -c24 is a good way of dumping it for 
#  viewing or editing (piped back through xxd -r), should the need 
#  ever arise. 

Lưu ý rằng đầu ra trông giống như sau:

$ cat .git/svn/refs/remotes/git-svn/.rev_map.* | xxd -c24 | head -1 
0000000: 0000 0001 33ee 22cc 9933 88aa 44ff 22dd 5566 88ee 66aa bbcc ....5.'..?..J...Zj..`... 

Tôi nghĩ rằng khi bạn gõ git svn info , đó là tập tin được tư vấn, để bạn nhận được một số sửa đổi SVN dựa trên hàm băm SHA git cho một cam kết. Tôi không có ý tưởng làm thế nào người ta có thể tái tạo nó, mặc dù (althogh git svn reset có thể giúp xóa các mục từ tệp này, không chắc chắn 100% này)