Bạn có thể tìm nạp bất kỳ từ nào từ bất kỳ điều khiển từ xa nào (miễn là máy chủ sẵn sàng cung cấp cho bạn). Chìa khóa để tìm nạp thông tin bên ngoài refs/heads/
là cung cấp đầy đủ đường dẫn ref bắt đầu bằng refs/
. Nếu muốn, bạn thậm chí có thể kéo từ các kho lưu trữ không được định cấu hình làm điều khiển từ xa (git fetch có thể lấy URL thay vì tên từ xa).
Theo mặc định, các điều khiển từ xa được định cấu hình sẽ chỉ tìm nạp từ không gian tên refs/heads/
của kho từ xa, vì vậy chúng sẽ không nhận bất kỳ thứ gì bên trong refs/remotes/
. Tuy nhiên, bạn có thể tham khảo một ref bên trong nó bằng cách sử dụng một ref hoàn chỉnh như refs/remotes/trunk
(remotes/trunk
cũng có thể làm việc, nhưng cũng có thể không rõ ràng).
Nếu refspec được tìm nạp không chỉ định ref đích, nó sẽ được lưu trữ trong ref đặc biệt FETCH_HEAD.
Fetch của refs/remote/trunk
vào FETCH_HEAD và kiểm tra xem nó ra như một TRỤ tách kho:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout FETCH_HEAD
Same, nhưng tạo ra một tên, chi nhánh địa phương thay vì sử dụng một TRỤ tách ra:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout -b trunk-from-remote FETCH_HEAD
Tương tự, nhưng trực tiếp vào chi nhánh địa phương:
git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote &&
git checkout trunk-from-remote
Nếu bạn đang làm việc với điều khiển từ xa được cấu hình, bạn có thể viết lại cấu hình remote.<remote-name>.fetch
và thêm mục nhập bổ sung để tự động tìm nạp từ cả hai số refs/heads/
và refs/remotes/
.
# fetch branchs of remote into remote-name/heads/*
git config remote.remote-name.fetch '+refs/heads/*:refs/remotes/remote-name/heads/*' &&
# fetch remotes of remote into remote-name/remotes/*
git config --add remote.remote-name.fetch '+refs/remotes/*:refs/remotes/remote-name/remotes/*'
Để tránh va chạm có thể, ví dụ trên cấu hình lấy để lưu trữ refs vào không gian tên rời nhau (…/heads/
và …/remotes/
). Bạn có thể chọn các tên khác nhau nếu bạn muốn. Nếu bạn chắc chắn sẽ không có xung đột, bạn thậm chí có thể nhồi cả hai trực tiếp dưới refs/remotes/remote-name/
.
Câu trả lời của Jefromi và Chris là đủ. Tôi chỉ cần thêm để tham khảo câu hỏi thú vị SO http://stackoverflow.com/questions/1070496/having-a-hard-time-understanding-git-fetch. – VonC