วิธีใช้การควบคุมเวอร์ชัน


19

ฉันกำลังพัฒนาเว็บไซต์ใน php ใน localhost และเมื่อโมดูลของมันเสร็จสมบูรณ์ฉันอัพโหลดบนคลาวด์เพื่อให้เพื่อนของฉันสามารถทดสอบอัลฟา

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

ดังนั้นคำถามของฉันคือ: มีวิธีที่ง่าย / บริการ / แอพพลิเคชั่นให้ฉันติดตามการแก้ไข / การเปลี่ยนแปลง / ไฟล์ใหม่ทั้งหมดและจัดการไฟล์เมื่อฉันพัฒนาเว็บไซต์หรือไม่ ทันทีที่ฉันทำโมดูลฉันต้องการอัปโหลดบนคลาวด์ (ฉันใช้ Amazon Cloud Service) หากมีสิ่งใดเกิดขึ้นกับไฟล์ใหม่ฉันอาจต้องการกลับไปใช้ไฟล์เก่า และบางทีในหนึ่งหรือสองคลิกฉันจะได้เห็นไฟล์ที่ฉันแก้ไขหรือเปลี่ยนแปลงตั้งแต่ไฟล์ล่าสุดที่ฉันอัปโหลด?


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

คำตอบ:


28

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

ในการเริ่มต้นให้เลือกหนึ่งใน Mercurial, GIT หรือ Bazaar ตามลำดับและติดตั้งพร้อมกับเครื่องมือสำหรับ IDE และระบบปฏิบัติการของคุณ (ฉันชอบ Mercurial กับ HGE สำหรับ Eclipse)

  1. เริ่มต้นพื้นที่เก็บข้อมูลจากไดเรกทอรีการทำงานของคุณ ( hg initด้วย Mercurial)
  2. เลือกไฟล์และไดเรกทอรีที่คุณต้องการติดตามและเลือก กฎทั่วไปไม่ได้ติดตามไฟล์ที่สร้างขึ้นโดยคอมไพเลอร์และเครื่องมืออื่น ๆ
  3. ใช้คำสั่งเพื่อเพิ่มไฟล์และไดเรกทอรีไปยังที่เก็บ ( เพิ่ม hgสำหรับ Mercurial)
  4. บอกเครื่องมือเกี่ยวกับรูปแบบสำหรับไฟล์ที่คุณไม่ต้องการติดตาม (แก้ไข. hgignore for Mercurial)
  5. ดำเนินการคอมมิชชันเพื่อติดตามเวอร์ชันดั้งเดิม ( hg ci )
  6. ทำการคอมมิชชันหลังจากแต่ละเหตุการณ์สำคัญแม้ว่ามันจะเล็ก
  7. เพิ่มไฟล์ใหม่เมื่อคุณสร้าง
  8. ทำซ้ำสองครั้งสุดท้าย
  9. สำรองข้อมูลไดเรกทอรีทำงานและที่เก็บของคุณบ่อยเท่าที่เหมาะสม

ด้วยไฟล์ของคุณในที่เก็บคุณสามารถทราบความแตกต่างระหว่างไฟล์หรือไดเรกทอรีสองเวอร์ชันหรือโครงการที่สมบูรณ์ ( hg diff ) ดูประวัติการเปลี่ยนแปลง ( hg hist ) และย้อนกลับการเปลี่ยนแปลง ( hg up -r )

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

หากคุณต้องการทดลองกับสายการพัฒนาอื่น ๆ ให้ทำในสาขาอย่างง่ายโดยการโคลนที่เก็บหลัก ( hg clone ) และไม่ดันกลับจนกว่าการทดสอบจะเป็นข้อสรุป มันง่ายเหมือนการมีไดเรกทอรีการทำงานที่แตกต่างกันสำหรับการทดสอบ

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

Linus Torvalds (ผู้ที่เกี่ยวข้องกับไฟล์นับหมื่นนับพันและโค้ดหลายล้านรายการในโครงการของเขา) ได้พูดคุยกับGoogleเกี่ยวกับสาเหตุที่เครื่องมือไม่สามารถเป็น CVS, SVN หรือเครื่องมือเชิงพาณิชย์และฟรีอื่น ๆ ; มันคุ้มค่าที่จะดูมาก ๆ


1
ฉันชอบ Mercurial เช่นกัน ฉันชอบการสนับสนุนใน Netbeans เพราะในขณะที่คุณกำลังเข้ารหัสมันจะแสดงให้คุณเห็นทุกบรรทัดที่มีการเปลี่ยนแปลงตั้งแต่การกระทำครั้งสุดท้ายของคุณ นอกจากนี้ยังมีรหัสสีไฟล์ใหม่ / ไฟล์เปลี่ยนแปลง / ไม่เปลี่ยนแปลงในแผนผังผลิตภัณฑ์ ซึ่งเสียงเหมือนมันจะเป็นประโยชน์สำหรับ OP I lose track of which file I've edited or changedนี้: HGE อาจทำเช่นนี้ฉันไม่ได้ใช้มัน
JD Isaacks

1
+1 สำหรับการอธิบายกระบวนการรวมถึงส่วนหนึ่งของวิธีการใช้เครื่องมือในการทำเช่นนั้น
Donal Fellows

เป็นคำถามข้างเคียง.xcodeprojไฟล์ที่ Xcode ใช้สำหรับโปรเจ็กต์ iOS จะถูกพิจารณาว่าเป็นสิ่งที่บอกให้ Mercurial เพิกเฉยหรือจำเป็นต้องซิงค์ไฟล์หรือไม่
Kevin Yap

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

1
@John: NetBeans ทำสิ่งนั้นกับ VCS ทุกตัวที่สนับสนุน ณ จุดนี้มันเป็นเพียงคุณสมบัติพื้นฐานของ IDE
Mike Baranczak

13

ฉันขอแนะนำ Git เรียนรู้เกี่ยวกับที่นี่: https://lab.github.com/

หากคุณไม่ชอบ Git มีวิธีการควบคุมเวอร์ชันอื่น ๆ คุณอาจตรวจสอบ SVN


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

1
+1 พิจารณาด้วย: ผู้คนเลือกที่จะย้ายจาก svn (VCS) ไปยัง git (a DVCS - d = กระจาย) แต่ไม่ใช่จาก GIT ไปยัง SVN (ผ่านทางเลือก)
Michael Durrant

7

เป็นเพียงคุณใช่ไหมใช้ DVCS

เนื่องจากฟังก์ชั่นตอบโต้ได้ง่ายระบบการควบคุมเวอร์ชันแบบกระจาย (Mercurial, git, bazaar) จะเริ่มต้นได้ดีกว่าระบบแบบรวมศูนย์ (svn, cvs) ทำไมคุณติดตั้งบนเครื่องของคุณและเรียกใช้พื้นที่เก็บข้อมูลของคุณในพื้นที่และนั่นคือมัน ในระบบรวมศูนย์เช่น svn คุณต้องตั้งค่าไคลเอนต์และเซิร์ฟเวอร์ ... จากนั้นคุณจะต้องเชื่อมต่อกับเซิร์ฟเวอร์เพื่อจัดเก็บการเปลี่ยนแปลงของคุณ

ด้วย DVCS คุณพื้นที่เก็บข้อมูลท้องถิ่นและถ้าคุณต้องการคุณสามารถใช้บริการเช่น bitbucket.org หรือ github.com

IMHO Mercurial เป็น DVCS ที่เป็นมิตรและมีความสามารถเท่าเทียมกันในการเริ่มต้น

มีคนอื่นไหมใช้ DVCS!

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

ป้อนคำอธิบายรูปภาพที่นี่

คุณจะมีอะไรเช่นนี้ที่ทุกคนเพิ่งทำกิจเฉพาะกิจ:

ป้อนคำอธิบายรูปภาพที่นี่

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

โชคดี


1
+1 ตัวอย่างที่ดีมาก! คุณควรแก้ไขเพื่อเน้นความเจ็บปวดที่หายไปในต้นไม้ผสานซับซ้อนด้วยเครื่องมือที่ทันสมัย
Apalala

5

กล่าวโดยย่อมีทางเลือกมากมายในการที่ Subversion (SVN) และ Git ดูเป็นที่นิยมมากที่สุด

พวกเขาต่างกัน SVN นั้นง่ายกว่า แต่ Git ไม่ต้องการให้คุณมีเซิร์ฟเวอร์เริ่มต้นด้วย - คุณสามารถควบคุมเวอร์ชันในเครื่องได้

สมมติว่าคุณมี Linux และต้องการเริ่มใช้งาน Git:

  1. ติดตั้ง Git
  2. ไปที่ไดเรกทอรีและดำเนินการคำสั่ง 'git init'
  3. เรียนรู้วิธีเพิ่มไฟล์ตรวจสอบการเปลี่ยนแปลงกระทำการ ...
  4. ... และเพื่อทำสิ่งขั้นสูงเพิ่มเติม (การตรวจสอบบันทึกการคืนค่าการเปลี่ยนแปลงการเพิกเฉยไฟล์การสร้างสาขาการรวมการสร้างและการใช้รีโมตโดยใช้ submodules โดยใช้การสนับสนุน SVN เป็นต้น)

หวังว่านี่จะช่วยคุณในการเริ่มต้น


1
SVN ไม่ต้องการเซิร์ฟเวอร์ แต่ต้องการให้พื้นที่เก็บข้อมูลอยู่ในไดเรกทอรีที่แตกต่างจากที่ทำงาน โดยทั่วไป SVN และ CVS จะถูกคัดค้านด้วยเครื่องมือสนับสนุนเช่น GIT และ Mercurial ซึ่งไม่ต้องการการเชื่อมต่อเครือข่ายสำหรับการทำงานประจำวันและไม่จำเป็นต้องมีที่เก็บส่วนกลางสำหรับการพัฒนาซอฟต์แวร์ที่ทำงานร่วมกันและแบบกระจาย
Apalala

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

Apalala, คำถามบางอย่าง: วิธี Mercurial จัดการกับข้อมูลที่ผู้ใช้เขียนการเปลี่ยนแปลงที่เฉพาะเจาะจงได้อย่างไร? ใน Git คุณสามารถแก้ไขและกระทำการเปลี่ยนแปลงในฐานะคนอื่นได้ดังนั้นจึงทำให้เกิดความยุ่งเหยิง (มีคุณลักษณะบางอย่างที่ทำให้เห็นความแตกต่างของผู้เดินทางจากผู้ส่ง แต่มันไม่ชัดเจนพอ) Mercurial แก้ไขปัญหาที่เกี่ยวข้องกับรุ่นควบคุมแบบกระจายหรือไม่
Tadeck

2
@ Tadeck นั่นไม่ใช่วิธีที่ Mercurial และ GIT ทำงานในการทำความเข้าใจของฉัน ในบุคคลเหล่านี้มีหน้าที่รับผิดชอบในสิ่งที่จะเข้าสู่ที่เก็บข้อมูลไม่ว่าจะเป็นการกระทำการดึงหรือแพทช์ ในที่เก็บแบบกระจายหากใครบางคนมีสิทธิ์แบบพุชคุณก็จะเชื่อใจพวกเขาไปหมดแล้ว Linus Torvalds อธิบายได้ดีในการพูดคุยนี้: youtube.com/watch?v=4XpnKHJAok8
Apalala

@Tadeck เกี่ยวกับ SVN ฉันใช้มันมากและท้ายที่สุดฉันคิดว่ามันไม่ได้ปรับปรุง CVS (อย่างน้อยก็มีคลังเก็บ ASCII แบบธรรมดาและเป็นผู้ใหญ่มากพอที่จะไม่ทำลายพวกเขา) อีกครั้ง Torvalds อธิบายได้ดีในวิดีโอที่ฉันเชื่อมโยงมาก่อน การไม่สามารถทำงานแบบออฟไลน์ได้และการไม่สามารถผสานทำให้เครื่องมือ SCM เก่าเลิกใช้งาน
Apalala

2

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


0

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

หลายที่เก็บ? ฉันแน่ใจว่ามีการใช้งานที่ถูกต้องตามกฎหมายสำหรับสิ่งเหล่านั้น แต่ฉันไม่เคยพบเจอ

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

Git ช่วยให้จัดการกับการแยกและรวมได้ง่ายขึ้น แต่สำหรับทีมคนเดียวนั่นไม่ใช่เรื่องใหญ่

สำหรับบางสิ่งในระดับของเคอร์เนล Linux - ใช่ให้ใช้ Git สำหรับพวกเราที่เหลือการโค่นล้มก็ดีพอ


downvoting คุณสมบัติของ Git ที่ไม่ได้อยู่ใน SVN (เช่นการแยกกิ่งที่มีน้ำหนักเบาและการผสานอย่างง่ายดาย) มีประโยชน์อาจเป็นสิ่งจำเป็นสำหรับโครงการขนาดเล็กและใหญ่
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser ใช่นั่นเป็นความเห็นของฉันในเวลานั้น แต่หลังจากใช้ Git อย่างมืออาชีพมาหลายปีฉันจะต้องเห็นด้วยกับคุณ
Mike Baranczak

ยอดเยี่ยม คุณจะได้รับการหลอมรวม : D
Marnen Laibow-Koser

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