2012-06-28 55 views
39

Tôi vừa tình cờ gặp một điều gì đó kỳ lạ ngày nay. Tôi hỏi một đồng nghiệp ở công việc mùa hè của tôi để giúp tôi thiết lập một repo git từ xa mới cho mã của tôi và có rất nhiều sự nhầm lẫn về những gì ông đã làm và những gì tôi muốn làm. Tôi yêu cầu anh ta gửi qua cấu hình của mình để có thể nhìn thấy đường dẫn đến điều khiển từ xa của mình và phát hiện ra rằng anh ta không có điều khiển từ xa. Khi tôi hỏi ông về vấn đề này ông giải thích công việc của mình như thế này:Sự khác biệt giữa git push và git pull là gì?

  1. Thay đổi một cái gì đó ở địa phương
  2. Commit
  3. Di chuyển đến thư mục từ xa
  4. git pull c: \ localdir

Vì vậy, thay vì của việc đẩy đến một điều khiển từ xa, anh ta liên tục kéo từ repo địa phương của mình đến một máy chủ trên máy chủ của chúng tôi. Sắp xếp làm việc ngược. Khi tôi đối mặt với anh ta về điều này, anh ấy hỏi tôi sự khác biệt là gì và tôi không thể trả lời anh ấy, nhưng tôi nghĩ có điều gì đó đúng không?

Vì vậy, câu hỏi của tôi với tất cả các bạn là: Sự khác biệt trong việc đẩy vào điều khiển từ xa và kéo từ điều khiển từ xa là gì?

+4

@Downvoters: Hãy nhớ để cho một người biết lý do tại sao, để các câu hỏi có thể được cải thiện. – Zeemee

+2

có xu hướng downvote quá kể từ khi câu hỏi ** âm thanh ** vô lý nhưng thực sự không phải là! Thay vào đó hãy upvoting. – eckes

+2

@Mulmoth chính xác. Har biết tôi đã làm gì sai nếu ai đó đá tôi vào mặt. =) – Qw4z1

Trả lời

10

Đẩy tới điều khiển từ xa: gửi một số cam kết bạn phải thực hiện với một repo git khác. Các repo git được coi là "từ xa", nhưng nó có thể là một repo trong một thư mục khác của ổ cứng của bạn. kéo từ xa: nhận một số cam kết từ một repo từ xa và hợp nhất chúng trong HEAD hiện tại của bạn (thanh toán hiện tại của bạn về repo)

Đồng nghiệp của bạn có thể sử dụng kéo thay vì đẩy vì kho lưu trữ của bạn có thể chưa có sẵn (không có git daemon đang chạy, hoặc gitweb, hay ssh server), nhưng anh ta là avalaible từ máy tính của bạn. Vì nó là một máy chủ, anh ta có thể không muốn vạch trần một daemon/dịch vụ git mà có thể là một vectơ tấn công.

Nhưng nếu kho của bạn đã được chia sẻ/có sẵn, ông sẽ chỉ đã có thể làm:

  1. thay đổi một cái gì đó ở địa phương
  2. cam
  3. push to kho
+1

Tôi nghĩ rằng đây là trường hợp kể từ khi tôi cũng hade một số vấn đề đẩy đến máy chủ. – Qw4z1

+2

Vậy là xong. Và như được nói bởi [eckes] (http://stackoverflow.com/a/11240793) máy chủ có thể có một thư mục kiểm tra đã được phản ánh chủ như là một phiên bản sản xuất. Vì vậy, bạn sẽ không thể đẩy từ chi nhánh địa phương của bạn đến nhánh chủ từ xa vì nó đã được kiểm tra để có sẵn cho nhu cầu sản xuất. – Dolanor

0

Không có, bản repos là bản sao của nhau và kéo và đẩy chỉ là luồng định hướng. Sự khác biệt với phương pháp của đồng nghiệp là anh ta thêm một lệnh không cần thiết thứ 4.

1

Có, nó đang hoạt động ngược.

workflow Nguyên tắc là:

  1. thay đổi một cái gì đó ở địa phương
  2. cam
  3. push to dir xa

Một trường hợp sử dụng (khác là explained by Dolanor) vì đã không đẩy đến từ xa là một bản sao làm việc được kiểm tra trên điều khiển từ xa (tức là nó không có repo trần). Khi anh ta muốn đẩy chi nhánh được kiểm tra trên hộp điều khiển từ xa (ví dụ: master:master), điều này sẽ không thành công vì việc đẩy tới các chi nhánh đã được kiểm xuất đều bị cấm.

Theo tôi, đó là trường hợp sử dụng duy nhất để nhảy qua máy từ xa và kéo thay vì đẩy từ máy cục bộ.

+1

Tôi giải thích trường hợp khác, nơi repo là unavailaible (không có daemon git, vv). Tôi đã quên kho lưu trữ đã được kiểm tra. Vì vậy, có vẻ như có 2 trường hợp để thực hiện loại công việc đó – Dolanor

+0

@Dolanor: bạn nói đúng! Câu trả lời đã chỉnh sửa. – eckes

+0

Vì vậy, về cơ bản đẩy và kéo chỉ là tung cam kết theo hướng ngược lại? – Qw4z1

13

của bạn Trong tôi xem bạn có thể cho phép người dùng đẩy cam kết của họ vào một số kho lưu trữ được coi là "chính" hoặc bạn cho phép họ gửi yêu cầu kéo tới một người dùng có quyền sửa đổi "master".

Github, ví dụ, sẽ không cho phép người không đóng góp đẩy vào kho lưu trữ, nhưng sẽ cho phép họ gửi yêu cầu kéo, để những người đóng góp có thể tích hợp các thay đổi của họ.

+2

Ví dụ yêu cầu kéo GitHub làm cho nó rõ ràng hơn cho tôi. Cảm ơn! – Qw4z1

+0

Câu trả lời này giải thích nó một cách đơn giản, thay vì giới thiệu thêm nhiều thuật ngữ mới cho người mới để 'hiểu'. – NavkarJ

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