คำว่า "เครื่องเคลือบ" ปรากฏเป็นครั้งคราวในเอกสาร Git มันหมายความว่าอะไร?
คำว่า "เครื่องเคลือบ" ปรากฏเป็นครั้งคราวในเอกสาร Git มันหมายความว่าอะไร?
คำตอบ:
"Porcelain" เป็นวัสดุที่ใช้ทำส้วม (และบางครั้งมีการติดตั้งอื่น ๆ เช่นอ่างล้างหน้า) นี่คือความแตกต่างจาก "ประปา" (ท่อและท่อระบายน้ำที่เกิดขึ้นจริง) ซึ่งพอร์ซเลนให้อินเตอร์เฟซที่ใช้งานง่ายมากขึ้นกับท่อประปา
Git ใช้คำศัพท์นี้ในการเปรียบเทียบเพื่อแยกคำสั่งระดับต่ำที่ผู้ใช้ไม่จำเป็นต้องใช้โดยตรง ("ประปา") จากคำสั่งระดับสูงที่เป็นมิตรกับผู้ใช้ ("พอร์ซเลน")
ที่สำคัญกว่านั้นคำว่า "เครื่องเคลือบ" ใช้กับคำสั่งระดับสูงที่มีเอาต์พุต:
นั่นคือกุญแจสำคัญ: หากคุณใช้สคริปต์คุณควรใช้คำสั่งการวางท่อที่เป็นไปได้ด้วยเอาต์พุตที่เสถียร ไม่ใช่คำสั่งเครื่องเคลือบ
อย่างไรก็ตามคุณสามารถใช้เอาต์พุตของคำสั่ง 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 ):
-p
--porcelain
แสดงในรูปแบบที่ออกแบบมาสำหรับการใช้งานเครื่อง
คอมมิท b5c698d, ตุลาคม 2549, git 1.4.4
ตัวเลือกใหม่ที่ทำให้รูปแบบการออกคำสั่งพื้นเมืองของการส่งออกปล่อยที่ง่ายต่อการจัดการโดยพอร์ซเลน
git push
--porcelain
--porcelain
ที่นี่คือ "ผลิตผลลัพธ์ที่เหมาะสมสำหรับการบริโภคโดยเครื่องลายคราม"
git diff-tree --word-diff=porcelain
การสร้างเหรียญและการใช้คำว่า "เครื่องเคลือบ" ในคอมไพล์เป็นจริงโดย Mike Taht ในขณะที่การสูญเสียการโต้เถียงอย่างรุนแรงกับ Linus Torvalds
http://www.gelato.unsw.edu.au/archives/git/0504/0881.html
ในความเป็นจริงหนึ่งในความหวังของฉันคือ SCM อื่น ๆ ก็สามารถใช้ระบบประปาคอมไพล์ได้
แต่ฉันขอแนะนำให้คุณใช้ "git" ด้วยตัวเองไม่ใช่ "libgit
" คือคุณใช้ระบบประปาทั้งหมดเป็นโปรแกรมจริงและแทนที่จะพยายามเชื่อมโยงกับกิจวัตรแต่ละรายการคุณจะเขียนสคริปต์มันหากคุณไม่ต้องการฉันจะไม่ทำ
ยังคงทำให้ความรู้สึกที่จะแยกประปาจากพอร์ซเลนแม้ว่า
พอร์ซเลนเป็นชื่อที่น่ารักสำหรับโปรแกรมและชุดโปรแกรมขึ้นอยู่กับ core git นำเสนอการเข้าถึงระดับสูงเพื่อ core git Porcelains เปิดเผยอินเตอร์เฟส SCM มากกว่า "การประปา"
คำสั่งเครื่องเคลือบถูกออกแบบมาเพื่อการบริโภคของมนุษย์ซึ่งต่างจากคำสั่งที่มีเอาต์พุตสำหรับคอมพิวเตอร์ในการแยกวิเคราะห์ git status
จะเป็นตัวอย่างหนึ่ง
--porcelain
ตัวเลือกมันจะใช้สำหรับการใช้เครื่อง
git status --porcelain
: ให้ผลลัพธ์ในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ (... ) แต่จะยังคงเสถียรในเวอร์ชัน Git และไม่คำนึงถึงการกำหนดค่าของผู้ใช้
git status --porcelain
มีรูปแบบที่เสถียรที่สามารถแยกวิเคราะห์ได้ แต่status
คำสั่งนั้นถูกออกแบบมาให้ผู้ใช้หันหน้าเข้าหากัน (ตัวอย่างเช่นgit ls-files
)
--porcelain
ตัวเลือกที่สับสน!?--porcelain
ตัวเลือกและจากนั้นใช้เอาต์พุตสำหรับการสร้างสคริปต์ โดยทั่วไปผู้เขียน git มีแนวโน้มโดยปริยายว่าจะไม่เปลี่ยนแปลงสิ่งใด ๆ ในนั้นตลอดเวลาในไม่ช้า ตัวอย่าง: ฉันอาจใช้git status --porcelain
และใช้เอาต์พุตสำหรับการเขียนสคริปต์และนั่นก็โอเคอย่างสมบูรณ์For more detail, checkout VonC's answer.
--porcelain
ไว้บนคำสั่ง "Porcelain" แล้วเพื่อให้ได้ฟังก์ชัน "pseudo-plumbing" อย่างลงตัวกับการออกแบบ UI ทั่วไปของ Git ... ;)
--plumbing
(เนื่องจากคุณเป็นช่างประปาในเวลานี้ไม่ใช่ผู้ใช้ "เครื่องเคลือบ" ทั่วไป)
พอร์ซเลนเป็นชื่อที่น่ารักสำหรับโปรแกรมและชุดโปรแกรมขึ้นอยู่กับ core git นำเสนอการเข้าถึงระดับสูงเพื่อ core git
มีความหมายที่แตกต่างกันสองประการของพอร์ซเลนในคอมไพล์
ความหมายทั้งสองนี้ในขณะที่สามารถโต้เถียงไม่ขัดแย้งอย่างเคร่งครัดสามารถปรากฏขัดแย้ง
หนังสือ Pro Gitอย่างเป็นทางการ:
แต่เนื่องจาก Git นั้นเป็นชุดเครื่องมือสำหรับระบบควบคุมเวอร์ชันแทนที่จะเป็น VCS ที่ใช้งานง่ายผู้ใช้จึงมีคำสั่งย่อยจำนวนมากที่ทำงานในระดับต่ำและได้รับการออกแบบให้เชื่อมโยงกันในรูปแบบ UNIX หรือเรียกจากสคริปต์ โดยทั่วไปคำสั่งเหล่านี้จะเรียกว่าคำสั่ง“ การประปา” ของ Git ในขณะที่คำสั่งที่ใช้งานง่ายกว่านั้นจะเรียกว่าคำสั่ง“ Porcelain”
--porcelain
/ =porcelain
ตัวเลือกคำสั่ง git จำนวนมากมาพร้อมกับ--porcelain
ตัวเลือกที่มีความหมายสำหรับการเขียนสคริปต์
git status
เอกสาร ' :
--porcelain[=<version>]
ให้เอาต์พุตในรูปแบบที่ง่ายต่อการแยกวิเคราะห์สำหรับสคริปต์ สิ่งนี้คล้ายกับเอาต์พุตสั้น ๆ แต่จะยังคงเสถียรในเวอร์ชัน Git และไม่ว่าผู้ใช้จะกำหนดค่าแบบใด ดูรายละเอียดด้านล่าง
git diff
's เอกสาร :
--word-diff[=<mode>]
เครื่องลายคราม
ใช้รูปแบบตามบรรทัดพิเศษสำหรับการใช้งานสคริปต์