2012-07-06 29 views
7

Trong khi làm git svn clone -s https://svn.example.com/repo/ tôi nhận được kết quả như sau:git-svn bản sao bị lỗi "chết người: Không phải là một tên đối tượng hợp lệ"

r3073 = a6132f3a937b632015e66d694250da9f606b8333 (refs/remotes/trunk) 
Found possible branch point: https://svn.example.com/repo/trunk => https://svn.example.com/repo/branches/v1.3, 3073 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
fatal: Not a valid object name refs/remotes/tags/Sync Controllers 
cat-file commit refs/remotes/tags/Sync Controllers: command returned error: 128 

Chạy git branch -a cho:

remotes/tags/Sync%20Controllers 
remotes/tags/v1.1 
remotes/trunk 
remotes/v1.2 

Tôi nghĩ vấn đề là "bộ điều khiển/thẻ/Bộ điều khiển đồng bộ hóa"! = "điều khiển từ xa/thẻ/Đồng bộ hóa% 20 Bộ điều khiển".

+0

Xem thêm: https://bugs.launchpad.net/ubuntu/+source/git/+bug/786942 – kenorb

+0

Related: http://stackoverflow.com/questions/7584605/git-svn-dcommit- không-vì-kho-tên-chứa-một-không gian Có bản vá có sẵn ở đó. – kenorb

Trả lời

12

Thẻ trên SVN có khoảng trống trong thẻ, nhưng thẻ trong git có khoảng trắng này được chuyển đổi thành %20 (URL được mã hóa). Để giải quyết, chỉ cần thêm thẻ mới theo cách thủ công với tên chính xác:

cd .git/refs/remotes/tags/ 
mv Sync%20Controllers Sync\ Controllers 

Sau đó chạy lại lệnh git svn clone.

(Bình thường, bạn muốn làm điều này với git tag OLDTAG NEWTAG nhưng git đã không cho phép tôi để xác định một thẻ với một không gian trong. Các tập tin thẻ chỉ đơn giản là tập tin văn bản có chứa các hash của cam kết có liên quan.)

+2

Tôi đã thử giải pháp đó tuy nhiên, tôi nhận được lỗi sau: 'gây tử vong: Tham chiếu có định dạng không hợp lệ: 'refs/remotes/tags/WITH SPACE''. Làm thế nào để giải quyết điều đó? –

+0

(Tôi đang sử dụng phiên bản git 1.8.3.msysgit.0) –

+0

Điều này cũng làm việc cho tôi với một thẻ có ký tự '~' trong tên tệp. Cảm ơn. – Flimzy

3

Bạn có thể sử dụng thay thế phía máy chủ git-svn, SubGit để tránh nhiều vấn đề về dịch git-svn.

Tôi là nhà phát triển SubGit và có thể nói rằng chúng tôi đã làm việc rất nhiều để giải quyết các vấn đề dịch thuật nhân vật như một vấn đề ở trên; trong thẻ trường hợp cụ thể này sẽ được dịch sang một thẻ refs/tags/Sync+Controllers.

Cũng lưu ý rằng git-svn đã dịch thẻ Subversion dưới dạng nhánh thay vì thẻ.

+0

Tôi có phải cài SubGit trên máy chủ hay không cần thiết? Nếu tôi không có quyền truy cập quản trị vào repo svn của tôi thì sao? – kenorb

+0

Với SubGit 2.0 bạn không cần phải có quyền truy cập quản trị vào kho lưu trữ của mình. Bạn sẽ cần phải kích hoạt hook pre-revprop-change để có được một bản đồ tác giả đầy đủ tính năng, nhưng rất có thể là nó đã được kích hoạt. Kiểm tra http://subgit.com/eap/ để biết thêm chi tiết. –

0

Tôi tin rằng vấn đề với khoảng trắng được sửa trong Git> = 1.8.0 (Xem: #786942).

Vì vậy, bạn nên nâng cấp.

Tôi đã thử nghiệm và có vẻ như nó hoạt động trong phiên bản git gần đây. Trang

Xem GitHub Trang chủ: https://github.com/git/git

+3

Tôi đang sử dụng 1.8.5.2 và chạy vào vấn đề này – krinker

+0

Và bạn có nghĩ rằng nó liên quan đến không gian hoặc một số ký tự đặc biệt trong tên chi nhánh/thẻ của bạn, v.v ... không? – kenorb

+0

Tôi cũng đã thấy vấn đề này với git = 1.8.3.1, svn = 1.7.14 và svn2git = 2.3.2 Liên quan đến không gian trong tên chi nhánh của SVN. – jplandrain

1

Tôi chạy vào vấn đề này ngày hôm nay, và coi chi nhánh này, trong đó có một tốc độ trong nó không phải là quan trọng, tôi chỉ cần chạy

git branch -r -d partialPayment%202.4 

Và chạy lại git svn fetch Nó bỏ qua nhánh hiện tại và tiếp tục lấy nhánh kế tiếp.

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