2012-02-07 29 views
7

Tôi đang sử dụng git-svn để làm việc với kho svn. Việc bố trí là tiêu chuẩn, và tôi đã tạo ra các kho lưu trữ địa phương với:Cách đồng bộ hóa các nhánh từ xa với thân cây bằng git-svn

$ git svn clone -s http://mysvnrepo 
(master)$ 

tôi cần phải làm việc trên một xa (svn) chi nhánh - MyBranch, vì vậy tôi đã tạo ra một chi nhánh địa phương để theo dõi từ xa một:

(master)$ git checkout -b localMyBranch remotes/MyBranch 
(localMyBranch)$ 

tôi tiếp tục làm việc và cam kết các chi nhánh địa phương như tôi đi, và thỉnh thoảng tôi dcommit:

(localMyBranch)$ git svn dcommit 

người trong khi đó khác đang làm việc trên thân cây, và bất cứ lúc nào tôi muốn kết hợp lại những thay đổi từ thân cây đến nhánh của tôi để giữ chúng đồng bộ. Đó là nơi tôi thực sự bối rối, vì tôi không thể tìm thấy một thông tin tốt về cách thực hiện điều này. Cho đến nay tôi biết rằng tôi cần phải làm:

(localMyBranch)$ git svn dcommit 
(localMyBranch)$ git checkout master 
(master)$ git svn rebase 

Bây giờ những gì? Tôi đọc rằng đây KHÔNG phải là cách đi đúng:

(master)$ git checkout localMyBranch 
(localMyBranch)$ git rebase master 

Vì nó sẽ làm hỏng thông tin hợp nhất cho svn.

Vậy cách tốt nhất để "rebase" nhánh svn từ xa của tôi vào thân cây từ xa, bảo toàn thông tin hợp nhất cho svn là gì?

Trả lời

7

Bạn sẽ muốn tạo chi nhánh làm việc tại địa phương để xử lý hợp nhất của bạn. Điều quan trọng là bạn cần một nhánh không tích cực theo dõi một nhánh svn từ xa.

Hãy thử điều này:

(localMyBranch)$ git checkout -b merge_work 
(merge_work)$ git merge master 
(merge_work)$ git checkout localMyBranch 
(localMyBranch)$ git rebase merge_work 

và ngược lại cho kết hợp theo cách khác.

EDIT

Nếu bạn đang sử dụng git-svn 1.7.7 hoặc cao hơn, có một cấu hình thiết để nói với git-svn để cư thuộc tính mergeinfo trên kho lưu trữ từ xa:

git config --global svn.pushmergeinfo true 
+0

Cảm ơn. Là nó sẽ bảo tồn thông tin hợp nhất từ ​​svn POV? –

+0

Có, nếu bạn cấu hình git để làm như vậy. Tôi sẽ chỉnh sửa câu trả lời để bao gồm các lệnh để làm như vậy. –

+0

@ jordan002: Nó có thực sự hoạt động không? Tôi được sử dụng để làm như thế này [http://stackoverflow.com/a/4908930/158074) trả lời khuyến cáo, nhưng cách này có vẻ đơn giản hơn. Ngoài ra, dòng đầu tiên có thể là 'git checkout -b merge_work', phải không? – rsenna

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