การแสดงละคร Git: เมื่อไหร่ถึงเวที? จะทำอย่างไรถ้ามีการดัดแปลงเกิดขึ้นในภายหลัง


9

ฉันค่อนข้างใหม่สำหรับโลกกว้างของ Git ฉันอ่านคู่มือและฝึกฝนมาแล้ว แต่ฉันก็สับสนเล็กน้อยเกี่ยวกับมันซึ่งฉันคิดไม่ออกหลังจากค้นหา

ฉันสงสัย:

  • ในโครงการ (โพสต์การคอมมิทครั้งแรก) ช่วงเวลาที่เหมาะสมในการจัดทำไฟล์ต้นฉบับคืออะไร ก่อนที่จะตัดสินใจ? ทันทีหลังจากเพิ่ม / ลบหรือแก้ไข?

  • หากไฟล์ถูกจัดฉากกลางคันระหว่างสองคอมมิตและจากนั้นไฟล์จะถูกแก้ไขจะเกิดอะไรขึ้นกับ Git มันต้องการการดูแลเกี่ยวกับการเปลี่ยนแปลงเนื้อหาเมื่อมันถูกระบุและสิ่งที่มันจะกลายเป็นตั้งแต่?

  • ถ้าฉันสร้างไฟล์ใหม่ให้จัดวางและต้องการลบไฟล์ทำไม Git ขอให้ฉันใช้แฟล็ก "-f" และ "git -rm file.ext" ธรรมดาจะไม่ทำงาน

ฉันได้อ่าน "What stage หมายถึงอะไร" และวิชาอื่น ๆ ของคู่มือและแบบฝึกหัดอื่น ๆ ใน Git แต่อย่างที่ฉันพูดฉันยังไม่เข้าใจเรื่องข้างต้น

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

ขอบคุณ.


1
ฉันจัดไฟล์เมื่อใดก็ตามที่ฉันทำงานชิ้นเล็กชิ้นน้อย (เล็กเกินไปสำหรับการคอมมิชชัน) หรือก่อนการเปลี่ยนแปลงบางอย่างฉันไม่แน่ใจ ทำทุกอย่างเพื่อคุณ ค้นหาเครื่องมือ (เช่น git gui หรือ git cola) ที่แสดงให้คุณเห็นทั้งขั้นตอนและการเปลี่ยนแปลงแบบไม่จัด ( git diffและgit diff --cachedดี แต่บางครั้งฉันต้องการมากกว่านี้)
maaartinus

คำตอบ:


4

จุดประสงค์ของพื้นที่จัดเตรียมคือการมีพื้นที่ยืดหยุ่นสำหรับการส่งมอบของคุณ ฉันคิดว่าสิ่งนี้จะชัดเจนขึ้นถ้าคุณเปรียบเทียบ git กับระบบควบคุมเวอร์ชันที่รวมศูนย์เช่นการโค่นล้ม

การโค่นล้ม

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

Git

Git แก้ปัญหานี้โดยการจัดเตรียมเป็นแบบสำเนาการทำงานที่สอง ภายในพื้นที่จัดเตรียมคุณกำลังรวบรวมสแนปชอตที่คุณจะยอมรับ (พูดโดยประมาณ)

ดังนั้นภายในพื้นที่การแสดงละครคุณสามารถสร้างสแน็ปช็อตที่มีการเปลี่ยนแปลงAและเวอร์ชันของไฟล์Cที่แสดงถึงการเปลี่ยนแปลงAเท่านั้น

สำหรับคำถามเฉพาะ

  • คุณสามารถจัดแสดง ณ จุดใดก็ได้ที่คุณต้องการ ฉันชอบที่จะแสดงบนเวทีก่อนที่ฉันจะลงมือทำ

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

  • Git ระวังที่นี่ซึ่งอาจเป็นสิ่งที่ดี

กลยุทธ์การมอบอำนาจทั่วไป: มอบเป็นสัญญา

ฉันคิดว่าเมื่อพูดถึงคำถาม "ฉันควรจะจัดฉาก" เมื่อใดควรพูดถึงการสร้างนิสัย

ศูนย์รวม VCS

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

Git

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

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

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

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

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

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

ตอนนี้เพื่อกลับไปที่ staging: เมื่อคุณคอมเม้นท์ไม่กี่บรรทัดต่อคอมมิชชันคุณจะสเตจโดยตรงก่อนที่จะคอมมิท (อย่างน้อยนั่นก็เป็นวิธีที่ฉันทำ)


git add -pเป็นคนดีมาก
Vorac

2

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

ในโครงการ (โพสต์การคอมมิทครั้งแรก) ช่วงเวลาที่เหมาะสมในการจัดทำไฟล์ต้นฉบับคืออะไร ก่อนที่จะตัดสินใจ? ทันทีหลังจากเพิ่ม / ลบหรือแก้ไข?

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

หากไฟล์ถูกจัดฉากกลางคันระหว่างสองคอมมิตและจากนั้นไฟล์จะถูกแก้ไขจะเกิดอะไรขึ้นกับ Git มันต้องการการดูแลเกี่ยวกับการเปลี่ยนแปลงเนื้อหาเมื่อมันถูกระบุและสิ่งที่มันจะกลายเป็นตั้งแต่?

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

ถ้าฉันสร้างไฟล์ใหม่ให้จัดวางและต้องการลบไฟล์ทำไม Git ขอให้ฉันใช้แฟล็ก "-f" และ "git -rm file.ext" ธรรมดาจะไม่ทำงาน

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

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