Git: từ xa được cấu hình mặc định cho chi nhánh?


192

Tôi có một kho lưu trữ trần từ xa hub. Tôi chỉ làm việc trong masterchi nhánh. Câu cuối cùng của thông báo lỗi này dưới đây khiến tôi tự hỏi: Làm thế nào để tôi tìm ra "từ xa được cấu hình mặc định cho chi nhánh hiện tại của bạn" ? Và làm thế nào để tôi thiết lập nó?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

Câu trả lời:


230

Theo dõi chi nhánh từ xa

Bạn có thể chỉ định kho lưu trữ từ xa mặc định để đẩy và kéo bằng tùy chọn theo dõi của git-Branch. Bạn thường làm điều này bằng cách chỉ định tùy chọn --track khi tạo nhánh chính cục bộ của mình, nhưng vì nó đã tồn tại, chúng tôi sẽ chỉ cập nhật cấu hình theo cách thủ công như vậy:

Chỉnh sửa của bạn .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Bây giờ bạn có thể chỉ cần git đẩy và git kéo.

[ nguồn ]


Điều này cũng sẽ không được thiết lập nếu OP đã làm git pull hub master?
Ryan Bigg

@Ryan Bigg: Không tự động, hoặc bạn sẽ luôn làm hỏng cấu hình của mình.
chọc

36
Tại sao phải chỉnh sửa tệp cấu hình khi có lệnh git vì lý do này?
urschrei

43
nhánh git --set-upstream local_branch remote / remote_branch (hoặc khi đẩy, như chi tiết bên dưới)
urschrei

25
@scragz: Không đời nào! cách tiếp cận lệnh đảm bảo .gitconfig của bạn được để ở trạng thái có ý nghĩa.
smci

260

Bạn có thể làm điều đó đơn giản hơn, đảm bảo rằng bạn .gitconfigđược để lại trong trạng thái có ý nghĩa:

Sử dụng Git phiên bản v1.8.0 trở lên

git push -u hub master khi đẩy, hoặc:
git branch -u hub/master

HOẶC LÀ

(Điều này sẽ đặt điều khiển từ xa cho chi nhánh hiện đang thanh toán thành hub/master)
git branch --set-upstream-to hub/master

HOẶC LÀ

(Điều này sẽ thiết lập từ xa cho các chi nhánh đặt tên branch_namecho hub/master)
git branch branch_name --set-upstream-to hub/master

Nếu bạn đang sử dụng v1.7.xhoặc sớm hơn

bạn phải sử dụng --set-upstream:
git branch --set-upstream master hub/master


3
Đối với bất cứ ai tự hỏi: lệnh thứ hai có thể được sử dụng cho các nhánh hiện có
Eric Hu

1
@ eric-hu như chi tiết trong câu trả lời của tôi ở đây: stackoverflow.com/questions/4878249/NH
urschrei

1
Các set-upstream[-to]lệnh làm thay đổi hiện từ xa cấu hình. Các poster ban đầu hỏi về điều khiển từ xa được cấu hình mặc định . Chắc chắn đó không hoàn toàn giống khái niệm?
Steve Pitchers

1
Mỗi nhánh có một điều khiển từ xa được cấu hình hiện tại , chỉ định nhánh nào trên điều khiển từ xa đó tương ứng với nhánh cục bộ. Điều khiển từ xa được cấu hình mặc định xác định nhánh nào được đẩy hoặc kéo nếu bạn không chỉ định rõ ràng một nhánh. Câu trả lời này chỉ đặt ra hiện tại . Câu trả lời được chấp nhận (chỉnh sửa bằng tay) cũng cho phép bạn đặt câu trả lời mặc định . Có ai biết một lệnh tránh phải chỉnh sửa bằng tay không?
Steve Pitchers

1
--set-upstream-tođã thực hiện chính xác những thay đổi tương tự .git/confignhư @scragz đã đề xuất trong câu trả lời của mình .
strah

26

Để hoàn thiện: các câu trả lời trước cho biết cách đặt nhánh ngược dòng, nhưng không biết cách nhìn thấy nó.

Có một số cách để làm điều này:

git branch -vvcho thấy thông tin cho tất cả các chi nhánh. (được định dạng màu xanh lam trong hầu hết các thiết bị đầu cuối)

cat .git/config cũng cho thấy điều này.

Để tham khảo:


-1

lệnh để có được điều khiển đẩy từ xa hiệu quả cho nhánh, ví dụ: master, là:

git config chi nhánh.master.pushRemote || git config remote.pushDefault || cấu hình git nhánh.master.remote

Đây là lý do (từ đầu ra "man git config"):

Branch.name.remote [...] nói với git fetch và git đẩy mà từ xa để tìm nạp từ / đẩy đến [...] [để đẩy] có thể được ghi đè bằng remote.pushDefault (cho tất cả các nhánh) [và] cho nhánh hiện tại [..] bị ghi đè thêm bởi nhánh.name.pushRemote [...]

Vì một số lý do, "man git đẩy" chỉ nói về nhánh.name.remote (mặc dù nó có quyền ưu tiên ít nhất trong ba) + nói sai rằng nếu không được đặt, hãy đặt mặc định thành gốc - không, nó chỉ là rằng khi bạn sao chép một repo, Branch.name.remote được đặt thành gốc, nhưng nếu bạn loại bỏ cài đặt này, git đẩy sẽ thất bại, mặc dù bạn vẫn có nguồn gốc từ xa


Câu hỏi này đã được trả lời với một câu trả lời hữu ích hơn.
Austin Schäfer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.