คำว่า "เครื่องเคลือบ" หมายถึงอะไรใน Git


434

คำว่า "เครื่องเคลือบ" ปรากฏเป็นครั้งคราวในเอกสาร Git มันหมายความว่าอะไร?

คำตอบ:


515

"Porcelain" เป็นวัสดุที่ใช้ทำส้วม (และบางครั้งมีการติดตั้งอื่น ๆ เช่นอ่างล้างหน้า) นี่คือความแตกต่างจาก "ประปา" (ท่อและท่อระบายน้ำที่เกิดขึ้นจริง) ซึ่งพอร์ซเลนให้อินเตอร์เฟซที่ใช้งานง่ายมากขึ้นกับท่อประปา

Git ใช้คำศัพท์นี้ในการเปรียบเทียบเพื่อแยกคำสั่งระดับต่ำที่ผู้ใช้ไม่จำเป็นต้องใช้โดยตรง ("ประปา") จากคำสั่งระดับสูงที่เป็นมิตรกับผู้ใช้ ("พอร์ซเลน")


45
ฉันคิดว่าคำตอบนั้นสมเหตุสมผลสำหรับฉัน แต่แล้วอีกครั้งฉันคิดว่า Linus เป็นคำศัพท์ที่ประกาศเกียรติคุณดังนั้นฉันจึงมักจะปรับสมองของฉันให้ตรงและหยาบคายมากขึ้นเมื่อแยกวิเคราะห์โลกของเขา :)
Nick Klauer

58
ทำให้คุณสงสัยว่าไลนัสจินตนาการถึงศักยภาพของการขับถ่ายของเขาที่ใช้ในการขนส่งหรือไม่ การวางท่อประปาสำหรับโอเพนซอร์สนั้นเป็นงานที่สกปรก แต่มีคนทำเช่นนั้น
Evan Plaice

36
และพวกเราสองสามคนรู้สึกว่าพอร์ซเลน git ที่เกิดขึ้นจริงนั้นเป็นเหมือนสีทับทับท่อประปา
hemflit

14
คำตอบอื่น ๆ ด้านล่างมีทั้งจริงและมีประโยชน์มากขึ้น
Charney Kaye

14
ไม่มีใครพบว่าตลกนี้หรือไม่
Ben Wilde

446

ที่สำคัญกว่านั้นคำว่า "เครื่องเคลือบ" ใช้กับคำสั่งระดับสูงที่มีเอาต์พุต:

  • หมายถึงมนุษย์สามารถอ่านได้
  • ไม่ได้หมายถึงการแยกวิเคราะห์
  • ไวต่อการเปลี่ยนแปลง / วิวัฒนาการ

นั่นคือกุญแจสำคัญ: หากคุณใช้สคริปต์คุณควรใช้คำสั่งการวางท่อที่เป็นไปได้ด้วยเอาต์พุตที่เสถียร ไม่ใช่คำสั่งเครื่องเคลือบ

อย่างไรก็ตามคุณสามารถใช้เอาต์พุตของคำสั่ง Porcelain ซึ่งมี--porcelainตัวเลือกในสคริปต์ (ดูด้านล่าง) เช่น:

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

แม้ว่าคอมไพล์จะมีเลเยอร์พอร์ซเลนของตัวเองแต่คำสั่งระดับต่ำก็เพียงพอที่จะรองรับการพัฒนาพอร์ซเลนทางเลือก
อินเตอร์เฟซ (นำเข้าส่งออกชุดของตัวเลือกและความหมาย) เพื่อเหล่านี้คำสั่งในระดับต่ำจะหมายถึงการมีเสถียรภาพมากขึ้นกว่าคำสั่งระดับพอร์ซเลนเพราะคำสั่งเหล่านี้เป็นหลักสำหรับการใช้งานสคริปต์
อินเทอร์เฟซสำหรับคำสั่ง Porcelain ในทางกลับกันอาจมีการเปลี่ยนแปลงเพื่อปรับปรุงประสบการณ์ของผู้ใช้

โปรดดูที่ " ฉันจะทราบได้อย่างไรว่าโปรแกรมมีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดทางโปรแกรมหรือไม่ " เป็นตัวอย่างของการใช้คำสั่งการวางท่อประปาแทนที่จะเป็นชุดลายคราม


หมายเหตุ: คำสั่ง Porcelain สามารถมี--porcelainตัวเลือกได้
ยกตัวอย่างเช่น: git status --porcelainซึ่งกำหนดเอาท์พุทหมายถึงการแยกวิเคราะห์

--porcelain

ให้เอาต์พุตในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ สิ่งนี้คล้ายกับเอาต์พุตแบบสั้น แต่จะยังคงมีเสถียรภาพในเวอร์ชัน git และไม่ว่าผู้ใช้จะกำหนดค่าแบบใด ดูรายละเอียดด้านล่าง

ด้ายกล่าวถึงรายละเอียดข้างต้น:

นี่เป็นความผิดของฉันในระดับหนึ่ง
แบบฟอร์ม "สถานะสั้น" มีไว้สำหรับดวงตาของมนุษย์และถูกออกแบบโดยจูนิโอ
บางคนต้องการเอาท์พุทสถานะสคริปต์ได้ดังนั้นฉันจึงตบ " --porcelain" ในรูปแบบเดียวกันซึ่งปิดคุณลักษณะที่กำหนดค่าได้เช่นชื่อพา ธ สัมพัทธ์และการกำหนดสีและทำสัญญาโดยปริยายว่าเราจะไม่เปลี่ยนแปลงรูปแบบเพิ่มเติม
ความคิดคือการป้องกันผู้คนจากการเขียนสคริปต์รอบ--shortเพราะมันไม่เคยตั้งใจที่จะมีเสถียรภาพ
ดังนั้นใช่ในขณะที่--porcelainตัวเองมีเสถียรภาพและสคริปต์อาจจะไม่เป็นมิตรกับ parsers "การ-z --porcelain" รูปแบบมากขึ้นเช่นนั้นและฉันอยากจะแนะนำให้ทุกคนเขียนสคริปต์รอบ "คอมไพล์สถานะ"

ที่สะท้อนถึงความต้องการสำหรับผู้ใช้คอมไพล์ในการใช้คำสั่งเครื่องเคลือบในสคริปต์ของพวกเขา!
แต่มีเอาต์พุตที่เสถียร (พร้อม--porcelain)


ตามที่แสดงความคิดเห็นโดยwilliam-bergสิ่งเดียวกันก็เป็นเช่นนั้นgit push!

--porcelain

สร้างเอาต์พุตที่เครื่องอ่านได้
บรรทัดสถานะการส่งออกสำหรับแต่ละเตะจะคั่นด้วยแท็บและส่งไปยังแทนstdout ชื่อสัญลักษณ์เต็มของผู้อ้างอิงจะได้รับstderr


ตามที่John Glassmyerเสนอในความคิดเห็น :

บางทีอาจจะเป็นความหมายของ--porcelainที่นี่คือ "การผลิตการส่งออกที่เหมาะสมสำหรับการบริโภคโดยสคริปต์พอร์ซเลน"

และนั่นอาจได้รับการสนับสนุนโดยการ--porcelainแนะนำตัวเลือก "แรก"
(ก่อนหน้าgit status --porcelainคอมมิชชัน 6f15787, กันยายน 2552, git 1.7.0 ,
ก่อนหน้าgit push --porcelain, คอมมิท 1965ff7, มิถุนายน 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

แสดงในรูปแบบที่ออกแบบมาสำหรับการใช้งานเครื่อง

คอมมิท b5c698d, ตุลาคม 2549, git 1.4.4

ตัวเลือกใหม่ที่ทำให้รูปแบบการออกคำสั่งพื้นเมืองของการส่งออกปล่อยที่ง่ายต่อการจัดการโดยพอร์ซเลน


2
แจ้งให้ทราบผมมีความผิดปกติในทำนองเดียวกันเครื่องสามารถอ่านได้git push --porcelain
william.berg

13
บางทีความหมายของ--porcelainที่นี่คือ "ผลิตผลลัพธ์ที่เหมาะสมสำหรับการบริโภคโดยเครื่องลายคราม"
John Glassmyer

@ JohnGlassmyer มันเป็นคำอธิบายที่น่าจะเป็นไปได้มาก ดูคำตอบที่แก้ไขของฉัน (ในตอนท้าย)
VonC

1
นอกจากนี้git diff-tree --word-diff=porcelain
นิโคลัสพระสาทิสลักษณ์

1
@ PatrickSanan ในความรู้สึกใช่ เอาต์พุตของพวกเขาสามารถแยกวิเคราะห์ได้อย่างน่าเชื่อถือด้วยตัวเลือกนั้น
VonC

57

การสร้างเหรียญและการใช้คำว่า "เครื่องเคลือบ" ในคอมไพล์เป็นจริงโดย Mike Taht ในขณะที่การสูญเสียการโต้เถียงอย่างรุนแรงกับ Linus Torvalds

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

ในความเป็นจริงหนึ่งในความหวังของฉันคือ SCM อื่น ๆ ก็สามารถใช้ระบบประปาคอมไพล์ได้
แต่ฉันขอแนะนำให้คุณใช้ "git" ด้วยตัวเองไม่ใช่ " libgit" คือคุณใช้ระบบประปาทั้งหมดเป็นโปรแกรมจริงและแทนที่จะพยายามเชื่อมโยงกับกิจวัตรแต่ละรายการคุณจะเขียนสคริปต์มัน

หากคุณไม่ต้องการฉันจะไม่ทำ
ยังคงทำให้ความรู้สึกที่จะแยกประปาจากพอร์ซเลนแม้ว่า


7
น่าสนใจ +1 คำตอบของฉันเองข้างต้นมาจากการใช้ผลิตภัณฑ์ แต่ลิงก์ของคุณอ้างถึงสิ่งที่ดูเหมือนจะเป็นที่มาของคำนั้น
VonC

21

พอร์ซเลนเป็นชื่อที่น่ารักสำหรับโปรแกรมและชุดโปรแกรมขึ้นอยู่กับ core git นำเสนอการเข้าถึงระดับสูงเพื่อ core git Porcelains เปิดเผยอินเตอร์เฟส SCM มากกว่า "การประปา"

- Porcelain , Git Wiki


7

คำสั่งเครื่องเคลือบถูกออกแบบมาเพื่อการบริโภคของมนุษย์ซึ่งต่างจากคำสั่งที่มีเอาต์พุตสำหรับคอมพิวเตอร์ในการแยกวิเคราะห์ git statusจะเป็นตัวอย่างหนึ่ง


8
"Porcelain" ... "เพื่อการบริโภคของมนุษย์" ... ฉันกินแก้วได้ (เพียงล้อเล่น / สังเกตคำอุปมาผสมสำหรับใครก็ตามที่อาจจะสับสนได้ง่าย)
ajm475du

5
คำสั่งเครื่องเคลือบดินเผามีไว้สำหรับการบริโภคของมนุษย์ แต่เมื่อคุณใช้--porcelainตัวเลือกมันจะใช้สำหรับการใช้เครื่อง
ThomasW

git status --porcelain: ให้ผลลัพธ์ในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ (... ) แต่จะยังคงเสถียรในเวอร์ชัน Git และไม่คำนึงถึงการกำหนดค่าของผู้ใช้
tymtam

ขอบคุณสำหรับ downvote 🙄ใช่git status --porcelainมีรูปแบบที่เสถียรที่สามารถแยกวิเคราะห์ได้ แต่statusคำสั่งนั้นถูกออกแบบมาให้ผู้ใช้หันหน้าเข้าหากัน (ตัวอย่างเช่นgit ls-files)
dahlbyk

7

คำอธิบายสั้นและง่าย

  • คำสั่งมีสองประเภท: "poreclain" และ "plumbing"
  • " พอร์ซเลน " คำสั่งที่ไม่ควรจะเป็นที่พึ่งเมื่อเขียนโปรแกรม / สคริปต์: เพราะพวกเขามีแนวโน้มที่จะเปลี่ยนแปลงและมีความหมายสำหรับมนุษย์ไม่ได้เครื่อง
  • " ท่อ " คำสั่งควรจะใช้สำหรับการเขียนสคริปต์เพราะพวกเขามีความเสถียรมากขึ้นและมีโอกาสน้อยที่จะมีการเปลี่ยนแปลง

แต่สิ่งที่เกี่ยวกับ--porcelainตัวเลือกที่สับสน!?

  • หากคุณต้องการที่จะ: (i) ใช้คำสั่งพอร์ซเลนและ (ii) คุณต้องการเพื่อให้มั่นใจว่าการส่งออกสามารถเชื่อถือได้สามารถแยกวิเคราะห์ (จำคำสั่งพอร์ซเลนมีความหมายสำหรับมนุษย์เท่านั้นและไม่แยก) แล้วคุณสามารถเพิ่ม--porcelainตัวเลือกและจากนั้นใช้เอาต์พุตสำหรับการสร้างสคริปต์ โดยทั่วไปผู้เขียน git มีแนวโน้มโดยปริยายว่าจะไม่เปลี่ยนแปลงสิ่งใด ๆ ในนั้นตลอดเวลาในไม่ช้า ตัวอย่าง: ฉันอาจใช้git status --porcelainและใช้เอาต์พุตสำหรับการเขียนสคริปต์และนั่นก็โอเคอย่างสมบูรณ์

คำศัพท์เครื่องเคลือบ / ประปามาจากไหน

  • หากภาษาอังกฤษไม่ใช่ภาษาแรกของคุณGreg Hewgillอธิบายอย่างสมบูรณ์
  • สำหรับรายละเอียดเพิ่มเติมให้ชำระเงินคำตอบของ VonC

1
สิ่งที่เกี่ยวกับตัวเลือก - ปอร์ซเลนสับสน? ฉันพูดถึงเรื่องนี้ในคำตอบของฉัน: stackoverflow.com/a/6978402/6309
VonC

ตกลงกัน! ฉันได้เพิ่มลิงก์ไปยังคำตอบที่ดีของคุณด้านบน:For more detail, checkout VonC's answer.
BKSpurgeon

ตกลงอย่างน้อยก็ใช้ตัวเลือกที่ตั้งชื่อ--porcelainไว้บนคำสั่ง "Porcelain" แล้วเพื่อให้ได้ฟังก์ชัน "pseudo-plumbing" อย่างลงตัวกับการออกแบบ UI ทั่วไปของ Git ... ;)
Sz

1
ฉันไม่เข้าใจว่าทำไมตัวเลือกนี้เรียกว่า "เครื่องเคลือบ" คำสั่งทั้งหมดเป็น "เครื่องเคลือบ" แล้ว ควรเรียกตัวเลือกนี้--plumbing(เนื่องจากคุณเป็นช่างประปาในเวลานี้ไม่ใช่ผู้ใช้ "เครื่องเคลือบ" ทั่วไป)
seeker_of_bacon

3

คำตอบของ Greg Hewgill นั้นถูกต้องอย่างแน่นอน โปรดทราบว่ามี porcelains สำรองสำหรับ Git รวมถึง Easy Git, yap, pyrite และ vng แต่ละจุดมุ่งหมายเพื่อให้ Git ง่ายต่อการเรียนรู้ / ใช้สำหรับบางส่วนของชุมชน เชื่อมโยงไปยังทุกโครงการเหล่านี้บนหน้าง่าย Git: http://people.gnome.org/~newren/eg/



1

มีความหมายที่แตกต่างกันสองประการของพอร์ซเลนในคอมไพล์

ความหมายทั้งสองนี้ในขณะที่สามารถโต้เถียงไม่ขัดแย้งอย่างเคร่งครัดสามารถปรากฏขัดแย้ง

A. แนวคิด (การประปาและเครื่องเคลือบ)

หนังสือ Pro Gitอย่างเป็นทางการ:

แต่เนื่องจาก Git นั้นเป็นชุดเครื่องมือสำหรับระบบควบคุมเวอร์ชันแทนที่จะเป็น VCS ที่ใช้งานง่ายผู้ใช้จึงมีคำสั่งย่อยจำนวนมากที่ทำงานในระดับต่ำและได้รับการออกแบบให้เชื่อมโยงกันในรูปแบบ UNIX หรือเรียกจากสคริปต์ โดยทั่วไปคำสั่งเหล่านี้จะเรียกว่าคำสั่ง“ การประปา” ของ Git ในขณะที่คำสั่งที่ใช้งานง่ายกว่านั้นจะเรียกว่าคำสั่ง“ Porcelain”

B. --porcelain/ =porcelainตัวเลือก

คำสั่ง git จำนวนมากมาพร้อมกับ--porcelainตัวเลือกที่มีความหมายสำหรับการเขียนสคริปต์

git statusเอกสาร ' :

--porcelain[=<version>]

ให้เอาต์พุตในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ สิ่งนี้คล้ายกับเอาต์พุตสั้น ๆ แต่จะยังคงเสถียรในเวอร์ชัน Git และไม่ว่าผู้ใช้จะกำหนดค่าแบบใด ดูรายละเอียดด้านล่าง

git diff's เอกสาร :

--word-diff[=<mode>]

เครื่องลายคราม

      ใช้รูปแบบตามบรรทัดพิเศษสำหรับการใช้งานสคริปต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.