2011-01-10 30 views
48

Tôi đang sử dụng git làm giao diện người dùng cho Subversion (thông qua git svn).Git: cảnh báo: refname 'xxx' không rõ ràng khi sử dụng git-svn

Vì vậy, đối với mỗi svn trunk/branch tôi có nhánh từ xa trong git có tên là "remotes/xxx". Ví dụ: "điều khiển từ xa/thân cây", "điều khiển từ xa/coolfeature".

Bây giờ tôi muốn có một nhánh "mặc định" cục bộ cho mọi nhánh từ xa, để sử dụng nó để bỏ qua. Vấn đề là tôi muốn các chi nhánh như vậy được đặt tên sau khi chi nhánh Subversion, như "thân cây", "coolfeature", vì vậy tôi có các chi nhánh sau trong git:

trunk 
coolfeature 
remotes/trunk 
remotes/coolfeature 

Vấn đề là mỗi khi tôi tham khảo "thân cây "hoặc" coolfeature "git phàn nàn tên chi nhánh không rõ ràng. Không phải là một việc lớn, nhưng tôi cảm thấy không thoải mái.

Câu hỏi đặt ra là, làm thế nào tôi có thể đối phó với cảnh báo đó, giả sử rằng việc đổi tên các nhánh đơn giản không phải là điều tôi muốn làm. Các phương pháp hay nhất cho những trường hợp như thế nào?

+3

Tôi không chắc chắn. Tôi tránh điều này bằng cách chỉ chọn tên khác nhau nhưng tương tự. Tuy nhiên, bạn có thể thử sử dụng 'refs/heads/trunk' hoặc thậm chí chỉ là' heads/trunk'. Tôi nghĩ rằng nên làm việc. – MatrixFrog

Trả lời

40

Nếu bạn chuyển cờ --prefix=svn/ tới lệnh git svn clone thì tất cả các nhánh Subversion sẽ được đặt tên là remotes/svn/branchname. Nếu điều này có thể chấp nhận được với bạn, nó sẽ sửa lỗi cảnh báo "refname là ambiguous". Nó cũng cung cấp cho bạn một cách tốt đẹp để nói về các ngành svn từ xa, như trong ví dụ nếu bạn muốn tạo một chi nhánh theo dõi cục bộ nó sẽ là một cái gì đó như:

$ git checkout -b branchname svn/branchname

Các chi nhánh địa phương sau đó có cùng tên là chi nhánh svn từ xa và không có vấn đề về refname không rõ ràng.

+19

Làm cách nào để sửa một kho lưu trữ mà tôi đã sao chép để có '--prefix = svn /'? –

+0

Tôi chỉ nhân bản vào một thư mục mới và sau đó lấy các nhánh địa phương mà tôi đã có từ thư mục khác: git fetch ../other_dir branch_name: branch_name --- hoàn thành tab là rất tốt cho các tên nhánh. – EnigmaCurry

+1

Nếu bạn đã tạo một nhánh có cùng tên, bạn có thể đổi tên chi nhánh của bạn bằng lệnh này: git branch -m [currentName] [newName] – MikeD

13

Nếu bạn chỉ muốn thoát khỏi cảnh báo, thiết lập core.warnAmbiguousRefs để false:

git config --global core.warnambiguousrefs false 

Nếu bạn muốn hành vi này chỉ dành cho kho lưu trữ duy nhất, bỏ qua --global cờ.

+0

Tôi có thể vi phạm tất cả các quy tắc đã biết/chưa biết ở đây, nhưng tôi đã thử "git tag -a HEAD -m 'Bắt ​​đầu repo'" trên một repo mới, sau đó tôi nhận được thông báo lỗi OP. Bản sửa lỗi được mô tả trong bài đăng này cho phép tôi tiếp tục làm việc. – bakoyaro

1

Có thể bạn có một 'thân cây' khác và 'coolfeature' làm thẻ. Trong trường hợp này, git không biết bạn có tham chiếu đến chi nhánh hay thẻ không. Đổi tên các thẻ và kiểm tra xem git không báo cáo "mơ hồ" tên

+0

Đây không phải là trường hợp đối với tôi. '.git/refs /' chứa các tên rõ ràng. Tôi không có bất kỳ thẻ nào. Điều gì gây git để khiếu nại ở nơi đầu tiên? –

0

Để tránh những thông điệp mâu thuẫn, khi đề cập đến các chi nhánh địa phương, tiền tố họ với head/

ví dụ, chi nhánh mâu thuẫn topic

$ git diff topic remotes/topic 
warning: reframe 'topic' is ambiguous. 
... 

trở thành

$ git diff heads/topic remotes/topic 
... 
Các vấn đề liên quan