2010-04-22 39 views
6

Tôi đang sử dụng svn. Tôi có hai chi nhánh và cả hai đều được thực hiện rất nhiều thay đổi. Ngoài một trong các chi nhánh rất nhiều tập tin đã được đổi tên, do đó, bây giờ svn không thể giúp tôi hợp nhất những thay đổi trong những tập tin (cũng biết svn giới hạn).git-svn hợp nhất 2 chi nhánh svn

  1. Có thể sử dụng git-svn để thực hiện hợp nhất các chi nhánh không?
  2. Git-svn cũng sẽ xử lý các tệp được đổi tên?

Cảm ơn

+0

Xem câu trả lời này: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702 # 3585702 –

+0

Xem http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ... Phần "Chỉnh sửa:" của câu trả lời thứ 2 (không phải câu trả lời được chấp nhận) đặc biệt tốt đẹp –

Trả lời

7

git merge nên có thể phát hiện (lên đến một điểm nhất định) đổi tên.

recursive

này chỉ có thể giải quyết hai đầu sử dụng một thuật toán hợp nhất 3 chiều.
Ngoài ra, điều này có thể phát hiện và xử lý các kết hợp liên quan đến đổi tên.
Đây là chiến lược hợp nhất mặc định khi kéo hoặc hợp nhất một chi nhánh.

Nhưng git-svn chỉ có thể nhập/xuất từ ​​/ sang SVN, không thực hiện hợp nhất.
Và việc hợp nhất là khó khăn:

hãy cẩn thận

Vì lợi ích của sự đơn giản và hoạt động cùng với một hệ thống ít có khả năng (SVN), nó được khuyến khích rằng tất cả git svn người dùng sao chép, lấy và dcommit trực tiếp từ máy chủ SVN, và tránh tất cả các hoạt động git clone/pull/merge/push giữa các kho và các nhánh git.
Phương pháp trao đổi mã được đề nghị giữa các nhánh git và người dùng là git format-patch và git am, hoặc chỉ 'dcommit'ing vào kho SVN.

Chạy git merge hoặc git pull KHÔNG được đề xuất trên chi nhánh bạn định hủy. Subversion không đại diện cho việc hợp nhất trong bất kỳ thời trang hợp lý hoặc hữu ích nào; để người dùng sử dụng Subversion không thể thấy bất kỳ hợp nhất nào bạn đã thực hiện. Hơn nữa, nếu bạn hợp nhất hoặc kéo từ một nhánh git mà là một tấm gương của một nhánh SVN, dcommit có thể cam kết với nhánh sai.

Nếu bạn kết hợp, lưu ý các nguyên tắc sau: git svn dcommit sẽ cố gắng để thực hiện trên đầu trang của SVN cam kết có tên trong

git log --grep=^git-svn-id: --first-parent -1 

Do đó bạn phải đảm bảo rằng gần đây nhất cam kết của chi nhánh bạn muốn dcommit là cha mẹ đầu tiên của hợp nhất. Hỗn loạn sẽ xảy ra nếu không, đặc biệt nếu cha mẹ đầu tiên là một cam kết cũ trên cùng một chi nhánh SVN.

1

tôi từng có cùng một vấn đề trong một dự án ở trường đại học.những gì tôi đã làm là như sau:

  • tạo ra một kho git-svn mới (git svn clone -s https://…)
  • sáp nhập các chi nhánh với git (git checkout master; git merge branch)
  • kiểm tra thân với svn (svn co https://…/trunk)
  • bản sao trên các tệp được hợp nhất từ ​​git
  • xóa các tệp và thư mục còn lại với svn (svn rm)
  • cam kết với svn (svn ci)
  • lấy mới cam kết trong git
+0

Cảm ơn bạn đã tóm tắt hữu ích. Git có hợp nhất dễ dàng không, dễ dàng hơn khi thực hiện nó bằng svn? (Tôi cố gắng tìm câu trả lời cho điều này: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger

+0

Một điều nữa , bạn đã cố gắng để trở lại svn? Nếu vậy, bạn đã nhận được/mong đợi những vấn đề gì? – inger

+0

@inger, không tôi cam kết với svn để chắc chắn rằng tôi không kết thúc đẩy một nửa hợp nhất nướng mà chỉ git sẽ hiểu được. – knittl

0

Sử dụng SVN hợp nhất chức năng sáp nhập chi nhánh SVN, nó sẽ được nhanh chóng hơn. Sử dụng Git cho những vấn đề này khá phức tạp, nó tạo ra quá nhiều conflits ...

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