2011-01-09 36 views
5

Tôi đang gặp khó khăn với vấn đề sau. Khi tôi tiếp tục lấy các phiên bản từ SVN vớigit-svn không thể tạo chi nhánh để theo dõi phân nhánh SVN

git svn fetch 

Tôi nhận được lỗi sau:

Found possible branch point: https://somecompany.com/product/trunk 
=> https://somecompany.com/product/branches/deep/branches/product-001, 72666 
Found branch parent: (refs/remotes/deep/branches/product-001) b685b7b92813885fdf 6b8e2663daf884bf504b14 
Following parent with do_switch 
Successfully followed parent 
error: 'refs/remotes/deep' exists; cannot create 'refs/remotes/deep/branches/product-001' 
fatal: Cannot lock the ref 'refs/remotes/deep/branches/product-001'. 
update-ref -m r72667 refs/remotes/deep/branches/product-001 df51920e8f0a53f26507 c2679eb6a9dbad91e0d6: command returned error: 128 

Điều này xảy ra bởi vì tôi đã lấy các phiên bản sử dụng bộ lọc mặc định cho chi nhánh SVN:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

Bây giờ, tôi có dòng dưới đây được thêm vào, nhưng đã quá muộn:

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

Tôi đã cố sửa lỗi này bằng cách sử dụng git svn reset để xóa tất cả các cam kết. Trên thực tế tôi có thể nhìn thấy từ thông báo lỗi mà git đang cố gắng điều đúng, nhưng không thể vì các chi nhánh điều khiển từ xa/sâu đang tồn tại.

Tôi đã cố gắng tìm kiếm 2 giải pháp có thể: 1. Xóa nhánh đó (điều khiển từ xa/sâu), nhưng khi nó được theo dõi bởi git làm điều khiển từ xa, tôi không thể tìm thấy giải pháp nào cho điều đó. 2. Xóa toàn bộ lịch sử liên quan đến nhánh đó. Không thành công quá :(

Có ai biết làm thế nào để đối phó với vấn đề của tôi

Trả lời

4

Tôi đã ở cuối cùng có thể khắc phục vấn đề bằng cách thực hiện 2 bước sau:

  1. Loại bỏ refs/điều khiển từ xa/sâu từ đóng gói-refs
  2. Loại bỏ .git/logs/refs/điều khiển từ xa/sâu

Nhưng vẫn có vấn đề với lấy. tôi cần phải sử dụng

0.123.
branches = branches/*:refs/remotes/* 

cho các chi nhánh bình thường và

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

cho các chi nhánh sâu. Thật không may các đặc điểm kỹ thuật cũ bao gồm sau này, vì vậy tôi nhận được lỗi "gây tử vong: Không thể khóa ref 'refs/remotes/deep'" như git-svn cố gắng tạo chi nhánh sâu theo spec đầu tiên. Cho đến nay, tôi làm điều đó bằng cách tự nhận xét "nhánh" đầu tiên và tìm các bản sửa đổi cụ thể với các nhánh sâu, nhưng đây không phải là một lựa chọn tốt vì có quá nhiều bản sửa đổi để tìm nạp cả hai trường hợp.

UPD: Tôi đã tìm thấy giải pháp đơn giản nhưng không thanh lịch cho vấn đề còn lại. Tôi đang sử dụng các nhánh để chỉ định đường dẫn đến các nhánh sâu và tìm nạp để chỉ định mọi nhánh của cấp đầu tiên.

+0

liên quan đến 1. Xóa refs/remotes/deep from packed-refs 2. Xóa .git/logs/refs/remotes/deep bạn có thể giải thích cách thực hiện điều đó không? – ryenus

+0

bởi rm hoặc del tùy thuộc vào hệ điều hành bạn đang sử dụng –

1

Tôi gặp vấn đề tương tự và thấy rằng "git svn reset", không phải "git reset" đã sửa nó. Nếu bạn không cập nhật cấu hình chi nhánh của mình trước đó, khi bạn truy xuất một cam kết vượt qua điểm chi nhánh, bạn phải sao lưu để truy xuất lại chúng. Nếu không họ đang lúng túng không có cha mẹ.

Vì vậy, cập nhật các chi nhánh của mình như trước, sau đó chạy

git svn reset -r<revisionnum> 

và làm theo với svn git bạn lấy như bình thường. Điều này đã cứu tôi nhiều giờ xây dựng lại toàn bộ điều từ SVN.

Trong trường hợp của bạn, bạn có thể cũng cần điều tra các tính năng "bỏ qua" để không truy tìm nhánh được nhúng của bạn.

+0

Thực ra, tôi đã nhầm lẫn khi viết git reset khi tôi định đặt lại git svn –

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