2012-06-19 26 views
9

Luồng công việc chính xác cho việc hợp nhất các nhánh được theo dõi svn bằng git-svn là gì. Tôi đã đọc một chút về git-svn svn.pushmergeinfo then chốt cấu hình, và hãy cẩn thận là:Luồng công việc git-svn để hợp nhất bằng cách sử dụng svn.pushmergeinfo

Từ http://www.kernel.org/pub/software/scm/git/docs/git-svn.html:

chìa khóa cấu hình: svn.pushmergeinfo

Tùy chọn này sẽ gây ra git -svn to cố gắng tự động điền thuộc tính svn: mergeinfo vào kho lưu trữ SVN khi có thể. Hiện tại, điều này chỉ có thể được thực hiện khi thực hiện các hợp nhất không nhanh về phía trước mà tất cả phụ huynh nhưng đầu tiên đã được đẩy vào SVN.

Vì vậy, công việc bình thường của tôi là:

Giả sử tôi có một SVN chi nhánh ^/chi nhánh/feature_branch

# Ensure git-svn is configured to populate svn:mergeinfo 
git config --global svn.pushmergeinfo true 

# Update my local svn remotes state 
git svn fetch 

# Track a local branch against a remote SVN backed ^/branches/feature_branch 
git checkout -b local_feature_branch remotes/feature_branch 

# Modify files and commit to local git repo 
git commit -a -m "changes" 
# Push changes to SVN branch ^/branches/feature_branch 
git svn dcommit 

Sau đó, để hợp nhất lên ^/trunk vào local_feature_branch của tôi, tôi giả sử tôi làm điều gì đó như ?

# Sync to the latest SVN 
git svn fetch 
# Rebase "master" which is tracking the remote SVN ^/trunk 
git checkout master 
git svn rebase 

# Checkout the local_feature_branch 
git checkout local_feature_branch 

# Merge "master" into "local_feature" which is tracking ^/trunk 
git merge --squash master 
git commit -m "merge master which is tracking SVN ^/trunk" 

# Dry run the dcommit to SVN which should include svn:mergeinfo property changes 
git svn dcommit --dry-run 

# Commit merge to trunk 
git svn dcommit 
+1

Có vẻ hợp lý. Câu hỏi là gì? –

Trả lời

19

Sử dụng merge --squashsvn.pushmergeinfo cùng nhau không có ý nghĩa nhiều. Với hợp nhất --squash, cam kết kết quả sẽ không là cam kết hợp nhất, do đó, dcommit tiếp theo sẽ không tạo bất kỳ thông tin hợp nhất nào.

Tôi biết rằng (chủ yếu là cũ hơn) chủ đề ở đây trên stackoverflow đề nghị sử dụng --squash, nhưng tôi nghĩ rằng đó là phần lớn là một di tích của quá khứ. Tôi đã sử dụng git-svn để quản lý repo svn của công ty chúng tôi gần một năm nay, và cho đến nay nó hoạt động rất tốt với quy trình làm việc sau:

Tôi luôn đảm bảo trước khi hợp nhất rằng tôi luôn cập nhật và, để an toàn, tôi không có bất kỳ cam kết không được đồng bộ hóa cục bộ nào:

# On local_feature_branch 
# Update from SVN 
git svn fetch && git svn rebase -l 

# push pending commits 
git svn dcommit 

Sau đó, tôi thực hiện hợp nhất 'thực sự', sử dụng nhánh SVN "từ xa làm nguồn". Điều này tiết kiệm chuyển đổi ngành, cập nhật, và đảm bảo rằng các chi nhánh đến không có bất kỳ cam kết chưa được đồng bộ địa phương:

# Create a real, non-forward merge commit 
git merge --no-ff svn/trunk 

# ... and push it to SVN, including mergeinfo 
git svn dcommit 

Ngoài ra, cách này hợp nhất được ghi lại đầy đủ trong lịch sử địa phương, do đó hòa trộn tiếp theo sẽ không có để đối phó với các xung đột đã được giải quyết trước đó. Với --squash, bạn sẽ bắt đầu lại những người có mọi hợp nhất.

Tuy nhiên, lưu ý rằng có sự cố mở với mergeinfo khi hợp nhất lại từ local_feature_branch thành trunk (tức là tái hòa nhập trong svn-speak): Git-SVN with svn.pushmergeinfo: how to avoid self-referencing mergeinfo lines. Điều này đã xảy ra hiếm khi trong repo của chúng tôi, nhưng cho đến nay nó không gây ra bất kỳ rắc rối cho tôi.

+0

Bạn có bất kỳ chi tiết nào về cách tránh thông tin hợp nhất tự giới thiệu khi hợp nhất chi nhánh tính năng xuống phần thân không? – Dougnukem

+0

Không, cho đến nay tôi chỉ bỏ qua vấn đề mà không có bất kỳ vấn đề. Không chắc chắn nếu một số khách hàng svn có thể có một vấn đề với nó, nhưng cho đến nay chúng tôi đã không gặp bất kỳ vấn đề với git-svn, dòng lệnh svn hoặc Eclipse Subversive (và tôi nghĩ Tortoise SVN, quá) – Carsten

+0

** EDIT ** Đọc lại mô tả chi tiết tại [link] (http://thread.gmane.org/gmane.comp.version-control.git/191932), điều này có lẽ không bao giờ đánh chúng tôi bởi vì chúng tôi đã thực hiện tất cả các hợp nhất (hiếm) tái hòa nhập đã xảy ra trong thời gian đó với git. – Carsten

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