ฉันกำลังเริ่มโครงการกระจายใหม่ ฉันควรใช้ SVN หรือ Git และทำไม
ฉันกำลังเริ่มโครงการกระจายใหม่ ฉันควรใช้ SVN หรือ Git และทำไม
คำตอบ:
SVN เป็นหนึ่งใน repo และลูกค้าจำนวนมาก Git เป็น repo ที่มี repos ลูกค้าจำนวนมากแต่ละอันมีผู้ใช้ มีการกระจายอำนาจไปยังจุดที่ผู้คนสามารถติดตามการแก้ไขของตนเองในพื้นที่ได้โดยไม่ต้องผลักดันสิ่งต่าง ๆ ไปยังเซิร์ฟเวอร์ภายนอก
SVN ได้รับการออกแบบให้เป็นศูนย์กลางมากขึ้นโดยที่ Git ขึ้นอยู่กับผู้ใช้แต่ละคนที่มี Git repo ของตัวเองและ repos นั้นผลักดันการเปลี่ยนแปลงกลับไปสู่ส่วนกลาง ด้วยเหตุผลดังกล่าว Git จึงให้การควบคุมเวอร์ชันท้องถิ่นที่ดีกว่าแก่บุคคล
ในขณะเดียวกันคุณมีทางเลือกระหว่างTortoiseGit , GitExtensions (และถ้าคุณโฮสต์ git-repository "ส่วนกลาง" บน gitHub ลูกค้าของพวกเขาเอง- GitHub สำหรับ Windows )
หากคุณกำลังมองหาการออกจาก SVN คุณอาจต้องการประเมินBazaarสักหน่อย เป็นหนึ่งในระบบควบคุมเวอร์ชันถัดไปที่มีองค์ประกอบแบบกระจายนี้ มันไม่ได้ขึ้นอยู่กับ POSIX เช่นคอมไพล์ดังนั้นจึงมีการสร้าง Windows ดั้งเดิมและมีแบรนด์โอเพ่นซอร์สที่ทรงพลังรองรับอยู่
แต่คุณอาจไม่ต้องการฟีเจอร์เหล่านี้ด้วยซ้ำ มีลักษณะที่คุณสมบัติข้อดีและข้อเสียของการ VCSes หากคุณต้องการมากกว่าข้อเสนอ SVN ให้พิจารณาข้อเสนอหนึ่งข้อ ถ้าคุณทำไม่ได้คุณอาจต้องการผสานรวมเดสก์ท็อปที่เหนือกว่าของ SVN (ปัจจุบัน)
ฉันไม่เคยเข้าใจแนวคิดของ "git ที่ไม่ดีใน Windows"; ฉันพัฒนาโดยเฉพาะภายใต้ Windows และฉันไม่เคยมีปัญหาใด ๆ กับคอมไพล์
ฉันอยากจะแนะนำคอมไพล์มากกว่าการโค่นล้ม; มันอเนกประสงค์มากขึ้นและช่วยให้ "การพัฒนาออฟไลน์" ในวิธีการโค่นล้มไม่เคยทำได้ มันมีอยู่ในแทบทุกแพลตฟอร์มเท่าที่จะเป็นไปได้และมีคุณสมบัติมากกว่าที่คุณเคยใช้
นี่คือสำเนาของคำตอบที่ฉันทำจากคำถามซ้ำ ๆ ตั้งแต่ลบเกี่ยวกับ Git vs. SVN (กันยายน 2009)
ดีขึ้นหรือไม่ นอกเหนือจากลิงค์ปกติWhyGitIsBetterThanXที่แตกต่างกัน:
หนึ่งคือ VCS กลางตามสำเนาถูกสำหรับสาขาและแท็กอื่น ๆ (Git) เป็น VCS กระจายตามกราฟของการแก้ไข ดูเพิ่มเติมแนวคิดหลักของ VCS
ส่วนแรกนั้นสร้างความคิดเห็นที่ไม่ถูกต้องซึ่งอ้างว่าวัตถุประสงค์พื้นฐานของทั้งสองโปรแกรม (SVN และ Git) เหมือนกัน แต่พวกเขามีการใช้งานที่แตกต่างกันมาก
เพื่อชี้แจงความแตกต่างพื้นฐานระหว่าง SVN และ Gitให้ฉันใช้ถ้อยคำใหม่:
SVN คือการนำการควบคุมการแก้ไขไปใช้ครั้งที่สาม: RCS จากนั้น CVS และสุดท้าย SVN จะจัดการไดเรกทอรีของข้อมูลที่มีเวอร์ชัน SVN เสนอคุณสมบัติ VCS (การติดฉลากและการรวม) แต่แท็กของมันเป็นเพียงการคัดลอกไดเรกทอรี (เช่นสาขายกเว้นคุณไม่ควร "แตะ" เพื่อสัมผัสทุกอย่างในไดเรกทอรีแท็ก) และการผสานยังคงซับซ้อนอยู่ในปัจจุบันโดยใช้เมตา - ข้อมูลถูกเพิ่มเข้ามาเพื่อจดจำสิ่งที่ถูกผสานแล้ว
Git คือการจัดการเนื้อหาไฟล์ (เครื่องมือที่ทำเพื่อผสานไฟล์) ซึ่งพัฒนาเป็นระบบควบคุมเวอร์ชันที่แท้จริงโดยใช้ DAG ( Directed Acyclic Graph ) ของการกระทำซึ่งสาขาเป็นส่วนหนึ่งของประวัติศาสตร์ของข้อมูล (ไม่ใช่ข้อมูลเอง) ) และตำแหน่งที่แท็กเป็นข้อมูลเมตาจริง
จะพูดว่าพวกเขาจะไม่ "พื้นฐาน" ที่แตกต่างกันเพราะคุณสามารถบรรลุสิ่งเดียวกันแก้ไขปัญหาเดียวกันคือ ... เท็จธรรมดาในหลายระดับ
ยังคงความคิดเห็นเกี่ยวกับคำตอบเก่า (ถูกลบ) ยืนยันว่า:
VonC: คุณกำลังสับสนความแตกต่างพื้นฐานในการนำไปใช้ (ความแตกต่างนั้นเป็นพื้นฐานที่สำคัญมากเราทั้งคู่เห็นด้วยอย่างชัดเจนกับเรื่องนี้) ด้วยจุดประสงค์ที่แตกต่างกัน
ทั้งสองเป็นเครื่องมือที่ใช้เพื่อจุดประสงค์เดียวกัน: นี่คือเหตุผลว่าทำไมหลายทีมที่เคยใช้ SVN ก่อนหน้านี้สามารถถ่ายโอนข้อมูลไปยัง Git ได้สำเร็จ
หากพวกเขาไม่ได้แก้ปัญหาเดียวกันความสามารถในการทดแทนนี้จะไม่เกิดขึ้น
ซึ่งฉันตอบว่า:
"substitutability" ... คำที่น่าสนใจ ( ใช้ในการเขียนโปรแกรมคอมพิวเตอร์ )
นอกหลักสูตร Git นั้นแทบจะเป็น SVN ย่อยไม่ได้
คุณอาจได้รับคุณสมบัติทางเทคนิคแบบเดียวกัน (แท็กสาขาการผสาน) กับทั้งคู่ แต่ Git ไม่สามารถเข้าถึงและอนุญาตให้คุณมุ่งเน้นไปที่เนื้อหาของไฟล์โดยไม่ต้องคิดถึงเครื่องมือเอง
แน่นอนคุณไม่สามารถ (เสมอ) แทนที่ SVN ด้วย Git "โดยไม่เปลี่ยนแปลงคุณสมบัติที่ต้องการของโปรแกรมนั้น (ความถูกต้อง, งานที่ดำเนินการ, ... )" (ซึ่งเป็นการอ้างอิงถึงคำจำกัดความการทดแทนที่กล่าวมาข้างต้น):
อีกครั้งธรรมชาติของพวกเขานั้นมีความแตกต่างกันโดยพื้นฐาน (ซึ่งนำไปสู่การนำไปปฏิบัติต่างกัน แต่นั่นไม่ใช่ประเด็น)
หนึ่งเห็นการควบคุมการแก้ไขเป็นไดเรกทอรีและไฟล์อื่น ๆ เพียงดูเนื้อหาของไฟล์ (มากดังนั้นไดเรกทอรีที่ว่างเปล่าจะไม่ได้ลงทะเบียนใน Git!)
เป้าหมายทั่วไปทั่วไปอาจเหมือนกัน แต่คุณไม่สามารถใช้ในลักษณะเดียวกันและไม่สามารถแก้ปัญหาระดับเดียวกันได้ (ในขอบเขตหรือความซับซ้อน)
ข้อดี 2 ข้อที่สำคัญของ SVN ที่ไม่ค่อยมีการอ้างถึง:
รองรับไฟล์ขนาดใหญ่ นอกจากโค้ดแล้วฉันยังใช้ SVN เพื่อจัดการโฮมไดเรกทอรีของฉัน SVN เป็น VCS เดียว (กระจายหรือไม่) ที่ไม่สำลักในไฟล์ TrueCrypt ของฉัน (โปรดแก้ไขให้ฉันถ้ามี VCS อื่นที่จัดการไฟล์ 500MB + ได้อย่างมีประสิทธิภาพ) นี่เป็นเพราะการเปรียบเทียบต่างถูกสตรีม (นี่เป็นจุดสำคัญมาก) Rsync ไม่สามารถยอมรับได้เพราะไม่ใช่แบบสองทาง
ชำระเงิน / ตรวจสอบที่เก็บบางส่วน (ตำบล) Mercurial และ bzr ไม่สนับสนุนสิ่งนี้และการสนับสนุนของ git นั้นมี จำกัด นี่เป็นสิ่งที่ไม่ดีในสภาพแวดล้อมของทีม แต่ประเมินค่าไม่ได้ถ้าฉันต้องการตรวจสอบบางสิ่งบางอย่างในคอมพิวเตอร์เครื่องอื่นจากบ้านของฉัน
เพียงแค่ประสบการณ์ของฉัน
หลังจากทำการวิจัยเพิ่มเติมและตรวจสอบลิงค์นี้: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(สารสกัดบางอย่างด้านล่าง):
หลังจากอ่านทั้งหมดนี้ฉันเชื่อว่า Git เป็นวิธีที่จะไป (แม้ว่าจะมีช่วงการเรียนรู้เล็กน้อยอยู่) ฉันใช้ Git และ SVN บนแพลตฟอร์ม Windows เช่นกัน
ฉันชอบที่จะได้ยินสิ่งที่คนอื่นพูดหลังจากอ่านข้างต้น?
ฉันจะตั้งค่าพื้นที่เก็บข้อมูลการโค่นล้ม ด้วยการทำเช่นนี้ผู้พัฒนาแต่ละรายสามารถเลือกได้ว่าจะใช้ Subversion ไคลเอนต์หรือไคลเอนต์ Git (พร้อมgit-svn
) การใช้git-svn
ไม่ได้ให้ประโยชน์ทั้งหมดแก่คุณในการแก้ปัญหา Git เต็มรูปแบบ แต่จะให้นักพัฒนาแต่ละคนสามารถควบคุมเวิร์กโฟลว์ของตนเองได้อย่างมาก
ฉันเชื่อว่ามันจะเป็นช่วงเวลาสั้น ๆ ก่อนที่ Git จะทำงานได้ดีบน Windows เช่นเดียวกับใน Unix และ Mac OS X (ตั้งแต่คุณถาม)
การโค่นล้มมีเครื่องมือที่ยอดเยี่ยมสำหรับ Windows เช่น TortoiseSVN สำหรับการรวม Explorer และ AnkhSVN สำหรับการรวม Visual Studio
สิ่งที่ตลกคือ: ฉันโฮสต์โครงการใน Subversion Repos แต่เข้าถึงได้ผ่านคำสั่ง Git Clone
โปรดอ่านพัฒนาด้วย Git ในโครงการ Google Code
ถึงแม้ว่า Google Code จะพูดถึงการโค่นล้ม แต่คุณสามารถใช้ Git ระหว่างการพัฒนาได้อย่างง่ายดาย การค้นหา "git svn" แสดงให้เห็นการปฏิบัตินี้แพร่หลายและเราก็สนับสนุนให้คุณทดลองด้วย
การใช้ Git บน Svn Repository ให้ประโยชน์แก่ฉัน:
backup/public
ให้ผู้อื่นลองดูไม่ตอบคำถามของคุณจริงๆ แต่ถ้าคุณต้องการประโยชน์ของDistributed Revision Control - ดูเหมือนว่าคุณทำ - และคุณใช้ Windows ฉันคิดว่าคุณควรใช้Mercurialดีกว่าGit เนื่องจาก Mercurial มีการสนับสนุน Windows ที่ดีกว่ามาก Mercurial ก็มีพอร์ต Mac ด้วย
หากทีมของคุณคุ้นเคยกับโปรแกรมควบคุมเวอร์ชันและแหล่งที่มาเช่น cvs หรือ svn ดังนั้นสำหรับโครงการที่เรียบง่ายและเล็ก (เช่นที่คุณอ้างว่าเป็น) ฉันขอแนะนำให้คุณใช้ SVN ฉันรู้สึกสบายใจกับ svn แต่สำหรับโครงการอีคอมเมิร์ซปัจจุบันที่ฉันทำกับ django ฉันตัดสินใจที่จะทำงานกับ git (ฉันใช้ git ใน svn-mode นั่นคือด้วย repo ส่วนกลางที่ฉันผลักดันและดึง จากเพื่อทำงานร่วมกับนักพัฒนาซอฟต์แวร์อย่างน้อยหนึ่งราย) นักพัฒนาคนอื่นพอใจกับ SVN และในขณะที่ประสบการณ์ของคนอื่นอาจแตกต่างกันเราทั้งคู่ต่างก็มีช่วงเวลาที่เลวร้ายมากที่รับคอมไพล์โครงการขนาดเล็กนี้ (เราเป็นทั้งผู้ใช้ Linux ที่ไม่ยอมใครง่ายๆหากเป็นเรื่องสำคัญ)
ระยะของคุณอาจแตกต่างกันไปแน่นอน
แน่นอนsvn
เนื่องจาก Windows เป็นที่ดีที่สุด - พลเมืองอันดับสองในโลกของgit
(ดูhttp://en.wikipedia.org/wiki/Git_(software)#Portabilityสำหรับรายละเอียดเพิ่มเติม)
อัปเดต: ขออภัยสำหรับลิงก์ที่ใช้งานไม่ได้ แต่ฉันเลิกพยายามใช้ SO เพื่อทำงานกับ URI ที่มีวงเล็บอยู่ [แก้ไขลิงก์ทันที -ed]
ประเด็นหลักคือ Git นั้นเป็น VCS แบบกระจายและการโค่นล้มแบบรวมศูนย์ VCS แบบกระจายนั้นยากต่อการเข้าใจ แต่มีข้อดีหลายประการ หากคุณไม่ต้องการข้อดีนี้การโค่นล้มอาจเป็นตัวเลือกที่ดีกว่า
คำถามอื่นคือการสนับสนุนเครื่องมือ VCS ใดที่สนับสนุนเครื่องมือที่คุณวางแผนจะใช้ดีกว่า
แก้ไข:สามปีที่ผ่านมาฉันตอบด้วยวิธีนี้:
และ Git ทำงานบน Windows ได้ในเวลานี้ผ่าน Cygwin หรือMSYSเท่านั้น การโค่นล้มสนับสนุน Windows ตั้งแต่เริ่มต้น เนื่องจากโซลูชั่น git สำหรับ windows อาจทำงานให้คุณอาจมีปัญหาเนื่องจากนักพัฒนาส่วนใหญ่ของ Git ทำงานกับ Linux และไม่มีความสะดวกในการพกพาในใจตั้งแต่เริ่มต้น ในขณะนี้ฉันต้องการ Subversion สำหรับการพัฒนาใน Windows ในไม่กี่ปีนี้อาจไม่เกี่ยวข้อง
ตอนนี้โลกเปลี่ยนไปเล็กน้อย Git มีการติดตั้ง windows อย่างดี แม้ว่าฉันจะทดสอบไม่ได้อยู่บน windows (เพราะฉันไม่ได้ใช้ระบบนี้อีกแล้ว) แต่ฉันค่อนข้างมั่นใจว่า VCS สำคัญ ๆ (SVN, Git, Mercurial, Bazaar) มีการใช้งาน Windows อย่างเหมาะสมในขณะนี้ ข้อได้เปรียบสำหรับ SVN นี้หายไป จุดอื่น ๆ (รวมศูนย์กระจายและตรวจสอบการสนับสนุนเครื่องมือ) ยังคงใช้ได้
ฉันจะเลือกใช้ SVN เนื่องจากแพร่หลายมากขึ้นและเป็นที่รู้จักดีขึ้น
ฉันเดาว่า Git น่าจะดีกว่าสำหรับผู้ใช้ Linux
Git ยังไม่ได้รับการรองรับใน Windows มันเหมาะสำหรับระบบ Posix อย่างไรก็ตามการเรียกใช้ Cygwin หรือ MinGW ช่วยให้คุณสามารถเรียกใช้ Git ได้สำเร็จ
ทุกวันนี้ฉันชอบ Git มากกว่า SVN แต่ใช้เวลาสักพักกว่าจะถึงเกณฑ์ถ้าคุณมาจาก CVS, SVN land
ฉันอาจจะเลือก Git เพราะฉันรู้สึกว่ามันมีประสิทธิภาพมากกว่า SVN มีบริการโฮสติ้ง Code ราคาถูกที่ใช้งานได้ดีสำหรับฉัน - คุณไม่จำเป็นต้องสำรองข้อมูลหรือบำรุงรักษาใด ๆ - GitHubเป็นผู้สมัครที่ชัดเจนที่สุด
ที่กล่าวว่าฉันไม่รู้อะไรเลยเกี่ยวกับการรวมกันของ Visual Studio และระบบ SCM ที่แตกต่างกัน ฉันจินตนาการว่าการรวมกับ SVN จะดีขึ้นอย่างเห็นได้ชัด
ฉันเคยใช้ SVN มาเป็นเวลานาน แต่เมื่อใดก็ตามที่ฉันใช้ Git ฉันรู้สึกว่า Git นั้นมีพลังมากน้ำหนักเบาและถึงแม้ว่าจะมีการเรียนรู้ที่เกี่ยวข้องเล็กน้อย แต่ดีกว่า SVN
สิ่งที่ฉันสังเกตเห็นคือแต่ละโครงการ SVN ที่เติบโตขึ้นจะกลายเป็นโครงการขนาดใหญ่มากเว้นแต่จะถูกส่งออก ในกรณีที่โครงการ GIT (พร้อมกับข้อมูล Git) มีขนาดที่เบามาก
ใน SVN ฉันได้จัดการกับนักพัฒนาจากมือใหม่ไปจนถึงผู้เชี่ยวชาญและดูเหมือนว่าผู้ฝึกหัดและคนกลางจะแนะนำความขัดแย้งของไฟล์หากพวกเขาคัดลอกโฟลเดอร์หนึ่งจากโครงการ SVN อื่นเพื่อนำกลับมาใช้ใหม่ ในขณะที่ฉันคิดว่าใน Git คุณเพียงแค่คัดลอกโฟลเดอร์และใช้งานได้เพราะ Git ไม่แนะนำโฟลเดอร์. git ในโฟลเดอร์ย่อยทั้งหมด (เหมือนที่ SVN ทำ)
หลังจากจัดการกับ SVN มานานมากในที่สุดฉันก็คิดที่จะย้ายนักพัฒนาของฉันและฉันไปที่ Git เพราะมันเป็นเรื่องง่ายที่จะทำงานร่วมกันและผสานงานรวมทั้งข้อดีอย่างหนึ่งคือการเปลี่ยนแปลงของสำเนาในเครื่องสามารถทำได้มาก ที่ต้องการและจากนั้นก็ผลักไปที่สาขาบนเซิร์ฟเวอร์ในครั้งเดียวซึ่งแตกต่างจาก SVN (ที่เราต้องยอมรับการเปลี่ยนแปลงเป็นครั้งคราวในพื้นที่เก็บข้อมูลบนเซิร์ฟเวอร์)
ใครบ้างที่สามารถช่วยฉันตัดสินใจว่าฉันควรจะไปกับ Git จริงหรือไม่?
.svn
โฟลเดอร์ในแต่ละไดเรกทอรีย่อย "แก้ไข" ข้อผิดพลาดในการคัดลอกก่อนที่จะเกิดขึ้น
มันลงมาที่นี่:
การพัฒนาของคุณจะเป็นเชิงเส้นหรือไม่? ถ้าเป็นเช่นนั้นคุณควรติดอยู่กับการโค่นล้ม
หากในอีกทางหนึ่งการพัฒนาของคุณจะไม่เป็นเส้นตรงซึ่งหมายความว่าคุณจะต้องสร้างการแตกแขนงสำหรับการเปลี่ยนแปลงที่แตกต่างกันแล้วรวมการเปลี่ยนแปลงดังกล่าวกลับไปยังสายการพัฒนาหลัก (รู้จักกับ Git เป็นสาขาหลัก) มากขึ้นสำหรับคุณ
คุณเคยลองBzrไหม?
เป็นเรื่องที่ดีมาก connonical (คนที่สร้าง Ubuntu) ทำเพราะพวกเขาไม่ชอบสิ่งอื่นในตลาด ...
ฉันขอขยายคำถามและถามว่า Git ทำงานได้ดีบน MacOS หรือไม่
ตอบกลับความคิดเห็น: ขอบคุณสำหรับข่าวที่ฉันรอคอยที่จะลอง ฉันจะติดตั้งที่บ้านใน Mac ของฉัน
มีวิดีโอที่น่าสนใจบน YouTube เกี่ยวกับเรื่องนี้ มันมาจาก Linus Torwalds ตัวเอง: Goolge Tech Talk: Linus Torvalds บนคอมไพล์
SVN ดูเหมือนจะเป็นทางเลือกที่ดีภายใต้ Windows ซึ่งชี้โดยคนอื่น
หากนักพัฒนาซอฟต์แวร์บางคนของคุณต้องการลอง GIT ก็อาจใช้ GIT-SVN ที่ซึ่งมีการสร้างที่เก็บ SVN ขึ้นใหม่ในที่เก็บ GIT จากนั้นเขาควรจะสามารถทำงานในท้องถิ่นกับ GIT แล้วใช้ SVN เพื่อเผยแพร่การเปลี่ยนแปลงไปยังที่เก็บหลัก
คุณต้องไปกับ DVCS มันก็เหมือนกับการก้าวกระโดดควอนตัมในการจัดการแหล่งที่มา ส่วนตัวผมใช้Monotoneและเวลาในการพัฒนาที่เพิ่มขึ้นอย่างไม่มีที่สิ้นสุด เราใช้มันสำหรับ Windows, Linux และ Mac และมันเสถียรมาก ฉันได้สร้าง buildbot สร้างโครงการทุกคืนในแต่ละแพลตฟอร์ม
DVCS ในขณะที่เผยแพร่มักจะหมายความว่าคุณจะสร้างเซิร์ฟเวอร์กลางเพื่อให้ผู้คนผลักดันการเปลี่ยนแปลงไปมา