การเช็คอินและเช็คเอาต์แตกต่างกันอย่างไร


14

เมื่อสอนคลาส SCM ให้กับนักเรียนที่ยังใหม่ต่อการจัดการการกำหนดค่าซอฟต์แวร์มันเกิดขึ้นว่าคำถามเกิดขึ้นเช่น " What's the difference between checkin and checkout?"

และความแตกต่างของมันก็คือนักเรียนเหล่านี้สับสนเกี่ยวกับแนวคิด SCM เหล่านี้ (พวกเขาเข้าใจว่าพวกเขาเป็นวิธีอื่น ๆ )

ดังนั้นอุปมาชนิดใดที่คุณสามารถใช้เพื่ออธิบายแนวคิด SCM ที่สำคัญนี้แก่ผู้ชมดังกล่าว


เช็คเอาต์ = ล็อค; checkin = ปลดล็อค; คุณใช้การล็อกแบบเอกสิทธิ์เฉพาะบุคคลเพื่อแก้ไขวัตถุที่เป็นปัญหาในสาขาที่คุณดำเนินการ
Jiri Klouda

คำตอบ:


8

เพื่ออธิบายบางสิ่งบางอย่างกับใครก็ตามลองเปรียบเทียบกับสิ่งที่พวกเขาคุ้นเคย (หวังว่า)

นั่นคือเหตุผลที่ฉันเพิ่งตอบคำถามเช่นนี้:

คิดว่ามันมาถึงสถานที่ที่จะอยู่ (โรงแรม, รีสอร์ท, ฯลฯ ):

  • มากครั้งแรกสิ่งที่คุณทำ (เมื่อคุณมาถึง) checkinคือการ
  • มากที่ผ่านมาสิ่งที่คุณทำ (เมื่อคุณออก) checkoutคือการ

แนวคิด SCM ที่คล้ายกันนำไปใช้เมื่อคุณต้องการใช้การเปลี่ยนแปลงกับส่วนประกอบซอฟต์แวร์ ... ยกเว้นว่าจะใช้วิธีอื่น :

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

หมายเหตุ : สิ่งนี้ใช้กับระบบรวมศูนย์ (เช่นระบบที่ใช้ในสภาพแวดล้อมเมนเฟรม ... ) ในระบบดังกล่าวเป็นว่า " checkoutแนวคิด" มีความหมายที่แตกต่างอย่างสิ้นเชิง (ซึ่ง IMO เป็นเหตุผลในระบบที่มีแทบจะไม่สับสนใด ๆ เกี่ยวกับแนวคิดทั้งสอง)


บางทีรหัสนั้นเหมือนหนังสือห้องสมุดมากกว่าห้องของโรงแรมใช่ไหม
Toby Speight

นี่เป็นคำตอบธรรมดา ๆ ที่ไร้เดียงสา ฉันทำงานมานานกว่าทศวรรษในการควบคุมระบบแหล่งข้อมูลภายในดังนั้นฉันจึงเพิ่มคำตอบเชิงลึกของคำถามของคุณอีกเล็กน้อย
Jiri Klouda

6

สิ่งสำคัญคือต้องทราบว่าคำว่า "เช็คอิน" และ "เช็คเอาต์" มีความหมายแตกต่างกันไปตามประเภทของระบบ SCM

ระบบรวมศูนย์เช่น TFVC การโค่นล้มและ Clearcase ใช้การชำระเงิน "พิเศษ" นี่เปรียบเสมือนอุปมาการยืมหนังสือของปิแอร์ที่มีผู้ใช้เพียงคนเดียวเท่านั้นที่สามารถเช็คเอาท์ไฟล์ได้ในคราวเดียว

ระบบแบบกระจายเช่นคอมไพล์มีคำสั่ง "ชำระเงิน" แต่มันหมายถึงบางสิ่งที่แตกต่างอย่างสิ้นเชิง git checkoutใช้เพื่อสลับระหว่างสาขาเมื่อทำงานกับที่เก็บในเครื่อง


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

ฉันควรชี้แจง: เช็คเอาต์ git ใช้เพื่อตรวจสอบวัตถุจากที่เก็บ ที่สามารถเป็นสาขาหรือไฟล์เดียว
Dave Swersky

4

สำหรับระบบที่เป็นศูนย์กลางให้คิดเหมือนเป็นห้องสมุดทางเทคนิค (อาจเป็นการยืดจินตนาการว่าห้องสมุดนี้ทำหน้าที่อย่างไร ... )

หากคุณเป็นผู้เขียนเอกสารคุณอาจcheckoutคัดลอกไลบรารีทำการเปลี่ยนแปลงส่งคืนcheck it back inไปยังไลบรารีเพื่อให้โลกเห็น

นี่อาจเป็นปัญหาหากห้องสมุดมีสำเนาดิจิทัลและฉันcheckoutเป็นเอกสารคนอื่นchecks outเป็นเอกสารเราทั้งคู่ทำการเปลี่ยนแปลงจะมีความขัดแย้ง (ข้อขัดแย้งผสาน) ที่อาจแก้ไขได้ยาก เมื่อใดที่ "แก้ไข" เริ่มต้นสำหรับสิ่งนี้คือcheckoutฟังก์ชั่นพิเศษ...


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


นั่นเป็นอีกวิธีหนึ่งในการดู แม้ว่าในประสบการณ์ของฉันฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะเพิ่มสิ่งต่าง ๆ เช่น "ความขัดแย้ง" และ "การรวม" (ถ้าพวกเขารู้สึกไม่สะดวกสบายด้วยการชำระเงินและเช็คอิน)
Pierre.Vriens

ยุติธรรมฉันเพิ่มเพราะเหตุผลหลักที่เช็คเอาต์ / เช็คอินมีอยู่ที่ฉันคิดได้ และรู้สึกว่าการเข้าใจแนวคิดนั้นยากมากถ้าคุณไม่รู้ว่าแนวคิดนั้นมีประโยชน์จริง ๆ
Thymine

2

ด้วยที่เก็บ SCMเป็นหัวเรื่องหลักแล้ว '

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

Merci สำหรับคำตอบนี้ด้วย นั่นเป็นวิธีที่จะอธิบายได้แม้ว่าฉันจะยังสงสัยว่าคุณจะนึกถึง "อุปมาอุปไมย" บางอย่าง (ในคำถามของฉัน) เช่นเพื่ออธิบายให้คนที่คุณกำลังสอนซึ่งไม่ได้รู้ว่าพื้นที่เก็บข้อมูลในพื้นที่หรือระยะไกลจริงๆ
Pierre.Vriens

จริงถ้าพวกเขาไม่มีเงื่อนงำเกี่ยวกับสิ่งที่เก็บข้อมูลจากนั้นพยายามที่จะสอนการเช็คอินและการชำระเงินจะไม่มีความหมาย ตอนนี้สำหรับคำอุปมาสำหรับการควบคุมแหล่งโดยทั่วไปคุณสามารถเปรียบเทียบกับการบัญชีการเงิน / การทำบัญชี มันเป็นพื้นฐานการติดตามการเปลี่ยนแปลงมูลค่าของสินทรัพย์ คุณบันทึกการเปลี่ยนแปลงเดี่ยวหรือกลุ่มของการเปลี่ยนแปลง (เช่น "เดินทางจาก A ถึง B" แทนที่จะเป็นตั๋วรถแท็กซี่ + รถโดยสาร + ตั๋วรถไฟ + ... ) ถึงแม้ว่าจะไม่ใช่กลุ่มใหญ่เกินไป (เช่น "ค่าใช้จ่ายทั้งหมดในวันจันทร์") พื้นที่เก็บข้อมูลในทำนองเดียวกันติดตามการเปลี่ยนแปลงของรหัสที่มากลุ่มบุคคลหรือไม่ใหญ่เกินไป
hlovdal

1
  • ชำระเงินเป็นล็อคพิเศษในการปรับเปลี่ยนสาขาของวัตถุในพื้นที่เก็บข้อมูล
  • Checkinเป็นการปลดล็อคแบบเอกสิทธิ์

มีระบบควบคุมแหล่งที่มาสองประเภทขึ้นอยู่กับว่าอะไรคือหน่วยย่อยที่เล็กที่สุดของการแยกสาขา

1) ต่อพื้นที่เก็บข้อมูลแขนง (CVS, SVN, GIT, อย่างเลี่ยงไม่พ้น ... ฯลฯ )

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

2) การแยกวัตถุ (ClearCase, AccuRev, Oracle ADE)

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


เฮ้จิริเมตตาสำหรับคำตอบของคุณ สำหรับทั้งสองชนิดที่คุณพูดถึงฉันจะเห็นด้วย แต่ในเครื่องมือ SCM ในโลกเมนเฟรม (จากประสบการณ์ของฉันมาจาก) ไม่มีใครพิจารณา "ล็อค" ในการพิจารณา ... คุณคิดวิธีที่จะเพิ่มประเภทที่ 3 ในคำตอบของคุณหรือไม่
Pierre.Vriens

คุณช่วยยกตัวอย่างผลิตภัณฑ์ที่ไม่ตรงกับสองหมวดหมู่ได้หรือไม่? ฉันสามารถบอกได้ว่าหนึ่งในสองนั้นเหมาะสมกับหรือเพิ่มหนึ่งในสามถ้ามีจริงๆ เช็คเอาต์และเช็คอินเป็นการดำเนินการในสาขาที่ให้และปล่อยสิทธิในการแก้ไข ดังนั้นการแบ่งพาร์ทิชันในสิ่งที่สาขาผลิตภัณฑ์ (พื้นที่เก็บข้อมูลทั้งหมดหรือแต่ละวัตถุ) เป็นธรรมชาติสำหรับคำถามนี้ ฉันไม่รู้ว่ามีอะไรในระหว่างนั้นจะเป็นอย่างไร? การแยกย่อยของทรีย่อยใน Perforce และ Subgit นั้นเป็นประเภทแรก ล็อคเป็นชื่อที่แตกต่างกันสำหรับ 'สิทธิพิเศษ'
Jiri Klouda

BTW คำอุปมาห้องสมุดดังกล่าวก่อนหน้านี้เป็นสิ่งที่ดีจริงๆ เมื่อคุณชำระเงินหนังสือคุณจะได้รับสิทธิพิเศษ คุณนำมันกลับบ้านและทำตามที่คุณต้องการ อ่านหรือแม้กระทั่งจดบันทึกขีดเขียนในระยะขอบและไม่มีใครสามารถแก้ไขหนังสือในขณะที่คุณได้ตรวจสอบออก กดไลค์บางหน้าหรือไฮไลต์บางบรรทัด เมื่อคุณตรวจสอบในหนังสือผู้คนสามารถอ่านได้ที่ห้องสมุดซึ่งบรรณารักษ์ที่คอยจับตาดูไม่อนุญาตให้มีการดัดแปลงใด ๆ (ป่าเถื่อน) หรือตรวจสอบและนำกลับบ้าน มันเป็นอันดับการเปลี่ยนแปลงของหนังสือเล่มนั้น
Jiri Klouda

เพื่อทำการเปรียบเทียบในห้องสมุดสาขาที่แตกต่างกันหนังสือเล่มเดียวกันอาจจะมีการแก้ไขที่แตกต่างกันหรือไม่เปลี่ยนแปลงทั้งหมดหรือไม่เลย บุคคลอื่นสามารถตรวจสอบได้ในเวลาเดียวกัน (เช่นการชำระเงินต่อสาขา) ตอนนี้ผู้แต่งดั้งเดิมทำงานในรุ่นที่ 2 ซึ่งเป็นสาขาหลักดังนั้นต้องพูด เขาสามารถอ่านบันทึกจากหลายสาขารวมเข้าด้วยกันชำระเงินที่สาขาหลักและตรวจสอบรุ่นที่ 2 ห้องสมุดแต่ละสาขาจะรีเฟรชสำเนาโดยการซื้อรุ่นที่ 2 พวกเขาสามารถละทิ้ง 1 หรือคัดลอกบันทึกย่อที่มีประโยชน์จากระยะขอบไปยังรุ่นใหม่
Jiri Klouda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.