2013-03-04 33 views
10

Nếu tôi làm git tìm nạp từ repo A đến B, chi nhánh chính trong B không thay đổi - chỉ thay đổi remotes/origin/mastergit status nhắc tôi về điều đó.Điều gì sẽ trái ngược với "git fetch"?

Nhưng bây giờ tôi muốn làm ngược lại - cập nhật B từ A, giống như đang đẩy từ A:master đến B:remotes/origin/master. Lý do cho điều này là bản cập nhật này sẽ xảy ra qua ssh, và A máy có khóa công khai auth để B máy - nhưng không phải ngược lại.

Tôi làm cách nào để thực hiện việc này?

+0

rất liên quan [ “git push” làm giống như “git fetch” từ xa] (http://stackoverflow.com/q/4239064/11343) – CharlesB

Trả lời

9

git fetch A, chạy từ B, sẽ lưu trữ tất cả các chi nhánh hiện tại của A trong refs/remotes/A. Như bạn có thể làm được khá nhiều tất cả mọi thứ với refspecs, nó có thể làm tương tự cho một git push, nhưng chạy từ A và nhắm mục tiêu B.

Một refspec có hai phần, cách nhau bằng một dấu chấm phẩy. Trong phần đầu tiên bạn chọn những gì bạn muốn đẩy. Ở đây bạn muốn tất cả các nhánh hiện tại, vì vậy đây là refs/heads/*.

phần thứ hai là nơi bạn sẽ lưu trữ chúng trên điều khiển từ xa; ở đây bạn muốn lưu trữ chúng dưới remotes/A/*, vì vậy đây là refs/remotes/A/*.

Đặt nó lại với nhau, để đẩy tất cả các ngành ở địa phương tương ứng với chi nhánh từ xa bằng lệnh này:

git push --force B refs/heads/*:refs/remotes/A/* 
Các vấn đề liên quan