2010-02-17 27 views
6

Tôi gặp vấn đề với chi nhánh SVN. Tôi đã thanh toán bằng git checkout -t -b stable svn/stable. Sau đó, tôi đã hợp nhất với git rebase master. Sau đó tôi đã cố gắng để thực hiện những thay đổi hợp nhất vào các chi nhánh từ xa với git svn dcommitGit: Làm thế nào để cam kết vào chi nhánh SVN sau khi rebase?

Nhưng bây giờ có vẻ như, rằng Git đẩy những thay đổi vào thân cây thay vì các chi nhánh :(

git status nói với tôi:

# On branch stable 
# Your branch and 'svn/stable' have diverged, 
# and have 218 and 52 different commit(s) each, respectively. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
... 

có ai đó biết những gì tôi đã làm sai và làm thế nào để làm điều đó đúng không?

Trả lời

2

Gần đây tôi nhấn lỗi tương tự. cái này là khi bạn rebase để làm chủ, nó lần đầu tiên khó rese ts hiện tại chi nhánh để làm chủ và sau đó áp dụng các cam kết được sáp nhập vào nó. Nhưng nhánh chính của bạn được liên kết với svn/trunk và do đó nhánh mới được đặt lại sẽ được liên kết với nó. Vì vậy, git-svn trên dcommit cho rằng các cam kết được "chèn" vào svn/trunk khi bạn đẩy chúng.

Giải pháp là sử dụng git merge --no-ff thay vì git rebase. Hoặc sử dụng các cơ sở hợp nhất của Subversion.

+0

Cảm ơn, tôi biết về khả năng sử dụng git merge, nhưng sau đó tôi sẽ xóa lịch sử sửa đổi và nhiều thông tin khác. Nó cũng sẽ là một giải pháp để rebase với một chi nhánh của chủ thay vì chính nó? – ownking

+0

@tigerseye, tôi nghi ngờ rằng các thủ thuật phân nhánh như vậy sẽ giúp bạn. vì cam kết được liên kết với 'svn/trunk' sẽ được đưa vào nhánh của bạn. Để giữ lịch sử sửa đổi, bạn có thể hợp nhất với Subversion. Nếu không, bạn sẽ chỉ gây ô nhiễm đăng nhập lật đổ và các nhà phát triển khác sẽ không hài lòng với điều đó. –

+0

Tôi mới đến git và tôi thực sự thấy những lợi thế nhưng trong bước này đôi khi nó cảm thấy đôi khi quá khó khăn cho những thách thức hàng ngày. Nó không phải là một kịch bản phổ biến trong thế giới git switchers để kết hợp một chi nhánh git dev vào một nhánh SVN ổn định vì có tồn tại một cách phổ biến để làm điều này? – ownking

0

Bây giờ nó hoạt động, tôi đã làm nó như thế này:

git checkout master 
    git svn rebase 
    git checkout --track -b svn_stable svn/stable 
    git merge --squash master 
    git commit -m "Bring stable up-to-date with trunk" 
    git svn dcommit --dry-run 
    git svn dcommit 

Các hợp nhất là dễ dàng hơn nhiều so với rebase xử lý xung đột.

Trong lần thử này, tôi đã quên sử dụng --no-ff, điều này buộc một cam kết cho mỗi lần hợp nhất, phải không?

Cảm ơn sự giúp đỡ của bạn :)

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