"Giai đoạn" nghĩa là gì trong git?


316

Tôi thấy git khó hiểu vì tôi không thể tìm thấy ý nghĩa của các từ được sử dụng cho các hành động. Tôi đã kiểm tra từ điển về ý nghĩa của 'giai đoạn' và không có ý nghĩa nào liên quan đến các khái niệm kiểm soát nguồn.

"Giai đoạn" nghĩa là gì trong bối cảnh của git?



11
Git thực sự có vốn từ vựng riêng của mình. Và vì mỗi hướng dẫn được xây dựng trong từ vựng đặc biệt, thật khó để bắt đầu. Để "giai đoạn" là làm git add file.extcho một tệp cụ thể hoặc git add .ảnh hưởng đến tất cả các tệp đã sửa đổi và không bị theo dõi. Các tập tin đã được thêm vào theo cách này được cho là "dàn dựng" và chúng sẽ được đưa vào "cam kết" tiếp theo. Cam kết là một ảnh chụp nhanh công việc của bạn được tạo, ví dụ như với git commit -m "I wrote something".
Jonatan Öström

11
Git là khó hiểu vì không có hướng dẫn khái niệm ngoài kia. Tất cả đi qua các chi tiết không cần thiết.
Xaqron

2
Ý của bạn là xóa thẻ "thuật ngữ" khỏi câu hỏi này? Có vẻ như một thẻ hoàn toàn hợp lệ với tôi.
Philip Kendall

Vì một số lý do, cách tốt nhất tôi có thể hiểu tầm quan trọng của việc dàn dựng là từ câu trả lời này trong Quora: qr.ae/TbSK2I
Lamar

Câu trả lời:


310

Để giai đoạn một tập tin chỉ đơn giản là chuẩn bị nó một cách tinh vi cho một cam kết. Git, với chỉ mục của nó cho phép bạn chỉ cam kết một số phần nhất định của những thay đổi bạn đã thực hiện kể từ lần xác nhận cuối cùng. Giả sử bạn đang làm việc trên hai tính năng - một tính năng đã hoàn thành và một vẫn cần một số công việc được thực hiện. Bạn muốn thực hiện một cam kết và về nhà (5 giờ, cuối cùng!) Nhưng sẽ không muốn cam kết các phần của tính năng thứ hai, chưa được thực hiện. Bạn giai đoạn các phần bạn biết thuộc về tính năng đầu tiên và cam kết. Bây giờ, cam kết của bạn là dự án của bạn với tính năng đầu tiên được thực hiện, trong khi thứ hai vẫn đang được thực hiện trong thư mục làm việc của bạn.


5
Lời giải thích hay. Lưu ý rằng git, được phân phối, rõ ràng cho phép bạn cam kết cả hai tính năng, vì các cam kết là cục bộ (lúc đầu). Tuy nhiên, bạn có thể muốn chia các sửa đổi thành một cam kết cho mỗi tính năng và một lần nữa dàn dựng lại có ích.
sleske

77
Tôi không hiểu tại sao bạn cần dàn dựng cho việc này. Tôi có thể làm điều này với HG hoặc thậm chí SVN chỉ bằng cách cam kết các tệp có liên quan. Cảm giác như tính năng này được thiết kế chủ yếu để hỗ trợ những người khăng khăng làm việc với dòng lệnh nơi khó kiểm tra hộp hơn về những gì bạn đang cam kết.
nhảy lên

78
@jiggy git cho phép bạn tạo một phần của tập tin. Bạn cũng có thể tạo một tập tin, thực hiện các sửa đổi thêm, sau đó cam kết trạng thái của nó ở giai đoạn. Bạn không thể làm điều đó trong lật đổ.
Izkata

4
@jiggy Trong SVN, có một cái gì đó, giữa thời gian bạn chọn tệp / phần nào của tệp sẽ cam kết và khi bạn viết xong thông điệp cam kết của mình, sẽ ghi lại những tệp / phần bạn đã chọn để cam kết. Nó có thể không bao giờ được đề cập rõ ràng, nó có thể được triển khai trong máy khách SVN chứ không phải là một phần thực tế của kho lưu trữ, nó có thể chỉ là một số cờ trong bộ nhớ, nhưng đó là giai đoạn của SVN. Tôi đã không nhìn vào HG, nhưng tôi nghi ngờ nó cũng làm điều tương tự. Sự khác biệt với git là git thừa nhận rằng đó là một thứ, ghi lại vào đĩa và cho phép người dùng truy cập trực tiếp vào nó.
8bittree

7
Mũi tên thứ hai "tập tin giai đoạn" trong hình có thể gây hiểu nhầm. "hunk sân khấu" có thể chính xác hơn?
Ida

137

Vì mọi người cho đến nay đã trả lời nó theo cách "chính thức", hãy để tôi làm điều này với các lựa chọn thay thế để tăng cường học tập với sức mạnh của phép ẩn dụ.

Vì vậy, khu vực tổ chức là như sau:

  • bộ đệm của các tệp mà bạn muốn cam kết
  • không phải là một loạt các ống mà thực sự là một chiếc xe tải tự đổ, sẵn sàng để di chuyển công việc bạn tải nó vào, vào kho
  • một nơi kỳ diệu nơi các tệp được chọn sẽ biến thành đá với phù thủy của bạn và có thể được vận chuyển một cách kỳ diệu đến kho lưu trữ theo ý thích của bạn
  • con đường gạch màu vàng để các tập tin vui vẻ đi đến kho lưu trữ (hoặc rơi ra nếu bạn muốn hoàn nguyên)
  • địa điểm hư cấu ở cảng biển nơi các tập tin được nhận một đôi giày xi măng và sau đó ném vào biển kho
  • bàn tiếp tân tại thư viện, bạn đặt các tập tin ở đó cho thủ thư để chuẩn bị nộp vào thư viện
  • một hộp nơi bạn đặt đồ vào trước khi nhét nó xuống giường, trong đó giường của bạn là một kho chứa các hộp mà trước đây bạn đã nhét vào
  • khoang tải tập tin trước khi đi vào kho lưu trữ với bộ tải điện
  • bộ lọc của máy pha cà phê nhỏ giọt bằng điện, nếu các tệp giống như bột cà phê, thì các tệp đã cam kết là cà phê được pha
  • văn phòng của Scrooge McDuck bên cạnh kho tiền, các tập tin giống như những đồng tiền trước khi chúng đi vào kho tiền của Thùng tiền khổng lồ của mình
  • cửa hàng thú cưng, một khi bạn mang thú cưng về nhà, bạn đã cam kết

Thật kỳ diệu !


Yêu sự tương đồng; con đường để đi chồi ^ _ ^
Musa Al-hassy

Tình yêu tương tự cuối cùng.
meTchaikovsky

35

Dàn dựng là một bước trước khi quá trình cam kết trong git. Đó là, một cam kết trong git được thực hiện theo hai bước: cam kết và cam kết thực tế.

Miễn là một tập tin thay đổi nằm trong khu vực tổ chức, git cho phép bạn chỉnh sửa nó theo ý muốn (thay thế các tập tin theo giai đoạn bằng các phiên bản khác của tập tin dàn dựng, loại bỏ các thay đổi khỏi dàn dựng, v.v.).

Thời gian ẩn dụ bị hỏng:

Hãy xem xét một kịch bản trong đó bạn gọi các máy động lực để đưa đồ đạc của bạn từ khoang cũ sang khoang mới của bạn. Trước khi bạn làm điều đó, bạn sẽ đi qua công cụ của bạn, quyết định những gì bạn mang theo bên mình và những gì bạn vứt đi, đóng gói trong túi và để nó ở hành lang chính. Các máy động lực chỉ cần đến, lấy túi (đã được đóng gói) từ hành lang và vận chuyển chúng. Trong ví dụ này, mọi thứ cho đến khi máy động lực lấy đồ của bạn, đang dàn dựng: bạn quyết định đi đâu, đóng gói như thế nào (ví dụ: bạn có thể quyết định rằng một nửa đồ đạc của bạn sẽ bị vứt đi trước khi máy động lực đến đó - đó là một phần của dàn dựng).

Từ quan điểm kỹ thuật, dàn dựng cũng hỗ trợ các cam kết giao dịch, bằng cách chia tất cả các hoạt động thành những gì có thể thất bại (dàn dựng) và những gì không thể thất bại (cam kết):

Các cam kết trong git được thực hiện giao dịch, sau khi dàn dựng thành công. Một số bước trong việc dàn dựng có thể thất bại (ví dụ: bạn cần phải cam kết, nhưng ổ cứng của bạn đã đầy 99.9999% và git không có không gian để thực hiện cam kết). Điều này sẽ thất bại trong việc dàn dựng (kho lưu trữ của bạn sẽ không bị hỏng bởi một cam kết một phần) và quá trình dàn không ảnh hưởng đến lịch sử cam kết của bạn (nó không làm hỏng kho lưu trữ của bạn trong trường hợp có lỗi).


... và rất ít phiếu cho đến nay.
ojonugwa ochalifu 18/03/18

26

Để giai đoạn một tập tin là chuẩn bị nó cho một cam kết. Vì git hiển thị hành động này cho người dùng kiểm soát, nó cho phép bạn tạo các cam kết một phần hoặc sửa đổi tệp, xử lý nó, sửa đổi lại và chỉ cam kết hoặc hoàn nguyên về sửa đổi ban đầu.

Dàn dựng cho phép bạn kiểm soát tốt hơn chính xác cách bạn muốn tiếp cận kiểm soát phiên bản.


19

Để thêm vào các câu trả lời xuất sắc khác, đây là tên của "giai đoạn" xuất phát từ:

Tôi đã kiểm tra từ điển về ý nghĩa của giai đoạn và không có ý nghĩa nào liên quan đến các khái niệm kiểm soát nguồn.

Trong tiếng Anh, "đến giai đoạn" có nghĩa là

tổ chức và tham gia (một sự kiện công cộng): Những người ủng hộ UDF đã tổ chức một cuộc biểu tình ở Sofia

(từ http://oxforddictionaries.com/def định / stage )

Tên "dàn dựng" cho tính năng git xuất phát từ ý nghĩa này: Khi dàn dựng, bạn đang chuẩn bị và tổ chức một cam kết. Tất nhiên một cam kết không hoàn toàn giống như một hiệu suất, nhưng nó một sự kiện quan trọng trong một VCS :-).


3
Tôi đã nghĩ rằng nó phù hợp chặt chẽ hơn với việc sử dụng trong bài dàn dựng
Vô dụng

Như trên. Ngoài ra, "một điểm, giai đoạn hoặc bước trong một quá trình hoặc phát triển."
Darien

Ngoài ra, 'máy chủ dàn' là một thuật ngữ khá phổ biến được sử dụng để mô tả một máy chủ nằm giữa quá trình phát triển và sản xuất.
Eternal21

4

Với hầu hết các hệ thống kiểm soát phiên bản khác, có 2 nơi lưu trữ dữ liệu: bản sao làm việc của bạn (các thư mục / tệp bạn đang sử dụng) và kho dữ liệu (nơi kiểm soát phiên bản quyết định cách đóng gói và lưu trữ các thay đổi của bạn). Trong Git có một tùy chọn thứ ba: khu vực tổ chức (hoặc chỉ mục). Về cơ bản, đó là một bến tàu tải nơi bạn có thể xác định những thay đổi nào sẽ được chuyển đi.

nguồn: http : // git yet.com/beginner/2009/01/18/the-staging-area.html


1
điều này dường như không thêm bất cứ điều gì đáng kể vào 6 câu trả lời trước
gnat

Nó đề cập đến Index. Và tham khảo một bài viết rất kỹ lưỡng. Nâng cao. BTW, một số câu trả lời ở trên chỉ là trò đùa.
Gangnus

1

"Giai đoạn" là bước trung gian bắt buộc về mặt kỹ thuật trong quá trình kiểm tra tệp, cụ thể là thu thập các thay đổi sẽ được thêm vào kho lưu trữ. Các tác giả của Git đã chọn làm cho bước này hiển thị và bền bỉ trong đó các VCS khác làm cho nó trở thành một phần nhất thời của quy trình cam kết. Vì vậy, nó chỉ là một tùy chọn mà git cung cấp cho bạn bởi vì nó có thể tại sao không?

Theo cách tôi nhìn thấy, điều chính mà "giai đoạn" git mang đến cho bạn mà các VCS khác không có là bạn có thể sử dụng nó để kiểm tra một tệp. Đó thực sự là một cam kết cục bộ chưa được đặt tên, không có tên, cung cấp cho bạn một bước trung gian giữa việc được thực hiện với tất cả công việc của bạn và cam kết nó vào kho lưu trữ vĩnh viễn và không có gì được lưu trong repo cục bộ của bạn cả.

Ví dụ: giả sử bạn có một tính năng đã hoàn thành một phần. Nó ở trạng thái ổn định, vượt qua tất cả các bài kiểm tra và có thể đi vào sản xuất, nhưng bạn có nhiều việc phải làm hơn. Bạn có thể thực hiện tất cả các thay đổi của mình và sau đó tiếp tục làm việc với tính năng này.

Sau đó, bạn sẽ có tùy chọn chỉ cam kết những gì bạn đã dàn dựng (và đẩy cam kết đó vào kho lưu trữ từ xa) hoặc thêm các thay đổi mới vào khu vực tổ chức của bạn và sau đó cam kết tất cả cùng một lúc hoặc hoàn tác các thay đổi mới của bạn và hoàn nguyên thư mục làm việc của bạn về trạng thái khi bạn thực hiện các thay đổi của mình.

Hoàn toàn có thể bỏ qua khu vực tổ chức hoàn toàn và chỉ cần sử dụng -atùy chọn git commitnếu bạn không tìm thấy khu vực tổ chức một khái niệm hữu ích. Nhiều người bỏ qua việc dàn dựng và các công cụ GUI cũng thường cho phép điều này.


"Các VCS khác không" - điều gì khiến bạn nghĩ như vậy? Kệ tại Perforce dường như đang làm những gì bạn mô tả, và thậm chí với một vài tiếng chuông và còi bổ sung
gnat

1
@gnat vâng, tất nhiên nhiều VCS khác cung cấp cho bạn một cái gì đó như dàn dựng. Theo "các VCS khác", ý tôi là các VCS khác không có giai đoạn như git, vì đó là những gì OP đang đề cập.
Old Pro

Tôi thấy câu trả lời này tốt hơn rất nhiều so với tất cả những điều trên, vì đó là câu duy nhất làm rõ lý do tại sao Staging tồn tại (được yêu cầu về mặt kỹ thuật ), một lời giải thích về nguồn gốc của nó ( các tác giả của Git đã chọn làm cho bước này hiển thị và bền bỉ ), thêm vào những gì cá nhân tôi thấy là một định nghĩa tốt cho nó ( một cam kết địa phương trung gian, không tên, không ghi chú ). Tuy nhiên, tôi nghĩ rằng nó có thể được cải thiện bằng cách trích dẫn một nguồn cho tuyên bố về nguồn gốc của Giai đoạn và giải thích thêm một số lý do tại sao nó đòi hỏi về mặt kỹ thuật . @OldPro
alexlomba87

-1

Hiểu biết của tôi là, giả sử tôi đang phát triển tính năng đăng nhập và cần 5 bước liên tiếp để hoàn thành. Vì vậy, ở đây dàn dựng sẽ giúp bạn làm việc trên các bước như
được thực hiện với bước 1 giai đoạn đó.
thực hiện với bước 2, bây giờ bước 1 và bước 2 cả hai đều đúng giai đoạn.
làm rối với bước 3 không có vấn đề kiểm tra bước được dàn dựng mới nhất là bước 2
giống như cách bạn đã thực hiện với tất cả 5 bước có nghĩa là tính năng đã hoàn tất hiện thực hiện cam kết.


điều này dường như không thêm bất cứ điều gì đáng kể vào các điểm được thực hiện và giải thích trong 9 câu trả lời trước
gnat

vâng bạn đúng, tôi chỉ cố gắng giải thích đơn giản và ngọt ngào
palash140

Và những gì tôi cảm thấy muốn sử dụng khái niệm này trên thực tế tôi đã cố gắng giải thích điều đó
palash140

xem xét xem xét thảo luận ở đây: Câu trả lời TL; DR thứ hai có được chấp nhận không? (FWIW so với các câu trả lời trước, câu trả lời này không đơn giản và cũng không ngọt ngào với tôi)
gnat

cảm ơn ngài, tôi có một câu hỏi Tôi đã bắt gặp rất nhiều câu trả lời và hầu hết chúng đều quá phức tạp. Có những câu trả lời đúng nhưng khó tiêu hóa ngay lập tức, tôi tin rằng nếu bạn không thể giải thích bất cứ điều gì theo cách đơn giản thì bạn đã không học đúng cách hoặc không biết làm thế nào để dùng nó. Vì vậy, nó là xấu bây giờ để đặt tóm tắt hoặc cách đơn giản để trả lời ??
palash140
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.