Tại sao một git 'yêu cầu kéo' không được gọi là 'yêu cầu đẩy'?


450

Thuật ngữ được sử dụng để hợp nhất một chi nhánh với một kho lưu trữ chính thức là một 'yêu cầu kéo'. Điều này thật khó hiểu, vì có vẻ như tôi đang yêu cầu đẩy các thay đổi của mình lên kho lưu trữ chính thức.

Tại sao nó được gọi là yêu cầu kéo và không phải là yêu cầu đẩy?


45
Hình ảnh một cây lớn, sống. Cây quá cứng để bạn đẩy một nhánh vào, thay vào đó bạn phải yêu cầu cây kéo một nhánh vào thân cây, củng cố nó.
Luke


2
Nếu sử dụng một kho lưu trữ từ xa như gitihub, một trong những lệnh cuối cùng mà người bảo trì sẽ thực thi trong việc thực hiện yêu cầu thông qua dòng lệnh là git push. Đối với tôi mà nói lên tất cả ... (có, họ có thể ra kéo git, push sau đó git, nhưng việc đẩy mạnh được yêu cầu và là những gì cuối cùng nhận được thực hiện)
ebyrob

60
GitLab gọi họ merge requests. Rõ ràng hơn nhiều, IMHO. :)
U007D

Câu trả lời:


377

Nếu bạn có một thay đổi mã trong kho lưu trữ của mình và muốn chuyển nó sang kho lưu trữ đích, thì:

  • "Đẩy" là bạn buộc các thay đổi hiện diện trong kho đích ( git push).
  • "Kéo" là kho lưu trữ mục tiêu lấy các thay đổi của bạn để hiện diện ở đó ( git pulltừ repo khác).

"Yêu cầu kéo" là bạn yêu cầu kho lưu trữ đích vui lòng lấy các thay đổi của bạn.

"Yêu cầu đẩy" sẽ là kho lưu trữ mục tiêu yêu cầu bạn đẩy các thay đổi của mình.


21
điều này cũng là một vấn đề đối với tôi với quy ước đặt tên: D & u chỉ làm cho nó đơn giản hơn nhiều để hiểu. nghĩ về nó giống như cách thức mua / bán tiền tệ trong các ngân hàng hoạt động.
nsuinteger

Tôi nghĩ rằng bạn cần xác định lại định nghĩa của bạn về "Kéo", bởi vì có sự nhầm lẫn về "kho lưu trữ đích", "những thay đổi của bạn". Có lẽ bạn muốn nói rằng "kho lưu trữ của bạn lấy các thay đổi từ kho lưu trữ đích"?
MrPisarik

9
Ý tưởng chính là thuật ngữ "đẩy" / "kéo" được sử dụng để xác định bên quyết định cuối cùng việc chuyển tiền có xảy ra hay không , bên tạo ra thông tin được chuyển.
Jess Riedel

3
Nó phụ thuộc vào người được bạn yêu cầu, nếu nó là nhóm của bạn một "đẩy yêu cầu" có ý nghĩa hơn, nếu nó là kho lưu trữ từ xa của bạn hoàn toàn đúng.
A77

2
Khi làm việc với một máy chủ Git trung tâm, riêng tư trong một công ty, thông thường bạn sẽ có thể đẩy một chi nhánh mới đến nó và yêu cầu xem xét mã và hợp nhất từ ​​các đồng nghiệp của bạn. Vì vậy, "yêu cầu kéo" cho quy trình công việc này không đúng về mặt kỹ thuật, nhưng hóa ra đó là thuật ngữ được mọi người và các nhà thiết kế GUI chọn.
Sven

88

Khi bạn gửi yêu cầu kéo, bạn đang yêu cầu (yêu cầu) chủ sở hữu repo chính thức rút một số thay đổi từ repo của chính bạn. Do đó "kéo yêu cầu".


2
nhưng chủ sở hữu sẽ phát hành hợp nhất git sau khi phê duyệt nó
Jervie Vitriolo

2
Một git pull là một tìm nạp và hợp nhất kết hợp, vì vậy kéo đã ngụ ý hợp nhất.
Xiong Chiamiov

37

tl; dr vì tôi không được phép đẩy, tôi sẽ chỉ yêu cầu chủ sở hữu repo để họ quyết định kéo


Ai có thể đẩy mã vào kho lưu trữ?

Nếu bất cứ ai (có thể xấu xa hoặc vô học hoặc không biết) có thể đến và nói ở đây tôi chỉ cần đẩy nó đến chi nhánh chính của bạn và làm rối tung tất cả mã của bạn HAHAHA! ?

Chắc chắn bạn không muốn anh ta làm điều đó. Theo mặc định, mạng lưới an toàn được đặt để không ai có thể đẩy vào repo của bạn. Bạn có thể đặt người khác làm cộng tác viên , sau đó họ có thể đẩy. Bạn sẽ cung cấp quyền truy cập như vậy cho những người bạn tin tưởng.

Vì vậy, nếu bạn không phải là cộng tác viên và cố gắng thúc đẩy, bạn sẽ gặp một số lỗi cho thấy bạn không có quyền.


Vậy làm thế nào để các nhà phát triển khác có thể đẩy tới một repo mà họ không được phép đẩy?
Bạn không thể cấp quyền truy cập cho tất cả mọi người, nhưng bạn muốn cung cấp cho người khác một điểm thoát / điểm vào để họ có thể đưa ra 'yêu cầu cho chủ sở hữu repo để kéo mã này vào repo'. Đơn giản chỉ cần đặt bằng cách làm cho repo có thể truy cập được, họ có thể rẽ nhánh ... thực hiện thay đổi trong ngã ba của chính họ. Đẩy những thay đổi của họ đến ngã ba của chính họ . Một khi nó ở trong repo từ xa của riêng họ:

Họ đưa ra yêu cầu kéo từ ngã ba của mình và chủ sở hữu của repo ngược dòng (mà bạn không thể đẩy trực tiếp đến) sẽ quyết định có hợp nhất yêu cầu kéo hay không.


Ngoài ra một câu hỏi bán liên quan tôi khuyên bạn nên đọc Điều gì chính xác xảy ra trong một lần đẩy git? Tại sao không phải là một git đẩy được coi giống như một hợp nhất git?


4
Đối với những người không nhận ra rằng có sự khác biệt về quyền giữa đẩy và kéo, câu trả lời này rất có ý nghĩa.
thân

29

Yêu cầu kéo: Tôi yêu cầu bạn kéo tôi.


7
Tôi với tư cách là một người dùng xem nó từ quan điểm của tôi, không nên là "Tôi yêu cầu đẩy nó cho bạn?" I >>> You - Bạn đang thay đổi điểm tham chiếu hai lần trong cùng một bối cảnh ... thay vì I >>>> You <<<< Mine
Marin

1
Câu trả lời này có ý nghĩa nhất.
shivams

Dễ dàng vắt chanh chanh
Ivan Ivković

Tôi yêu cầu bạn kéo tôi ..... từ đâu ??? Tôi hiểu điều này sẽ là từ một ngã ba của dự án ban đầu? hoặc từ một bản sao địa phương?
KansaiRobot

5

Tôi muốn đẩy một cái gì đó đến repo của người khác.

Tôi không có quyền đẩy (hoặc kéo, cho vấn đề đó).

Chủ sở hữu / cộng tác viên có quyền. Họ có thể kéo cũng như đẩy. Tôi không thể đẩy.

Vì vậy, tôi yêu cầu họ thực hiện một cú kéo từ tôi - điều đó gián tiếp có nghĩa là tôi đang yêu cầu họ chấp nhận sự thúc đẩy của tôi.

Vì vậy, không có yêu cầu đẩy. Chỉ cho một cái kéo. Và để chấp nhận một đẩy.

Do đó, yêu cầu 'kéo'. Và không phải là một yêu cầu 'đẩy'.


4

Đó là từ "Yêu cầu" là chìa khóa trong những hành động này. Bạn cũng có thể nghĩ về nó như nói rằng "Tôi có một yêu cầu để bạn nhận công việc của tôi, bạn có chấp nhận không?" - "Yêu cầu kéo".

Ban đầu hơi khó hiểu, nhưng cuối cùng cũng có ý nghĩa.


1

Để hiểu điều này tốt hơn và ghi nhớ nó mãi mãi, bạn cần phải hình dung nó.

Hình ảnh một cây lớn, sống {như kho lưu trữ của bạn}. Cây quá cứng để bạn đẩy một nhánh vào hoặc thêm một phần mới vào đó {tượng trưng cho việc tạo một nhánh mới hoặc bạn đẩy mã trong đó}, thay vào đó bạn phải yêu cầu cây kéo một nhánh vào thân cây hoặc có thay đổi từ bạn.

Thuật ngữ yêu cầu kéo kéo ra đến từ bản chất phân tán. Thay vì chỉ đẩy các thay đổi của bạn vào kho lưu trữ (như bạn sẽ làm với kho lưu trữ tập trung, ví dụ với Subversion), bạn đang xuất bản các thay đổi của mình một cách riêng biệt và yêu cầu nhà bảo trì thực hiện các thay đổi của bạn. Người bảo trì sau đó có thể xem qua các thay đổi và nói kéo.

Vì vậy, về cơ bản, bạn "yêu cầu" những người có quyền truy cập bằng văn bản vào repo mà bạn muốn đóng góp, để "Kéo" từ repo của bạn.

Yêu cầu kéo cho phép bạn nói với người khác về những thay đổi bạn đã đẩy đến một chi nhánh trong kho lưu trữ trên GitHub. Khi yêu cầu kéo được mở, bạn có thể thảo luận và xem xét các thay đổi tiềm năng với cộng tác viên và thêm các cam kết tiếp theo trước khi các thay đổi của bạn được hợp nhất vào chi nhánh cơ sở. Giải thích về Github


0

Tôi nghĩ đó là một thuật ngữ ngớ ngẩn bởi vì tôi muốn nghĩ rằng tôi muốn PUSH một cái gì đó cho bạn và không nghĩ ngược lại yêu cầu người khác kéo bổ sung của tôi. Do đó, nó nên được thay đổi thành PUSH REQ. vì tôi là phần tích cực. Mũi tên đi theo một cách khác bắt đầu với tôi chứ không phải Goofy ở đầu kia. IMHO.


0

Nghĩ theo cách này. Kho lưu trữ cục bộ so với kho lưu trữ từ xa.

  • Khi bạn đẩy từ địa phương. ( git push) - nói cách khác, các kho lưu trữ từ xa được kéo mã từ bạn (địa phương).

Bạn đang yêu cầu một cái gì đó. Vì vậy, hãy tự hỏi,

  • Bạn có muốn kho lưu trữ từ xa kéo mã từ bạn? - Kéo Yêu cầu.

Tôi nghĩ điều quan trọng là phải phân biệt rằng bạn không thể thực hiện các yêu cầu đẩy. Nếu bạn có thể đẩy và bạn làm như vậy, đó không phải là một yêu cầu, nó sẽ hợp nhất với chủ. Yêu cầu kéo về kho lưu trữ trung tâm git là bạn yêu cầu mã của bạn được hợp nhất.
James

Tôi chỉ sử dụng điều này như một ví dụ. Tất nhiên, Github có thể đẩy mã. nhưng tôi sẽ chỉnh sửa câu trả lời của tôi
Jin Lim

0

Tôi sợ rằng hầu hết các câu trả lời này đều giải quyết câu hỏi "Yêu cầu kéo" nghĩa là gì? hoặc 'yêu cầu đẩy' nghĩa là gì? thay vì câu hỏi của OP: Tại sao nó được gọi là yêu cầu kéo mà không phải là yêu cầu đẩy?

Thông thường loại thay thế câu hỏi này là chấp nhận được, nhưng trong trường hợp này rõ ràng là OP biết câu trả lời cho những câu hỏi thay thế này, vì vậy việc trả lời chúng không hữu ích lắm.

Chỉ những người ở GitHub đặt ra thuật ngữ mới biết chắc chắn. Tuy nhiên, dường như rõ ràng là sự lựa chọn thuật ngữ này phản ánh một cái gì đó giống như quan điểm sau đây liên quan đến hiện tượng "thay đổi đến kho lưu trữ từ bên ngoài": Người bảo trì thực hiện hành động (kéo) .

Tuy nhiên, một yêu cầu cũng là một hành động và người thực hiện hành động đó không phải là người duy trì mà là người đệ trình (người đã thực hiện nhiều hành động hơn, cụ thể là công việc). Do đó, thuật ngữ 'yêu cầu kéo' tạo ra sự nhầm lẫn về người đại diện . Cuối cùng, sự nhầm lẫn xuất hiện do tính chất đệ quy của một yêu cầu: Yêu cầu vừa là hành động của một tác nhân chính vừa là yêu cầu cho một hành động trong tương lai của một tác nhân thứ hai.

Tình huống khá giống với các cấu trúc ngôn ngữ phổ biến hiện nay như "chúng tôi xây nhà" (được sử dụng thay cho "chúng tôi đã trả tiền cho người khác để xây nhà"), trong đó trách nhiệm đối với hành động chính được chuyển từ tác nhân ban đầu rõ ràng sang một tác nhân thứ cấp hoàn thành vai trò quản lý xã hội.

Người ta có thể kết luận rằng lý do cho sự lựa chọn thuật ngữ là hợp pháp hóa quan điểm rằng công việc quản lý là lao động hạng nhất . Hơn nữa, lý do cho sự nhầm lẫn về sự lựa chọn thuật ngữ này có thể là do những người không làm việc quản lý tự nhiên có một quan điểm khác.

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.