2011-01-14 37 views
20

đây là công việc tôi hiện đang sử dụng cho các dự án svn của tôi (tôi không bao giờ sử dụng các chi nhánh svn, và một số dự án đang tích cực làm việc trên bởi những người khác cũng):git & svn externals - một giải pháp cuối cùng chưa?

  • trên máy chủ, làm inital git svn fetch mà có thể mất hàng giờ. Cũng tạo ra một chi nhánh 'xây dựng'.
  • trên một nhân bản máy phát triển nhanh chóng tại là: git clone srv://project.git, git checkout build tiếp theo git update-refs ..., git svn fetch để khôi phục lại các liên kết đến các kho svn
  • làm việc, cam kết, việc cam kết, ...
  • để kiểm tra xem mọi việc lành mạnh, git push build đến máy chủ và kích hoạt bản dựng ở Hudson cho chi nhánh đó
  • để lưu trữ công việc để tôi có thể làm việc trên máy khác, đồng thời đẩy chi nhánh xây dựng
  • khi kết hợp với nhau theo các bước hợp lý (ví dụ: một cho mỗi lỗi) , cam kết svn và đặt lại mọi thứ như git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

Nhập svn externals. Tôi đã thử mọi tập lệnh here nhưng tất cả đều không thành công. externals của tôi được thiết lập như thế này:

/path/to/x x 
/path/to/y/z y/z 
/path/to/a/b.file a/b.file 

và các kịch bản làm những việc như cố gắng tạo /path/to/x trong thư mục gốc của hệ thống tập tin và git svn fetch /path/to/x. Ngoài ra các tập tin duy nhất dường như gây ra nhiều vấn đề hơn. (Câu hỏi con 1: định dạng svn: externals mà các script này được viết là gì?)

Dường như khó sửa đổi một trong các kịch bản để xử lý tình huống của tôi và sao chép cấu trúc thư mục nhưng sau đó tôi còn lại với một vấn đề lớn: nếu tôi thay đổi một tập tin trong cả hai x và y/z thư mục, tôi không thấy một cách để tham gia này vào một cam kết svn duy nhất và đó là một trong những lý do tôi bắt đầu sử dụng git ở nơi đầu tiên.

Do đó câu hỏi: có cách nào tôi có thể sao chép luồng công việc trên, chỉ sử dụng các phần của một kho lưu trữ svn nhất định, theo cách mà tôi có thể thực hiện svn dcommit trong thư mục gốc không? Tôi thích một giải pháp sẵn sàng sử dụng hoạt động trên cả Linux và Windows.

chỉnh sửa Tôi đã nhanh chóng tấn công qua một trong các tập lệnh mà tôi đã tìm thấy và làm cho nó sao chép cấu trúc thư mục của các externals svn. Tuy nhiên, tôi không thể sao chép các tệp đơn lẻ, đây là kết quả đầu ra:

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln 
Initialized empty Git repository in xxx/projects.sln/.git/ 
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default': 
    Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114 

truy vấn phụ 2: không thể tìm nạp một tệp thông qua git svn?

+0

Tôi thấy rằng [tập lệnh này] (https://github.com/mgee/git-svn-ext) hoạt động với các phiên bản SVN và Git hiện tại –

+2

@IvanKoblik cảm ơn vì đã đăng bài đó Mặc dù tôi phải thừa nhận rằng tôi đã từ bỏ việc lưu trữ tất cả các kho lưu trữ đồng bộ thay vì buộc tất cả các đại biểu chỉ sử dụng git: P – stijn

+0

Sau khi sử dụng nó một lúc ngay cả với tập lệnh, Tôi nghĩ rằng git-svn không cắt nó cho kho SVN với externals, sol của bạn ution là tốt nhất có. –

Trả lời

14

Thật không may, các phần tử bên ngoài của svn khá linh hoạt. Tôi đã chạy qua một số tập lệnh xử lý chúng dưới dạng đường dẫn < > <url>, nhưng <url> < đường dẫn > cũng được cho phép. Vì vậy, tôi nghĩ rằng một số kịch bản chỉ bị hỏng trong vấn đề đó.

Để trả lời câu hỏi con thứ hai của bạn: không. 'git svn fetch' cần phải hoạt động trên một cây con của repo của Subversion, nhưng nó cần phải được một cái gì đó nó có thể điều trị như một chi nhánh. Điều duy nhất ánh xạ tốt vào mô hình đó là một thư mục (trunk /, ví dụ). FWIW, Bazaar và Mercurial cũng chịu đựng ở đây. Vào cuối ngày, Subversion chỉ là một hệ thống tập tin được phiên bản, trong khi Git có khái niệm lớp đầu tiên của một nhánh. Đây là một trong những điều không phù hợp cản trở.:-(

1

Chỉ cần một lưu ý khác về truy vấn con thứ hai Theo như tôi biết subversion như của ngày hôm nay cũng không hỗ trợ externals svn cho các tệp, chỉ các thư mục.Vì vậy, tôi đoán các mục trong thuộc tính sẽ không hợp lệ. Không biết nếu có bất kỳ công cụ nào xử lý trường hợp này

+1

Trong khi là một PITA chính (đặc biệt là khi cố gắng kết nối SVN với Git), các tệp bên ngoài là rất tốt trong SVN. Tôi không biết từ khi nào, nhưng mỗi khách hàng dòng lệnh SVN được giao với Xcode kể từ ít nhất phiên bản 4.5 đã làm - và những người này thường khá lạc hậu. – danyowdee

+1

Các tệp bên ngoài của tệp IIRC yêu cầu phiên bản 1.8 trở lên trên cả máy khách và máy chủ để hoạt động bình thường. – PMF

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