2009-07-26 46 views
74

công việc thông thường của tôi khi làm việc với git, là một cái gì đó như thế này:Bắt chi nhánh git hiện để theo dõi các chi nhánh từ xa

  1. tạo một kho lưu trữ địa phương
  2. làm một số công việc trong kho đó, thêm các tập tin/thay đổi, vv
  3. quyết định rằng tôi muốn có một vị trí từ xa trung tâm cho các kho lưu trữ, và tạo ra một
  4. đẩy tất cả các cam kết từ kho lưu trữ địa phương của tôi để kho này từ xa mới

Bây giờ, tuy nhiên, tôi muốn có thể pushpull từ kho lưu trữ từ xa này mà không cần phải chỉ định nơi tôi đang đẩy hoặc kéo; Tôi muốn chủ nhân địa phương của mình theo dõi chủ từ xa.

thích hợp cách để làm điều này không rõ ràng với tôi và tôi không thể xác định nó từ tài liệu, mặc dù nó không thực sự nhiều hơn một lệnh.

Bởi vì nó là cái gì đó là chỉ bao giờ thực hiện một lần mỗi kho, tôi đã thường sử dụng một trong hai giải pháp đơn giản, nhưng hacky,:

  1. sử dụng git clone để tạo ra một kho lưu trữ địa phương mới, và xóa cái cũ . Sau khi nhân bản git, kho lưu trữ mới được thiết lập để theo dõi nguồn gốc.
  2. chỉnh sửa thủ công .git/config để tạo nguồn gốc chính.

Tôi nghĩ rằng tôi có thể chạy lệnh, có thể một số hình thức git remote để thiết lập kho lưu trữ hiện có để theo dõi chính một chủ từ xa. Bất cứ ai có thể cho tôi biết lệnh đó là gì?

+0

Trên thực tế chỉ ra rằng một câu hỏi tương tự đã được hỏi trước: http: // stackoverflow. com/questions/312055/how-do-i-fix-missing-git-remote-details – SpoonMeiser

+4

Đây thực sự là bản sao của: http://stackoverflow.com/questions/520650/how-do-you-ma ke-an-existing-git-branch-track-a-remote-branch – takeshin

+0

Bản sao của [Làm thế nào để bạn tạo một nhánh Git hiện có theo dõi một nhánh từ xa?] (http://stackoverflow.com/q/520650/456814) . –

Trả lời

146

Sử dụng thiết thượng nguồn arg:

git branch --set-upstream local-branch-name origin/remote-branch-name 

Chạy lệnh trên cập nhật tệp .git/config của bạn một cách chính xác và thậm chí xác minh với kết quả này:

"Chi nhánh tên chi nhánh địa phương được thiết lập để theo dõi chi nhánh từ xa từ xa."

EDIT: Như martijn nói: "Trong phiên bản Git v1.8.0, --set-thượng nguồn bị phản đối Sử dụng --set-thượng nguồn để thay thế.."

git branch --set-upstream-top local-branch-name origin/remote-branch-name 
+16

Trong phiên bản Git v1.8.0, '--set-upstream' không được chấp nhận. Sử dụng '--set-upstream-to' để thay thế. – Martijn

+1

Sử dụng 'git remote show 'để xem các chi nhánh nào được theo dõi bởi các chi nhánh địa phương của bạn – naitsirch

+1

[Chỉnh sửa được đề xuất này] (http://stackoverflow.com/review/suggested-edits/4688186) không nên được phê duyệt, về cơ bản đã thay đổi câu trả lời (và để nó ở trạng thái không chính xác, vì các đối số cho tùy chọn mới được đảo ngược). Hãy để áp phích ban đầu quyết định có muốn cập nhật câu trả lời của anh ấy hay không. –

18

git help remote sẽ cho bạn biết những điều bạn cần biết. Tôi nghĩ điều bạn muốn là

git remote add [remote-name] [remote-url] 

# Set a local branch to follow the remote 
git config branch.[branch-name].remote [remote-name] 

# Set it to automatically merge with a specific remote branch when you pull 
git config branch.[branch-name].merge [remote-master] 

Bạn cũng có thể chỉnh sửa .git/config để chỉnh sửa thủ công.

+0

Một tùy chọn khác là tạo kho lưu trữ trung tâm, sau đó xóa thư mục làm việc của bạn và tạo lại nó bằng cách nhân bản từ kho lưu trữ trung tâm. Tuy nhiên, chỉnh sửa .git/config sẽ có nhiều thông tin hơn. –

+0

nhân bản kho lưu trữ trung tâm và chỉnh sửa .git/config là hai tùy chọn mà tôi đã đề cập trong câu hỏi của mình. – SpoonMeiser

6

Bạn cũng có thể sử dụng điều này nếu bạn muốn tạo một chi nhánh địa phương mới để theo dõi một chi nhánh từ xa:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

hoặc thậm chí tốt hơn:

git checkout -t origin/branch_name 
+0

git checkout - tên miền gốc branchname branchname gây tử vong: git checkout: cập nhật đường dẫn không tương thích với việc chuyển nhánh. Bạn có dự định thanh toán 'origin/branchname' mà không thể giải quyết dưới dạng cam kết không? – edebill

+0

lẽ ra phải có tùy chọn --track ... – bcolfer

+0

Tôi vẫn nhận được lỗi giống như edebill. – Von

5

Trong các phiên bản mới hơn của git bạn có thể sử dụng

git branch --track origin/branch_name 
+3

Bài đăng này được tự động gắn cờ là chất lượng thấp vì nó quá ngắn/chỉ có mã. Bạn có muốn mở rộng nó bằng cách thêm một số văn bản để giải thích cách giải quyết vấn đề? – gung

1

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master

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