Câu trả lời:
CẬP NHẬT: thêm thông tin!
Tôi nên làm điều này ngay từ đầu: Tôi đã ghi chú các ghi chú phát hành Git trong repo Git của Git (vì vậy meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Sau đó, tôi đã thực hiện lesstìm kiếm --allvà đây là những gì tôi tìm thấy trong ghi chú phát hành cho phiên bản Git 1.6.6 :
git fetchđã học--allvà--multiplecác tùy chọn, để chạy tìm nạp từ nhiều kho lưu trữ và--prunetùy chọn để loại bỏ các nhánh theo dõi từ xa đã cũ. Những điều này làmgit remote updatevàgit remote pruneít cần thiết hơn ( mặc dù không có kế hoạch để loại bỏremote updatecũng khôngremote prune).
Phiên bản 1.6.6 không được phát hành cho đến ngày 23 tháng 12 năm 2009 và Poster gốc đã hỏi câu hỏi của anh ấy vào ngày 6 tháng 12 năm 2009.
Vì vậy, như bạn có thể thấy từ các ghi chú phát hành, các tác giả của Git đã nhận thức được thực tế rằng git remote updatechức năng lệnh đã bị trùng lặp đôi chút git fetch, nhưng họ quyết định không xóa nó, có thể để tương thích ngược với các tập lệnh và chương trình hiện có, hoặc có thể vì nó chỉ là quá nhiều công việc và có những mục ưu tiên cao hơn.
Câu trả lời gốc với nhiều chi tiết hơn
câu trả lời xenoterracide của là 3,5 tuổi bây giờ, và Git đã trải qua nhiều phiên bản kể từ đó (nó đã đi từ v1.6.5.5 để v1.8.3.2 như các văn bản này), và nhìn vào hiện tại tài liệu cho git remote updatevà git fetch, có vẻ như họ cả hai có thể thực hiện về cơ bản là chức năng tương tự của lấy cam kết mới từ nhiều điều khiển từ xa , đưa ra các lựa chọn đúng đắn và lập luận.
Một cách để tìm nạp nhiều điều khiển từ xa là với --allcờ:
git fetch --all
Điều này sẽ tìm nạp từ tất cả các điều khiển từ xa được cấu hình của bạn, giả sử rằng bạn chưa remote.<name>.skipFetchAllđặt cho chúng:
Nếu đúng, điều khiển từ xa này sẽ bị bỏ qua theo mặc định khi cập nhật bằng git-fetch (1) hoặc tiểu ban cập nhật của git-remote (1) . - tài liệu git-config
Điều này sẽ tương đương với việc sử dụng
git remote update
mà không chỉ định bất kỳ nhóm từ xa nào để tìm nạp và cũng không có remotes.default được đặt trong cấu hình repo của bạn và cũng không có điều khiển từ xa nào của bạn được remote.<name>.skipDefaultUpdateđặt thành đúng.
Các 1.8.3.2 tài liệu hiện tại cho cấu hình của Git không đề cập đến các remotes.defaultthiết lập, nhưng tôi tham khảo ý kiến các Đấng Toàn Năng Google về nó và tìm thấy lời giải thích hữu ích này từ Mislav Marohnić :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Bạn có thể xác định một danh sách từ xa mặc định sẽ được tìm nạp bởi
remote updatelệnh. Đây có thể là điều khiển từ xa từ đồng đội của bạn, thành viên cộng đồng đáng tin cậy của một dự án mã nguồn mở hoặc tương tự.
Vì vậy, có lẽ, nếu bạn có remotes.default thiết lập, và không phải tất cả các điều khiển từ xa của bạn được liệt kê trong đó, thì git remote updatesẽ không tìm nạp tất cả các điều khiển từ xa mà repo của bạn "biết".
Đối với remote.<name>.skipDefaultUpdatecài đặt, các tài liệu Git giải thích nó như vậy:
Nếu đúng, điều khiển từ xa này sẽ bị bỏ qua theo mặc định khi cập nhật bằng git-fetch (1) hoặc tiểu ban cập nhật của git-remote (1) .
Thay vì tìm nạp tất cả các điều khiển từ xa, cả hai fetchvà remote updatecho phép bạn chỉ định nhiều điều khiển từ xa và các nhóm từ xa để tìm nạp:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>cho phép bạn tìm nạp nhiều điều khiển từ xa là một phần của một nhóm (để mượn một ví dụ khác từ Mislav ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiplecho phép bạn chỉ định một số kho lưu trữ và nhóm kho lưu trữ để tìm nạp cùng một lúc (từ các tài liệu ):
Cho phép một số
<repository>và<group>đối số được chỉ định. Không<refspec>scó thể được chỉ định.
Sự mơ hồ trong git remote updatetài liệu
Bản tóm tắtgit remote update chỉ định rằng cú pháp lệnh như sau:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Chú ý phần cuối , [(<group> | <remote>)…]? Các dấu chấm kéo theo ...ngụ ý rằng bạn có thể chỉ định nhiều nhóm và điều khiển từ xa bằng lệnh, điều đó có nghĩa là nó hoạt động theo cùng một cách như git fetch --multiple... xem cách cú pháp giữa hai nhóm này giống nhau như thế nào?
Tuy nhiên, trong cùng một tài liệu, lời giải thích cho update lệnh không nói gì về việc chỉ định nhiều nhóm và các đối số từ xa, chỉ có điều nó
Tìm nạp các bản cập nhật cho một bộ điều khiển từ xa có tên trong kho lưu trữ như được định nghĩa bởi
remotes.<group>.
Vì vậy, không rõ ràng nếu git remote updatehoạt động giống hệt vớigit fetch --multiple liên quan đến việc chỉ định nhiều điều khiển từ xa riêng lẻ và nhiều nhóm từ xa.
Cuối cùng, mọi người đều biết trường hợp đơn giản là tìm nạp một điều khiển từ xa:
git fetch <remote>
Nó có thể là trường hợp mà bạn cũng có thể sử dụng
git remote update <remote>
để làm điều tương tự, nhưng như tôi đã đề cập trong phần trước, tài liệu cho git remote updatekhông rõ ràng về việc có thể tìm nạp bất cứ thứ gì ngoài một nhóm không điều khiển từ xa bằng lệnh không.
Như tôi đã giải thích, git fetchvà git remote updatehành xử tương tự đối với việc tìm nạp từ nhiều điều khiển từ xa. Họ chia sẻ cú pháp và đối số tương tự, mặc dùgit fetch ngắn hơn, vì vậy mọi người có thể thấy dễ dàng nhập và sử dụng hơn.
Nó có thể là trường hợp git remote updatekhông thể được sử dụng để tìm nạp chỉ một điều khiển từ xa như với git fetch, nhưng như tôi đã chỉ ra, tài liệu không làm rõ điều này.
Qua một bên
Sự trùng lặp về chức năng giữa các lệnh sứ Git, được minh họa bằng git fetchvà git remote updateở trên, không phải là duy nhất. Tôi đã nhận thấy một tình huống tương tự với git rebase --ontovàgit cherry-pick , trong đó cả hai có thể thực hiện một loạt các cam kết để vá vào một cam kết cơ sở mới.
Tôi đoán rằng vì Git đã phát triển qua nhiều năm, một số chức năng (chắc chắn là sao?), Có lẽ đôi khi là sự tiện lợi cho người dùng cuối (ví dụ, đơn giản hơn là vượt qua một phạm vi cherry-pick, hơn là vượt qua một cam kết duy nhất để chọn một phạm vi). Rõ ràng cherry-pickkhông phải lúc nào cũng chấp nhận một loạt các cam kết, như được giải thích trong ghi chú phát hành v1.7.2 :
git cherry-pickđã học cách chọn một loạt các cam kết (ví dụcherry-pick A..Bvàcherry-pick --stdin), cũng vậygit revert; những cái này không hỗ trợ điều khiển trình tự đẹp hơnrebase [-i], mặc dù.
Có và không. git remote updatelấy từ tất cả các điều khiển từ xa, không chỉ một.
Không cần nhìn vào mã để xem nếu remote updatechỉ là một tập lệnh shell (có thể), về cơ bản, nó sẽ chạy tìm nạp cho mỗi điều khiển từ xa. git fetchcó thể chi tiết hơn nhiều.
git remote update, xem trang chủ git-remote.
git remotekhông phải là một kịch bản shell, nhưng nó sinh ra git fetchtrong một remote update.
git fetchtùy chọn lệnh tương đương cho một git remote update?
git fetch --all
git rebaselà thíchmvvàgit cherry-picklà như thếcp. Công--ontotắc không thay đổi điều đó. Bạn chỉ có thể nhận được hiệu ứng sao chépgit rebasenếu bạn chỉ định các giá trị SHA1, nếu không chi nhánh của bạn sẽ bị di chuyển!