'เวที' หมายถึงอะไรใน git?


315

ฉันพบว่ายากที่จะเข้าใจเพราะฉันไม่สามารถหาความหมายของคำที่ใช้สำหรับการกระทำได้ ฉันตรวจสอบพจนานุกรมสำหรับความหมายของ 'ระยะ' และไม่มีความหมายใดที่เกี่ยวข้องกับแนวคิดการควบคุมแหล่งที่มา

'ระยะ' หมายถึงอะไรในบริบทของคอมไพล์?



11
Git มีคำศัพท์ของตัวเองแน่นอน และเนื่องจากการเรียนการสอนทุกครั้งได้รับการกำหนดในคำศัพท์พิเศษจึงเป็นการยากที่จะเริ่มต้น ถึง "เวที" คือการทำgit add file.extไฟล์เฉพาะหรือgit add .ส่งผลกระทบต่อไฟล์ที่แก้ไขและไม่ได้ติดตามทั้งหมด ไฟล์ที่เพิ่มเข้ามาด้วยวิธีนี้ถูกกล่าวว่าเป็น "ฉาก" และไฟล์เหล่านั้นจะถูกรวมไว้ใน "ส่งมอบ" ครั้งต่อไป git commit -m "I wrote something"กระทำเป็นภาพรวมของการทำงานของคุณสร้างขึ้นเช่นกับ
Jonatan Öström

11
Git นั้นยากที่จะเข้าใจเพราะไม่มีการสอนตามแนวคิดที่นั่น ทั้งหมดผ่านรายละเอียดที่ไม่จำเป็น
Xaqron

2
คุณต้องการลบแท็ก "คำศัพท์" ออกจากคำถามนี้หรือไม่ ดูเหมือนว่าแท็กที่ถูกต้องสมบูรณ์แบบสำหรับฉัน
Philip Kendall

ด้วยเหตุผลบางอย่างวิธีที่ดีที่สุดที่ฉันสามารถเข้าใจถึงความสำคัญของการจัดเตรียมนั้นมาจากคำตอบใน Quora: qr.ae/TbSK2I
Lamar

คำตอบ:


310

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


5
คำอธิบายที่ดี โปรดทราบว่ามีการเผยแพร่คอมไพล์ให้เห็นได้ชัดว่าคุณสามารถยอมรับคุณสมบัติทั้งสองได้เนื่องจากการคอมมิทเป็นแบบโลคอล (ตอนแรก) ถึงกระนั้นคุณอาจต้องการแบ่งการแก้ไขออกเป็นหนึ่งการกระทำต่อหนึ่งคุณลักษณะและการจัดเตรียมอีกครั้งมีประโยชน์
sleske

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

78
@jiggy git อนุญาตให้คุณแบ่งส่วนของไฟล์ คุณยังสามารถจัดวางไฟล์ทำการแก้ไขเพิ่มเติมจากนั้นทำการยอมรับสถานะที่อยู่ในการจัดเตรียม คุณไม่สามารถทำเช่นนั้นได้ในการโค่นล้ม
Izkata

4
@jiggy ใน SVN มีบางสิ่งระหว่างที่คุณเลือกไฟล์ / ส่วนของไฟล์ที่จะคอมมิทและเมื่อคุณเขียนข้อความคอมมิทเสร็จสิ้นคุณจะบันทึกไฟล์ / ส่วนที่คุณเลือกที่จะคอมมิท มันอาจไม่ถูกกล่าวถึงอย่างชัดเจนมันอาจถูกนำไปใช้ในไคลเอนต์ SVN แทนที่จะเป็นส่วนหนึ่งของที่เก็บจริงมันอาจเป็นเพียงบางส่วนในหน่วยความจำ แต่นั่นคือขั้นตอนของ SVN ฉันไม่ได้ดูที่ HG แต่ฉันคิดว่ามันจะทำแบบเดียวกัน ความแตกต่างกับคอมไพล์คือคอมไพล์ยอมรับว่าเป็นสิ่งบันทึกลงดิสก์และให้ผู้ใช้เข้าถึงได้โดยตรง
8bittree

7
ลูกศรที่สอง "ไฟล์สเตจ" ในรูปภาพอาจทำให้เข้าใจผิด "นักล่าเวที" อาจจะแม่นยำมากกว่านี้หรือ
Ida

137

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

ดังนั้นการจัดเตรียมเป็นดังนี้:

  • แคชของไฟล์ที่คุณต้องการคอมมิท
  • ไม่ใช่ชุดของหลอด แต่จริง ๆ แล้วเป็นรถดัมพ์พร้อมที่จะย้ายงานที่คุณโหลดไปไว้ในที่เก็บ
  • สถานที่มหัศจรรย์ที่ไฟล์ที่เลือกจะกลายเป็นหินด้วยพ่อมดแม่มดของคุณและสามารถส่งไปยังพื้นที่เก็บข้อมูลได้อย่างน่าอัศจรรย์
  • ถนนอิฐสีเหลืองสำหรับให้ไฟล์ไปยังที่เก็บอย่างมีความสุข (หรือหลุดหากคุณต้องการเปลี่ยนกลับ)
  • สถานที่ที่สวมอยู่ที่ท่าเรือทะเลที่มีไฟล์รับรองเท้าซีเมนต์และโยนลงไปในทะเลที่เก็บ
  • โต๊ะแผนกต้อนรับที่ห้องสมุดคุณวางไฟล์ไว้ที่นั่นเพื่อบรรณารักษ์เพื่อเตรียมความพร้อมสำหรับการยื่นเข้าไปในห้องสมุด
  • กล่องที่คุณใส่สิ่งต่าง ๆ ก่อนที่จะผลักมันเข้าไปใต้เตียงของคุณที่ซึ่งเตียงของคุณเป็นที่เก็บกล่องที่คุณเคยใส่เข้าไป
  • เบย์การโหลดไฟล์ก่อนที่จะเข้าสู่คลังเก็บด้วยตัวโหลดไฟ
  • ตัวกรองของเครื่องชงกาแฟแบบหยดไฟฟ้าหากไฟล์เป็นเหมือนผงกาแฟแล้วไฟล์ที่กำหนดจะเป็นกาแฟที่ชง
  • ห้องทำงานของ Scrooge McDuck ถัดจากห้องเก็บของเป็นไฟล์เหมือนเหรียญก่อนที่พวกเขาจะเข้าไปในหลุมฝังศพของ Money Bin ขนาดใหญ่ของเขา
  • ร้านขายสัตว์เลี้ยงเมื่อคุณนำบ้านสัตว์เลี้ยงที่คุณมุ่งมั่น

มันวิเศษมาก !


รักความคล้ายคลึง วิธีไปหน่อ ^ _ ^
Musa Al-hassy

รักการเปรียบเทียบครั้งสุดท้าย
meTchaikovsky

35

การจัดเตรียมเป็นขั้นตอนก่อนกระบวนการคอมมิตในคอมไพล์ นั่นคือการคอมมิตในคอมไพล์จะดำเนินการในสองขั้นตอน: การจัดเตรียมและการส่งจริง

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

เวลาอุปมาแตก:

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

จากมุมมองทางเทคนิคการจัดเตรียมยังสนับสนุนการทำธุรกรรมโดยแบ่งการดำเนินการทั้งหมดเป็นสิ่งที่สามารถล้มเหลว (การจัดเตรียม) และสิ่งที่ไม่สามารถล้มเหลว (ส่ง):

คอมมิทกระทำใน git ถูกนำมาใช้ธุรกรรมหลังจาก staging เป็น sucessfull หลายขั้นตอนในการจัดเตรียมอาจล้มเหลว (ตัวอย่างเช่นคุณต้องส่งมอบ แต่ HDD ของคุณเต็ม 99.9999% และ git ไม่มีที่ว่างสำหรับการส่งมอบ) สิ่งนี้จะล้มเหลวในการจัดเตรียม (ที่เก็บข้อมูลของคุณจะไม่ได้รับความเสียหายจากการกระทำบางส่วน) และกระบวนการจัดเตรียมจะไม่ส่งผลกระทบต่อประวัติการส่งมอบของคุณ (จะไม่ทำให้ที่เก็บของคุณเสียหายในกรณีที่เกิดข้อผิดพลาด)


... และคะแนนน้อยมาก
ojonugwa ochalifu

26

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

การแสดงละครจะช่วยให้คุณสามารถควบคุมปลีกย่อยมากกว่าว่าวิธีการที่คุณต้องการที่จะเข้าใกล้การควบคุมเวอร์ชัน


19

เพื่อเพิ่มคำตอบที่ยอดเยี่ยมอื่น ๆ นี่คือที่มาของชื่อ "เวที" มาจาก:

ฉันตรวจสอบพจนานุกรมสำหรับความหมายของสเตจและไม่มีความหมายใดที่เกี่ยวข้องกับแนวคิดการควบคุมแหล่งที่มา

ในภาษาอังกฤษ "ถึงเวที" อาจหมายถึง

จัดระเบียบและเข้าร่วมใน (กิจกรรมสาธารณะ): ผู้สนับสนุน UDF จัดสาธิตในโซเฟีย

(จากhttp://oxforddictionaries.com/definition/stage )

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


3
ฉันคิดว่ามันใกล้เคียงกับการใช้งานในการแสดงละคร
ไม่มีประโยชน์

เหมือนกัน นอกจากนี้ "จุดระยะเวลาหรือขั้นตอนในกระบวนการหรือการพัฒนา"
Darien

นอกจากนี้ 'เซิร์ฟเวอร์จัดเตรียม' ยังเป็นคำศัพท์ที่ใช้ในการอธิบายเซิร์ฟเวอร์ที่อยู่ระหว่างการพัฒนาและใช้งานจริง
Eternal21

4

ด้วยระบบควบคุมเวอร์ชันอื่น ๆ ส่วนใหญ่มีสถานที่ 2 แห่งสำหรับเก็บข้อมูล: สำเนาการทำงานของคุณ (โฟลเดอร์ / ไฟล์ที่คุณใช้งานอยู่) และที่เก็บข้อมูล (ที่ตัวควบคุมเวอร์ชันตัดสินใจว่าจะแพ็คและเก็บการเปลี่ยนแปลงของคุณ) ใน Git มีตัวเลือกที่สาม: พื้นที่การแสดงละคร (หรือดัชนี) โดยทั่วไปจะเป็นแท่นวางสินค้าที่คุณจะได้รับทราบว่าการเปลี่ยนแปลงใดบ้างที่ถูกส่งไป

แหล่งที่มา: http://gitready.com/beginner/2009/01/18/the-staging-area.html


1
นี้ดูเหมือนจะไม่เพิ่มอะไรที่สำคัญกว่าก่อน 6 คำตอบ
ริ้น

มันกล่าวถึงดัชนี และการอ้างอิงถึงบทความที่ละเอียดมาก Upvoting BTW คำตอบบางอย่างข้างต้นเป็นเพียงเรื่องตลก
Gangnus

1

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

วิธีที่ฉันเห็นมันสิ่งสำคัญที่ git "stage" ให้คุณนั้น VCS อื่นไม่ทำคือคุณสามารถใช้จุดตรวจสอบไฟล์ได้ มันมีประสิทธิภาพการคอมมิทที่ไม่มีชื่อและไม่มีคอมเมนต์ที่จะช่วยให้คุณมีขั้นตอนกลางระหว่างการทำงานกับงานทั้งหมดของคุณและส่งไปยังพื้นที่เก็บข้อมูลอย่างถาวรและไม่มีอะไรช่วยให้คุณประหยัดใน repo ท้องถิ่น

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

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

เป็นไปได้อย่างสมบูรณ์ที่จะข้ามพื้นที่การแสดงจริงไปโดยสิ้นเชิงและใช้-aตัวเลือกgit commitหากคุณไม่พบแนวคิดที่เป็นประโยชน์ ผู้คนจำนวนมากข้ามการแสดงละครและเครื่องมือ GUI มักจะอนุญาตให้ทำเช่นนี้เช่นกัน


"VCS อื่นไม่ทำ" - อะไรทำให้คุณคิดอย่างนั้น Shelving at Perforce ดูเหมือนจะทำในสิ่งที่คุณอธิบายและแม้จะมีระฆังและนกหวีดเพิ่มขึ้นเล็กน้อย
gnat

1
@ ใช่ใช่แน่นอน VCS อื่น ๆ อีกมากมายให้สิ่งที่เหมือนกับการจัดเตรียม โดย "other VCS" ฉันหมายถึง VCS อื่น ๆ ที่ไม่มีอะไรเหมือนเวทีของ git เพราะนั่นคือสิ่งที่ OP อ้างถึง
โปรเก่า

ผมพบว่าคำตอบนี้จะเป็นอย่างมากดีกว่าทั้งหมดข้างต้นเนื่องจากเป็นเพียงคนเดียวที่ชี้แจงว่าทำไมการแสดงละครอยู่ที่ทุกคน (เป็นที่จำเป็นในทางเทคนิค ) คำอธิบายต้นกำเนิดของมัน ( ผู้เขียน Git ของเลือกที่จะทำให้ขั้นตอนนี้สามารถมองเห็นได้และถาวร ) เพิ่ม สิ่งที่ฉันพบเป็นการส่วนตัวว่าเป็นคำจำกัดความที่ดีสำหรับมัน ( การกระทำระดับกลางที่ไม่มีชื่อและไม่มีคอมเมนต์ในท้องถิ่น ) แต่ผมคิดว่ามันอาจจะดีขึ้นโดยการอ้างแหล่งที่มาสำหรับคำสั่งเกี่ยวกับที่มาของการแสดงละครและอธิบายรายละเอียดบางอย่างเพิ่มเติมเกี่ยวกับทำไมมันจำเป็นต้องใช้เทคนิค @OldPro
alexlomba87

-1

ความเข้าใจของฉันคือสมมติว่าฉันกำลังพัฒนาคุณสมบัติการเข้าสู่ระบบและต้องใช้ 5 ขั้นตอนติดต่อกันเพื่อให้เสร็จสมบูรณ์ การแสดงละครที่นี่จะช่วยให้คุณทำงานตามขั้นตอนเช่นเดียว
กับขั้นตอนที่ 1
เสร็จสิ้นด้วยขั้นตอนที่ 2 ตอนนี้ขั้นตอนที่ 1 และขั้นตอนที่ 2 ทั้งคู่เป็นขั้นตอนที่ถูกต้อง
ยุ่งกับขั้นตอนที่ 3 ไม่มีปัญหาขั้นตอนการชำระเงินขั้นตอนล่าสุดซึ่งเป็นขั้นตอนที่ 2
เช่นเดียวกันเมื่อคุณทำกับ 5 ขั้นตอนทั้งหมดซึ่งหมายความว่าคุณลักษณะเสร็จสมบูรณ์แล้ว


นี้ดูเหมือนจะไม่เพิ่มอะไรที่สำคัญกว่าจุดทำและอธิบายในก่อน 9 คำตอบ
ริ้น

ใช่คุณพูดถูกฉันแค่พยายามอธิบายให้ง่ายและหวาน
palash140

และสิ่งที่ฉันรู้สึกอยากใช้แนวคิดนี้จริงฉันพยายามอธิบายว่า
palash140

ลองพิจารณาการสนทนาที่นี่: TL ที่สอง DR ตอบรับได้ไหม? (FWIW เมื่อเทียบกับคำตอบก่อนหน้านี้ไม่ได้ดูเรียบง่ายหรือหวานสำหรับฉัน)
ริ้น

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