2012-12-14 38 views
7

Tôi không biết nếu im lạm dụng Git, hoặc nếu tôi đã có một vấn đề cấu hình, vì vậy bất cứ rõ ràng sẽ được đánh giá :)chi nhánh Git: theo dõi ngược dòng

tôi sao chép Repos github của tôi vào máy A và B , sau đó trên máy tính AI làm:

git checkout -b branchA 
// make edits 
git add . 
git commit -am "initial" 
git push 

sau đó trên máy B i làm

git pull 
git checkout branchA 
// make edits 
git commit -am "edits" 
git push 

trên máy A i rồi làm:

git pull 

tuy nhiên nó nói:

There is no tracking information for the current branch 

vì vậy tôi phải làm:

git branch --set-upstream branchA origin/branchA 

:/Tại sao tôi phải đặt ngược dòng, khi nó ban đầu đẩy nó vào gốc/branchA mà không vấn đề ?

Có vấn đề gì? Cảm ơn

Im sử dụng msygit 1.8. trên cửa sổ

P.S. khi tôi làm pull trên máy B, tại sao isnt chi nhánh mới branchA được theo dõi theo mặc định? git branch không hiển thị (nhưng nó có với -r). Tôi có thể làm cho tất cả các chi nhánh từ xa mới được theo dõi theo mặc định khi tôi pull?

+0

đầu ra của 'push.default' cấu hình git trong kho của bạn là gì? Nó sẽ không xảy ra là 'hiện tại', phải không? – jszakmeister

+0

nó không trả lại bất cứ điều gì (trên máy A):/ –

Trả lời

12

từ git config push.default không trả lại bất cứ điều gì, có nghĩa là, với "git 1.8.0.msysgit.0", bạn git push nghĩa git push origin :, với refspec ' : 'đứng cho "khớp" nhánh.

Ở đây nó tạo ra một kết hợp branchA ở phía xa.

Nhưng điều đó không biến nó thành nhánh theo dõi từ xa.
Nói cách khác, branch.branchA.merge không được đặt thành bất kỳ thứ gì.
Đây là lý do tại sao git pull không thành công: nó không biết nhánh từ xa nào được cho là hợp nhất với địa chỉ branchA.


Lưu ý, trước hết git push của bạn nên đã hiển thị thông báo sau:

warning: push.default is unset; its implicit value is changing in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and maintain the current behavior after the default changes, use: 

    git config --global push.default matching 

To squelch this message and adopt the new behavior now, use: 

    git config --global push.default simple 

See 'git help config' and search for 'push.default' for further information. 
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 
'current' instead of 'simple' if you sometimes use older versions of Git) 

Như vậy, với Git2.0, mà git push sẽ thất bại.
Cách duy nhất để đẩy branchA sẽ bằng cách thiết lập một cách rõ ràng chi nhánh thượng nguồn (sử dụng cùng tên):

git push -u origin branchA 
+0

có ý nghĩa, cảm ơn. Vì vậy, có một thiết lập cấu hình để ngăn chặn hành vi này (tức là làm cho 'git push' /' git push origin: 'tạo một nhánh theo dõi từ xa?) Hay tôi luôn luôn phải' push -u'? –

+0

@AndrewBullock bạn nên sử dụng '-u' cho lần đẩy đầu tiên. Sau đó, bạn không cần nó.Đồng thời thiết lập chế độ đẩy mặc định thành trợ giúp đơn giản, thực thi sự tương ứng giữa nhánh địa phương và nhánh theo dõi từ xa. – VonC

+0

@AndrewBullock cho biết, chế độ ngược dòng có thể giúp bạn ở đây, nếu bạn không muốn sử dụng '-u' một cách rõ ràng: hãy xem http://stackoverflow.com/a/13751847/6309 – VonC

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