2013-05-16 22 views
6

Tôi đang kiểm tra SubGit như một cách di chuyển từ SVN sang Git.SubGit: Cách loại trừ chi nhánh?

Điều tôi muốn làm là có thể tạo các nhánh từ xa trong kho git mà tất cả người dùng có thể sử dụng đó không đồng bộ hóa lại SVN.

Tôi chỉ muốn SubGit theo dõi nhánh chính và đồng bộ hóa nó trở lại SVN để chúng tôi có quyền tự do sử dụng và chia sẻ các nhánh Git khác.

Có cách nào đơn giản để thực hiện việc này không?

Cảm ơn bạn

Trả lời

7

Các giải pháp lý tưởng sẽ được quy định cụ thể thân: refs/con/chủ lập bản đồ trong SubGit configuration, vì vậy SubGit sẽ đồng bộ hóa thân với chủ bỏ qua bất kỳ chi nhánh khác.

Thật không may, SubGit cần ít nhất một bản đồ chi nhánh tại thời điểm này (phiên bản 1.0.x và 2.0.x). Nghĩa là, người ta phải chỉ định một cái gì đó như thế này:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = tags/*:refs/tags/* 

Vì bạn sẽ không để đồng bộ hóa tất cả các chi nhánh Git, hãy xem xét sử dụng một số không gian tên đặc biệt để workaround vấn đề:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/gitsvn/heads/* 
... 

Vì vậy, nếu một người đẩy chi nhánh chính vào kho lưu trữ Git trung tâm, nó sẽ được dịch sang trunk. Tuy nhiên, nếu một nhánh đẩy chi nhánh foo, SubGit sẽ bỏ qua nhánh đó vì refs/heads/foo nằm ngoài phạm vi đồng bộ hóa.

Những khó khăn xuất phát từ hợp nhất cam kết: nếu cam kết Một là kết quả của việc sáp nhập chi nhánh foo vào chủ, sau đó SubGit tạo chi nhánh/foo đứng về phía Subversion cho mẹ của cam A. Nếu bạn muốn tương ứng thích không bao gồm SubGit chi nhánh tạo thành các chi nhánh */** namespace, xem xét sử dụng một số ngành đặc biệt đứng về phía Subversion cũng như:

trunk = trunk:refs/heads/master 
branches = gitsvn/branches/*:refs/gitsvn/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = gitsvn/tags/*:refs/gitsvn/tags/* 

trong trường hợp này, phụ huynh cùng một phạm phải được gửi đến gitsvn/chi nhánh/foo chi nhánh.

Đây là giải pháp tốt nhất hiện có tại thời điểm này. Chúng tôi cũng có một yêu cầu tính năng cho phiên bản 2.1 sẽ cho phép giải pháp lý tưởng cho bạn, nhưng sẽ mất một thời gian trước khi chúng tôi triển khai nó.

Cập nhật trên SubGit 3.0:

Kể từ phiên bản 3.0.0 (giai đoạn truy cập sớm vào lúc này, tải về tại http://subgit.com/eap) SubGit hỗ trợ bố trí chi nhánh duy nhất, vì thế tập tin cấu hình có thể trông như sau:

  1. Không thân cây, không có chi nhánh, không có thẻ và không có kệ:

    [svn] 
        url = http://host.com/repos/project 
    

    Trong trường hợp này, dự án thư mục được ánh xạ trực tiếp tới chi nhánh chính trong kho Git; SubGit bỏ qua bất kỳ nhánh nào khác và không bao giờ tạo ra các kệ có nghĩa là các nhánh Git ẩn danh không được đồng bộ hóa với SVN.

  2. thân Độc thân, không có kệ:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
    

    Trong trường hợp này, dự án/trunk thư mục được ánh xạ tới chủ chi nhánh tại kho Git; SubGit bỏ qua bất kỳ chi nhánh nào khác và không bao giờ tạo ra giá.

  3. thân Độc thân với kệ:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
        shelves = shelves/*:refs/shelves/* 
    

    Trong trường hợp này, dự án/trunk thư mục được ánh xạ tới chủ chi nhánh tại kho Git; SubGit bỏ qua bất kỳ nhánh nào khác nhưng nó dịch các nhánh ẩn danh thành các kệ như mặc định cho các phiên bản 1.0.x và 2.0.x.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn đã trả lời. Tôi đã chơi với nó trong thời gian chờ đợi và đưa ra tất cả các nhánh git-only (chẳng hạn như foo) vào một kho trống từ xa riêng biệt và sau đó hợp nhất foo vào master khi cần thiết và sau đó đẩy mọi thứ trở lại kho lưu trữ đồng bộ hóa –

+0

Làm thế nào nó đi với 'giải pháp lý tưởng' được đề cập? Tôi đã mở một [câu hỏi mới] (http://stackoverflow.com/questions/22377071/subgit-avoid-to-synchronize-git-branches-onto-svn) liên quan đến cái này, vì tôi muốn có các nhánh git KHÔNG BAO GIỜ phản ánh vào svn. Cảm ơn – ThanksForAllTheFish

+0

Nó vẫn đang hoạt động. Cách bố trí như vậy được hỗ trợ đầy đủ trong hướng svn-to-git, nhưng có một số trường hợp cạnh mà chúng ta phải đối phó trong khi chuyển đổi Git cam kết với các bản sửa đổi SVN. Dù sao tính năng này nằm trong danh sách ưu tiên của chúng tôi vào lúc này. – vadishev

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