Thuật ngữ sứ sứ có nghĩa là gì trong Git?


433

Thuật ngữ "sứ" thỉnh thoảng xuất hiện trong tài liệu Git. Nó có nghĩa là gì?

Câu trả lời:


515

"Sứ" là vật liệu mà từ đó nhà vệ sinh thường được làm (và đôi khi các đồ đạc khác như chậu rửa mặt). Điều này khác với "hệ thống ống nước" (đường ống và cống thực tế), nơi sứ cung cấp giao diện thân thiện hơn với hệ thống ống nước.

Git sử dụng thuật ngữ này tương tự, để tách các lệnh cấp thấp mà người dùng thường không cần sử dụng trực tiếp ("hệ thống ống nước") từ các lệnh cấp cao thân thiện hơn với người dùng ("sứ").


45
Tôi nghĩ rằng câu trả lời có ý nghĩa với tôi, nhưng một lần nữa, tôi cho rằng Linus là người đặt ra thuật ngữ này, vì vậy tôi có xu hướng điều chỉnh bộ não của mình trở nên trực tiếp và thô bỉ hơn một chút khi phân tích thế giới của anh ấy. :)
Nick Klauer

58
Làm cho bạn tự hỏi nếu Linus đang tưởng tượng các dòng phân tiềm năng mà hệ thống ống nước của anh ta sẽ được sử dụng để vận chuyển. Hệ thống nước cho mã nguồn mở là một công việc bẩn thỉu nhưng ai đó phải làm điều đó.
Evan Plaice

36
Và một vài người trong chúng ta cảm thấy rằng sứ git thực tế giống như một lớp sơn trên hệ thống ống nước.
hemflit

14
câu trả lời khác dưới đây vừa đúng hơn vừa hữu ích hơn
Charney Kaye

14
Có ai khác tìm thấy điều này hài hước?
Ben Wilde

446

Quan trọng hơn, thuật ngữ "sứ" áp dụng cho các lệnh cấp cao , với đầu ra:

  • có nghĩa là có thể đọc được bởi con người
  • không có nghĩa là được phân tích cú pháp
  • dễ bị thay đổi / tiến hóa

Đó là chìa khóa: nếu bạn script, bạn nên sử dụng nếu có thể các lệnh hệ thống ống nước , với đầu ra ổn định. Không phải lệnh sứ.

Tuy nhiên, bạn có thể sử dụng đầu ra của lệnh sứ có --porcelaintùy chọn trong tập lệnh (xem bên dưới), như:

git status --porcelain
git push --porcelain
git blame --porcelain

Mặc dù git bao gồm lớp sứ của riêng nó , các lệnh cấp thấp của nó đủ để hỗ trợ phát triển các đồ sứ thay thế.
Giao diện (đầu vào, đầu ra, tập hợp các tùy chọn và ngữ nghĩa) cho các lệnh cấp thấp này có nghĩa là ổn định hơn nhiều so với các lệnh cấp độ Sứ, bởi vì các lệnh này chủ yếu để sử dụng theo kịch bản .
Mặt khác, giao diện cho các lệnh Sứ có thể thay đổi để cải thiện trải nghiệm người dùng cuối.

Xem " Làm thế nào để tôi lập trình xác định nếu có những thay đổi không được cam kết? " Để làm ví dụ cho việc sử dụng các lệnh ống nước thay vì sứ.


Lưu ý: Một lệnh sứ có thể có một --porcelaintùy chọn.
Ví dụ : git status --porcelain, chỉ định một đầu ra có nghĩa là được phân tích cú pháp .

--porcelain

Đưa ra đầu ra ở định dạng dễ phân tích cú pháp cho các tập lệnh. Điều này tương tự với đầu ra ngắn, nhưng sẽ ổn định trên các phiên bản git và bất kể cấu hình người dùng. Xem bên dưới để biết chi tiết.

Các chủ đề được đề cập ở trên chi tiết:

Đây là lỗi của tôi, ở một mức độ nào đó.
Các "ngắn tình trạng" hình thức được ý nghĩa cho nhãn cầu của con người, và được thiết kế bởi Junio.
Một số người cũng muốn có một đầu ra trạng thái có thể tạo tập lệnh, vì vậy tôi đã gõ một " --porcelain" trên cùng định dạng để tắt các tính năng có thể định cấu hình như tên đường dẫn và tô màu tương đối, và đưa ra một lời hứa ngầm rằng chúng tôi sẽ không thay đổi thêm định dạng.
Ý tưởng là để ngăn chặn mọi người viết kịch bản xung quanh --short, bởi vì nó không bao giờ có ý định ổn định.
Vì vậy, yeah, trong khi --porcelainbản thân nó ổn định và có thể viết kịch bản, có lẽ nó không thân thiện nhất với các trình phân tích cú pháp. Các " -z --porcelain" định dạng là nhiều hơn như vậy, và tôi muốn giới thiệu nó cho bất cứ ai kịch bản xung quanh "git status"

Điều đó phản ánh nhu cầu, đối với người dùng git, sử dụng các lệnh sứ trong tập lệnh của họ!
Nhưng chỉ với đầu ra ổn định (với --porcelain)


Theo nhận xét của william-berg , điều tương tự cũng xảy ra git push!

--porcelain

Sản xuất đầu ra máy có thể đọc được.
Dòng trạng thái đầu ra cho mỗi ref sẽ được phân tách bằng tab và được gửi đến stdoutthay vì stderr.
Tên biểu tượng đầy đủ của các ref sẽ được đưa ra.


Như John Glassmyer đề xuất trong các ý kiến :

Có lẽ ý nghĩa của --porcelainở đây là "sản xuất đầu ra phù hợp để tiêu thụ bởi các tập lệnh sứ" .

Và điều đó có thể được hỗ trợ bởi trường hợp --porcelaingiới thiệu "tùy chọn" đầu tiên
(trước đó git status --porcelain, cam kết 6f15787, tháng 9 năm 2009, git 1.7.0 ,
trước đó git push --porcelain, cam kết năm 1965ff7, tháng 6 năm 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Hiển thị trong một định dạng được thiết kế cho tiêu thụ máy.

Cam kết b5c698d, tháng 10 năm 2006, git 1.4.4

Tùy chọn mới làm cho định dạng đầu ra gốc của lệnh phát ra đầu ra dễ dàng hơn để xử lý bằng sứ .


2
Tôi nhận thấy git pushcó một máy bất thường tương tự - có thể đọc được --porcelain.
william.berg

13
Có lẽ ý nghĩa của --porcelainở đây là "sản xuất đầu ra phù hợp để tiêu thụ bởi các tập lệnh sứ".
John Glassmyer

@JohnGlassmyer đó là một lời giải thích rất có khả năng thực sự. Xem câu trả lời đã được chỉnh sửa của tôi (ở cuối)
VonC

1
Ngoài ragit diff-tree --word-diff=porcelain
Nicholas Shanks

1
@PatrickSanan theo một nghĩa nào đó, vâng. Đầu ra của họ có thể được phân tích cú pháp đáng tin cậy với tùy chọn đó.
VonC

57

Tiền đúc và cách sử dụng thuật ngữ "sứ" trong git thực ra là của Mike Taht, trong khi nếu không thì mất một cuộc tranh cãi gay gắt với Linus Torvalds.

http://www.gelato.unsw.edu.au/archives/git/0504/0881.html

Trên thực tế, một trong những hy vọng của tôi là các SCM khác chỉ có thể sử dụng hệ thống ống nước git.
Nhưng sau đó tôi thực sự khuyên bạn nên sử dụng "git", chứ không phải " libgit". Tức là bạn lấy tất cả hệ thống ống nước như các chương trình thực sự, và thay vì cố gắng liên kết với các thói quen cá nhân, bạn sẽ kịch bản nó.

Nếu bạn không muốn nó, tôi sẽ không làm điều đó.
Vẫn có ý nghĩa để tách hệ thống ống nước từ sứ , mặc dù.


7
Hấp dẫn. +1. Câu trả lời của riêng tôi ở trên là từ việc sử dụng sản phẩm, nhưng liên kết của bạn tham chiếu những gì dường như là nguồn gốc của thuật ngữ đó.
VonC

21

Sứ là tên dễ thương cho các chương trình và bộ chương trình tùy thuộc vào git lõi, thể hiện quyền truy cập cao vào git lõi. Các sứ thể hiện nhiều giao diện SCM hơn là "hệ thống ống nước".

- Sứ , Git Wiki


7

Các lệnh sứ được thiết kế để tiêu thụ của con người, trái ngược với các lệnh có đầu ra dễ dàng cho máy tính phân tích cú pháp. git statussẽ là một ví dụ.


8
"Đồ sứ" ... "cho con người" ... Tôi có thể ăn thủy tinh . (chỉ đùa / chú ý ẩn dụ hỗn hợp cho bất cứ ai có thể dễ bị nhầm lẫn)
ajm475du

5
Lệnh sứ là dành cho tiêu dùng của con người, nhưng khi bạn sử dụng --porcelaintùy chọn, nó là dành cho tiêu thụ máy.
ThomasW

git status --porcelain: Cung cấp đầu ra ở định dạng dễ phân tích cú pháp cho các tập lệnh. (...) Nhưng sẽ vẫn ổn định trên các phiên bản Git và bất kể cấu hình người dùng.
tymtam

Cảm ơn các downvote. Có, git status --porcelaincó định dạng ổn định có thể được phân tích cú pháp, nhưng statusbản thân lệnh được thiết kế để hướng tới người dùng (ví dụ như trái ngược với git ls-files).
dahlbyk

7

Giải thích ngắn gọn và đơn giản

  • Có hai loại lệnh: "poreclain" và "ống nước".
  • " Sứ " lệnh không nên được dựa vào khi lập trình / kịch bản: bởi vì họ có khả năng thay đổi, và có nghĩa là cho con người không phải là máy.
  • Các lệnh " Hệ thống nước " nên được sử dụng để viết kịch bản, vì chúng ổn định hơn và ít có khả năng thay đổi.

Nhưng còn --porcelainlựa chọn khó hiểu thì sao !?

  • Nếu bạn muốn: (i) sử dụng lệnh sứ VÀ (ii) bạn muốn đảm bảo rằng đầu ra có thể được phân tích cú pháp một cách đáng tin cậy (hãy nhớ rằng, lệnh sứ chỉ dành cho con người và không phân tích cú pháp), sau đó bạn có thể thêm --porcelaintùy chọn và sau đó sử dụng đầu ra cho kịch bản. Về cơ bản các tác giả của git đang ngầm hứa sẽ không thay đổi bất cứ điều gì trong đó, bất cứ lúc nào sớm. Ví dụ: Tôi có thể sử dụng git status --porcelainvà sử dụng đầu ra cho kịch bản và điều đó sẽ hoàn toàn ổn.

Trường hợp sứ / hệ thống ống nước đến từ đâu?

  • Nếu tiếng Anh không phải là ngôn ngữ đầu tiên của bạn thì Greg Hewgill giải thích nó một cách hoàn hảo.
  • Để biết thêm chi tiết, hãy kiểm tra câu trả lời của VonC .

1
Điều gì về các tùy chọn - khó hiểu? Tôi giải quyết điều đó trong câu trả lời của mình: stackoverflow.com/a/6978402/6309
VonC

đã đồng ý! Tôi đã thêm một liên kết đến câu trả lời của bạn ở trên:For more detail, checkout VonC's answer.
BKSpurgeon

OK, ít nhất là sử dụng một tùy chọn có tên --porcelaintrên các lệnh "sứ" để đạt được chức năng "giả ống nước" pha trộn rất độc đáo với thiết kế UI chung của Git ...;)
Sz.

1
Tôi không hiểu tại sao tùy chọn này được gọi là "sứ". Toàn bộ lệnh đã là "sứ". Tùy chọn này phải được gọi --plumbing(vì bạn là thợ sửa ống nước lần này, không phải là người dùng "sứ" thông thường).
seeker_of_bacon

3

Câu trả lời của Greg Hewgill là chính xác. Lưu ý rằng có các loại sứ thay thế có sẵn cho Git, bao gồm Easy Git, yap, pyrite và vng. Mỗi mục đích là để làm cho Git dễ dàng hơn để tìm hiểu / sử dụng cho một số phần của cộng đồng. Liên kết đến tất cả các dự án này nằm trên trang Easy Git: http://people.gnome.org/~newren/eg/ .



1

Có hai ý nghĩa riêng biệt của sứ trong git.

Hai ý nghĩa này, trong khi nó có thể được tranh luận là không mâu thuẫn hoàn toàn, có thể xuất hiện mâu thuẫn.

A. Khái niệm (hệ thống ống nước vs sứ)

Sách Pro Git chính thức :

Nhưng vì Git ban đầu là một bộ công cụ cho một hệ thống kiểm soát phiên bản chứ không phải là một VCS hoàn toàn thân thiện với người dùng, nên nó có một số tiểu ban hoạt động ở mức độ thấp và được thiết kế để kết nối theo kiểu UNIX hoặc được gọi từ các tập lệnh. Các lệnh này thường được gọi là các lệnh điều chỉnh hệ thống ống nước của Git, trong khi các lệnh thân thiện hơn với người dùng được gọi là các lệnh của sứ sứ.

B. --porcelain/ =porcelaintùy chọn

Nhiều lệnh git đi kèm với một --porcelainlựa chọn mà dành cho kịch bản.

git status' tài liệu :

--porcelain[=<version>]

Đưa ra đầu ra ở định dạng dễ phân tích cú pháp cho các tập lệnh. Điều này tương tự với đầu ra ngắn, nhưng sẽ ổn định trên các phiên bản Git và bất kể cấu hình người dùng. Xem bên dưới để biết chi tiết.

git diff's tài liệu :

--word-diff[=<mode>]

sứ

      Sử dụng một định dạng dựa trên dòng đặc biệt dành cho tiêu thụ tập lệnh.

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.