เมื่อใดที่ฉันควรจะใช้การควบคุมแหล่งข้อมูลเป็นอันดับแรก


118

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

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

  1. ไฟล์ว่างเปล่า?
  2. รหัสสำเร็จรูป?
  3. คุณสมบัติแรก?
  4. เมื่อถึงจุดอื่น?

นอกจากนี้สาเหตุที่ต้องเช็คอิน ณ จุดใดจุดหนึ่ง?


10
ก่อนที่คุณจะกลับบ้านคุณต้องทำงานที่สาขาของตัวเอง
Reactgular

59
การคอมมิชชันแรกควรทำหลังจากสร้างโครงการ Sourceforge ตั้งค่าเว็บไซต์กำหนดค่ารายชื่อผู้รับจดหมายและบล็อกเกี่ยวกับโครงการเป็นเวลาหลายปี :)
Kaz

15
ข้อเสียของการกระทำเร็วเกินไปหรือบ่อยครั้งคืออะไร?
Isaac Rabinovitch

13
mkdir myproj; cd myproj; git init; เริ่มงาน.
Eddie B

10
ฉันเรียนรู้วิธีจัดการการประหยัดความคืบหน้าจากปุ่มบันทึกด่วนในวิดีโอเกม กฎมีลักษณะดังนี้: Will I mind having to redo that part ? Save : SaveAnyway;ฉันใช้วิธีการเดียวกันกับการควบคุมแหล่งข้อมูลฉันไม่รอให้บางอย่างทำงานหรืออยู่ใกล้เสร็จฉันรอจนกว่าฉันจะหาอะไรออกมาหรือทำการเปลี่ยนแปลงที่ฉันไม่ต้องการ ต้องลองหามันใหม่อีกครั้งหรือทำการเปลี่ยนแปลงเหล่านั้นอีกครั้งจากนั้นฉันก็เช็คอินนั่นเป็นสาเหตุที่คนแนะนำให้บันทึกหลังจากการสร้างโครงการ การสร้างโปรเจ็กต์นั้นน่ารำคาญเช็คอินดังนั้นคุณจะไม่ต้องทำอีกเลย
จิมมี่ฮอฟฟา

คำตอบ:


103

คุณควรกระทำทันทีที่คุณมี "หน่วย" ที่สมเหตุสมผล

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

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


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

16
ความมุ่งมั่นไม่เคยเล็กเกินไป! อย่าละเว้นการกระทำของคุณ!
Leonardo Herrera

1
ฉันจะบอกให้ +1 ที่มีขนาดเล็กและกระทำบ่อยขึ้นอยู่กับกระบวนการทำงานของคุณและจำนวนผู้ที่สนใจใน repo ของคุณที่จะทำงานให้เสร็จ ความสามารถของ Git ในการเขียนประวัติศาสตร์อีกเล็กน้อยเพื่อให้ทั้ง 15 ข้อตกลงFooSerializerสามารถกลายเป็นสิ่งหนึ่งก่อนที่คุณจะช่วยด้วยสิ่งนี้
Tim Post

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

1
อาจเป็นคำตอบที่ดีสำหรับข้อที่ 2 ข้อที่ 3 เป็นต้น แต่ข้อแรกควรจะว่างเปล่า
เฟลิเป้

143

เท่าที่ฉันกังวล Repo การควบคุมแหล่งที่มาของคุณเป็นส่วนหนึ่งของการตั้งค่าโครงการขั้นพื้นฐานดังนั้นฉันยอมรับทันทีหลังจากที่ฉันสร้างโครงการที่ว่างเปล่าของฉัน


29
กระทำก่อนกำหนดกระทำบ่อย ๆ
Leonardo Herrera

11
ฉันเห็นด้วยกับคำตอบมากกว่านี้ ฉันยังดูการควบคุมแหล่งที่มา (ฉันหมายถึง DVCS) เป็นปุ่มเลิกทำใหญ่ถ้าฉันสกรูพระราชสิ่งขึ้น ฉันขอแนะนำให้ใช้ semver (ผ่านแท็ก) และเริ่มด้วยเวอร์ชัน 0
Antony Scott เมื่อ

2
ขอบคุณ @AntonyScott ฉันเห็นด้วย 100% กับคำตอบที่ได้รับการยอมรับ แต่เมื่อฉันเขียนสิ่งนี้ฉันมีวิสัยทัศน์ที่จะทำให้น้ำยุ่งเหยิงด้วยบทความเรียงความ 1,500 คำเกี่ยวกับวิธีที่ฉันจัดการการควบคุมแหล่งที่มาและสาเหตุ ดังนั้นฉันตัดสินใจที่จะทำให้มันง่ายและตรงประเด็น
John MacIntyre

2
ใช่ +1 ถ้าคุณรู้สึกไม่ดีเกี่ยวกับที่ว่างเปล่ากระทำเริ่มต้นด้วย .gitignore (หรือเทียบเท่า) เป็น Xion เขียนไว้ในคำตอบอื่น [ programmers.stackexchange.com/a/176845/5405] นั่นเป็นความมุ่งมั่นครั้งแรกที่เป็นธรรมชาติมาก ๆ
Hanno Fietz

ฉันสังเกตเห็นการตั้งค่าสถานะ "คำตอบยาว" ในคำถามและไม่สามารถช่วย แต่คิดว่ามันหมายถึงคำตอบนี้ AFAIC ฉันตอบ 'ทำไม' คำถามกับ "repo การควบคุมแหล่งที่มาเป็นส่วนหนึ่งของการตั้งค่าโครงการพื้นฐาน" ส่วนหนึ่งของคำตอบ อย่างที่ฉันบอกว่าฉันสามารถเขียนเรียงความเกี่ยวกับปรัชญาที่สมบูรณ์เกี่ยวกับวิธีการใช้การควบคุมแหล่งที่มา แต่มันจะเบี่ยงเบนจากคำตอบนี้เท่านั้น หากใครมีคำถามเฉพาะเกี่ยวกับคำตอบของฉันฉันยินดีที่จะตอบ แต่ไม่เช่นนั้นฉันไม่ต้องการที่จะอธิบายคำตอบนี้ให้สูญเปล่า หากคุณต้องการที่จะลบมันไปข้างหน้า
John MacIntyre

77

เมื่อวาน

... ในอีกทางหนึ่งถ้าคุณไม่สามารถเดินทางข้ามเวลาได้ ...
(บางทีรถของคุณไม่สามารถไปถึง 88mph หรือตัวเก็บประจุฟลักซ์ของคุณเพิ่งหมดไป)

ตอนนี้

โครงการใหม่ควรจะเกิดขึ้นในจุดที่เลือดมันบ้าไปแล้วและระบบ DVCS ร่วมสมัยเพิ่งลบข้อแก้ตัวที่เป็นไปได้ทั้งหมดเพื่อหลีกเลี่ยงการกระทำ : git init . ; git add * ; git commit -m initial-commitตอนนี้ก่อนที่มันจะสายเกินไป

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

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


3
ฉันไม่รังเกียจที่จะยอมรับการเปลี่ยนแปลงที่ไม่ได้รวบรวมโดยเฉพาะอย่างยิ่งในตอนท้ายของวัน วันถัดไปคุณมีสิ่งที่ไม่ได้รวบรวม แต่คุณยังมีประวัติการกระทำของคุณ - หากคุณไม่ต้องการให้ประวัติ "สกปรก" มีตัวเลือกสำหรับการย้อนกลับใน DVCS ที่ดีทุกอย่าง (ฉันคิดว่าเราทุกคนเห็นด้วย DVCS เป็นวิธีเดียวที่จะ ไป.)
Leonardo Herrera

@ LeonardoHerrera ฉันเข้าใจ POV ของคุณแม้ว่าในโครงการแปลภาษาที่มีทางเข้าหลายจุด แต่คุณก็ตัดสินใจที่จะรวบรวมสาขาที่ไม่ได้รวบรวมด้วยเหตุผลอันชอบด้วยกฎหมาย (เช่นการแบ่งปันการแก้ไขข้อผิดพลาดในจุดทางเข้าที่แตกต่างกัน) แต่แล้วมันก็กลายเป็นเรื่องของรสนิยม ... และโดยเฉพาะอย่างยิ่ง
ZJR

20

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

โดยส่วนตัวแล้วการคอมมิทครั้งแรกของฉันมักจะมีไฟล์. gitignore (หรือเทียบเท่า) ที่มีตัวกรองบางอย่างที่ฉันรู้ว่าจะต้องใช้เช่น* .py [co]สำหรับโค้ด Python การตั้งค่าโครงการพื้นฐานและ / หรือต้นแบบแรกที่ง่ายที่สุดคือสิ่งที่ตามมา


ฉันทำสิ่งที่คล้ายกัน ตั้งแต่ฉันใช้ GitHub ฉันก็มีไฟล์ README พื้นฐานเสมอแม้มันจะมีชื่อของโครงการ ฉันพบว่ามีไฟล์อยู่ที่นั่นจากการเดินทางทำให้มีโอกาสมากขึ้นที่ฉันจะอัปเดตในอนาคต :)
Tikhon Jelvis

16

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

  • บทนำ
  • รายละเอียดโครงการ
  • โครงสร้างโครงการ
  • ข้อกำหนดการเข้ารหัส
  • คำแนะนำเกี่ยวกับวิธีการ:
    • สร้าง
    • ทดสอบ
    • ปรับใช้
  • ปัญหาที่พบและวิธีแก้ปัญหา
  • รายการสิ่งที่ต้องทำ
  • เงื่อนไขการใช้บริการ

การฝึกฝนการอัปเดต README ก่อนที่จะทำการเปลี่ยนแปลงในโครงการนั้นเรียกว่าReadme Driven Developmentและช่วยให้คุณคิดผ่านการเปลี่ยนแปลงก่อนที่จะลงทุนเวลาในการเปลี่ยนแปลงเหล่านั้น

ใครก็ตามที่ต้องการมีส่วนร่วมหรือใช้ซอฟต์แวร์นี้จะเริ่มต้นด้วย README


12

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

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


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

ที่อยู่สาขาชั่วคราวจะไม่เป็นอย่างน้อยสำหรับ git หรือไม่ ฉันไม่ได้ใช้git bisectมาก
Keith Thompson

ฉันใช้ Mercurial โดยไม่มีการรีบูตดังนั้นฉันจึงปฏิบัติต่อผู้อื่นอย่างถาวร
Warren P

7

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

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


6

ไม่แน่ใจว่ามันถูกกล่าวถึง

แต่ให้แน่ใจว่าสิ่งที่คุณกระทำวิ่ง / คอมไพล์! ดังนั้นจึงไม่มีข้อผิดพลาดทางไวยากรณ์ ฯลฯ

ไม่มีอะไรน่าผิดหวังไปกว่ารหัสชำระเงินที่เสีย


แน่นอนทำให้รู้สึก!
Aquarius_Girl

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

5

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


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

5

ก่อนที่คุณจะทำอะไรโง่ ๆ

สำหรับพวกเราที่ไม่มีพลังเวทย์มนตร์นั่นหมายถึงน้อยและบ่อยครั้ง

หากคุณทำงานด้วยตัวเองทำทุกครั้งที่คุณดื่มหรืออะไรก็ตาม

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


4

ประมาณ 2 ~ 3 ชั่วโมงในโครงการ

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

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

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

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


3

มีหลายคนตอบแล้ว "ทันที" และฉันเห็นด้วย 100% ฉันชอบข้อเสนอแนะของ Xion เพื่อเริ่มต้นด้วยรูปแบบการเพิกเฉยของ VCS (เช่น.gitignoreหรือเทียบเท่า)

ฉันคิดว่ามันตกลงกันค่อนข้างมากว่าไม่มีข้อเสียสำหรับการผูกมัด แต่เนิ่น ๆ ฉันต้องการเพิ่ม Upsides:

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

2

มันอาจขึ้นอยู่กับ VCS ที่คุณใช้

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

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


2

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

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

ฉันกำลังใช้ Tortoise / SVN ในที่ทำงาน


2

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

ฉันยังมีสคริปต์ที่ทำหน้าที่โปรเจ็กต์ของฉันโดยอัตโนมัติทุก ๆ 10 นาทีไปยัง repo สำรองในกรณีที่ฉันลืมส่งด้วยตนเอง ลองเรียกมันว่าบัฟเฟอร์การเลิกทำการสำรองข้อมูลบนคลาวด์ของฉัน

เช็คอิน (aka. push ) โครงการไปยัง repo ของทีมเมื่อคุณต้องการให้ทีมของคุณเห็นรหัสของคุณ ซึ่งน่าจะเป็นสิ่งที่ก่อนที่ทีมของคุณพร้อมที่จะมองเห็นรหัสของคุณหากคุณเป็นเช่นฉัน

หากคุณต้องการเป็นคนดีกับทีมของคุณให้สควอชของคุณก่อนที่จะผลักดันพวกเขาไปที่ทีม repo


1

ฉันได้อ่านบทความทั้งหมดแล้วและฉันคิดว่าเรามีวิธีแก้ปัญหาที่ดีอยู่แล้ว แต่ฉันต้องการแบ่งปันวิธีการของฉันกับคุณ

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

ขอบคุณ


0

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

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

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

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


0

โดยปกติฉันจะเช็คอินเมื่อใดก็ตามที่ฉันเพิ่มสิ่งใหม่ ๆ แต่พยายามแยกสิ่งต่าง ๆ ในการกระทำที่ไม่ต่อเนื่อง

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

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

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

โดยปกติเมื่อฉันเริ่มเพิ่มรหัสสำเร็จรูป (เช่นเพิ่มเว็บแอปใหม่ในเว็บไซต์ django) ฉันยอมรับการดำเนินการทุกอย่างที่ฉันทำ

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

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

มันจะขึ้นอยู่กับว่าการเพิ่มเนื้อหานั้นยากเพียงใด:

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

  • หากรหัสนั้นไม่สำคัญฉันจะส่งมอบทุกครั้งที่ฉันเพิ่มสิ่งใหม่ (ที่ใดก็ได้ระหว่างรหัสสองบรรทัดที่เปลี่ยนไปเป็นร้อยหรือมากกว่านั้น)

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