ฉันควรใช้ SVN หรือ Git หรือไม่ [ปิด]


321

ฉันกำลังเริ่มโครงการกระจายใหม่ ฉันควรใช้ SVN หรือ Git และทำไม


5
ใช่คอมไพล์ทำงานบน Mac หากคุณใช้ macports เพื่อติดตั้งมันจะติดตั้งส่วนหน้าของ mac เพื่อยอมรับและเรียกดูอินเตอร์เฟส
เซทจอห์นสันมี. ค.

3
ซ้ำได้ของstackoverflow.com/questions/871/…

3
@Andre - เพราะคุณสามารถใช้ MonoDevelop - ฉันเปลี่ยนจาก Vault เป็น SVN เพื่อให้ฉันสามารถพัฒนาซอฟต์แวร์. NET บน mac หรือพีซีของฉัน ไม่มีลูกค้าสำหรับห้องนิรภัย แต่มีไว้สำหรับ SVN :-)
schmoopy


4
Github / bitbucket + sourcetree = สวรรค์! - sourcetreeapp.com
thecodeassassin

คำตอบ:


253

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 (ปัจจุบัน)


24
อาจจะดู Hg (Mercury)
Joel

24
ทุกอย่างเริ่มดีขึ้นตั้งแต่เดือนตุลาคม 2551 คุณสามารถติดตั้ง TortoiseGit คว้า MSysGit รุ่นพกพารุ่นล่าสุดและบอก TortoiseGit ว่าจะหาได้จากที่ไหน ฉันเพิ่งย้าย repo svn ตัวใหญ่ของฉันไปที่ git วันนี้เพราะการเปลี่ยนชื่อที่ไม่ดีของ svn ในที่สุดก็ทำให้ฉันบ้าพอ
พวกเราทุกคนโมนิก้า

4
การย้ายที่ 2 ปีเรามีเครื่องมือ windows ที่ดี ขณะนี้ฉันใช้ netbeans กับ MSysGit ฉันโชคดีกับ TortoiseGit ฉันคิดว่ามันดีพอที่จะใช้ในการผลิต พิจารณาว่ามันยากแค่ไหนในการจัดการความขัดแย้งอย่างง่ายในคอมไพล์การโค่นล้มเป็นการปรับปรุงครั้งใหญ่
Keyo

24
เราใช้ Git บน Windows อย่างหนักและมีมาเป็นเวลานานแล้ว Git นั้นยอดเยี่ยมมากใน Windows
ชาร์ลีดอกไม้

13
@Oli จะเป็นการดีที่จะปรับปรุงคำตอบของคุณ (โดยเฉพาะเกี่ยวกับไคลเอนต์ Windows git) ตามความคิดเห็นที่นี่และประสบการณ์ของคุณ คำตอบปัจจุบันดูเหมือนจะเอนเอียงไปแล้วในขณะนี้ซึ่งผ่านไปแล้ว 2-3 ปี
amit

111

ฉันไม่เคยเข้าใจแนวคิดของ "git ที่ไม่ดีใน Windows"; ฉันพัฒนาโดยเฉพาะภายใต้ Windows และฉันไม่เคยมีปัญหาใด ๆ กับคอมไพล์

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


9
ในทางกลับกันฉันมีปัญหาบางอย่างเกี่ยวกับคอมไพล์บน windows มันทำสิ่งที่แปลกจริง ๆ กับ repo ของฉัน และฉันใช้รุ่นล่าสุดใน cygwin (มันเป็นเหมือนเดือนที่แล้ว)
Roman Plášil

7
@ Roman: พอร์ต Cygwin นั้นแทบจะไม่เหมือนกับพอร์ต win32 ดั้งเดิม ผมคาดว่าพอร์ต Cygwin จะมากน้อยดีผ่านการทดสอบ ...
SAMB

49
"ฟีเจอร์ที่มากกว่าที่คุณเคยใช้" เป็นธงสีแดงในหนังสือของฉัน
BT

26
@ BT "ธงแดง" ฉันไม่เห็นด้วย ฉันมักจะพบว่าตัวเองต้องการมีวิธีการทำบางอย่างและหลังจากการค้นหาเล็กน้อยฉันพบว่ามีคำสั่งไม่กี่คำที่ฉันไม่รู้เกี่ยวกับสิ่งนั้น ฉันใช้ GIT กับเครื่อง windows ของฉันด้วยและยังไม่มีปัญหาที่สำคัญ
ทดสอบ 123

@ test123 แต่แล้วมันก็ไม่ใช่ฟีเจอร์ "คุณอาจจะเคยใช้ [n]" เพราะคุณใช้มันจริง ๆ
mulllhausen

77

นี่คือสำเนาของคำตอบที่ฉันทำจากคำถามซ้ำ ๆ ตั้งแต่ลบเกี่ยวกับ Git vs. SVN (กันยายน 2009)

ดีขึ้นหรือไม่ นอกเหนือจากลิงค์ปกติWhyGitIsBetterThanXที่แตกต่างกัน:

หนึ่งคือ VCS กลางตามสำเนาถูกสำหรับสาขาและแท็กอื่น ๆ (Git) เป็น VCS กระจายตามกราฟของการแก้ไข ดูเพิ่มเติมแนวคิดหลักของ VCS


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

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

  • Git คือการจัดการเนื้อหาไฟล์ (เครื่องมือที่ทำเพื่อผสานไฟล์) ซึ่งพัฒนาเป็นระบบควบคุมเวอร์ชันที่แท้จริงโดยใช้ DAG ( Directed Acyclic Graph ) ของการกระทำซึ่งสาขาเป็นส่วนหนึ่งของประวัติศาสตร์ของข้อมูล (ไม่ใช่ข้อมูลเอง) ) และตำแหน่งที่แท็กเป็นข้อมูลเมตาจริง

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

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

ยังคงความคิดเห็นเกี่ยวกับคำตอบเก่า (ถูกลบ) ยืนยันว่า:

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

ซึ่งฉันตอบว่า:

"substitutability" ... คำที่น่าสนใจ ( ใช้ในการเขียนโปรแกรมคอมพิวเตอร์ )
นอกหลักสูตร Git นั้นแทบจะเป็น SVN ย่อยไม่ได้

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

แน่นอนคุณไม่สามารถ (เสมอ) แทนที่ SVN ด้วย Git "โดยไม่เปลี่ยนแปลงคุณสมบัติที่ต้องการของโปรแกรมนั้น (ความถูกต้อง, งานที่ดำเนินการ, ... )" (ซึ่งเป็นการอ้างอิงถึงคำจำกัดความการทดแทนที่กล่าวมาข้างต้น):

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

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

เป้าหมายทั่วไปทั่วไปอาจเหมือนกัน แต่คุณไม่สามารถใช้ในลักษณะเดียวกันและไม่สามารถแก้ปัญหาระดับเดียวกันได้ (ในขอบเขตหรือความซับซ้อน)


10
ฉันไม่เห็นด้วยกับคุณที่ git และ svn นั้นแตกต่างกันโดยพื้นฐาน แต่ฉันไม่เห็นด้วยกับหลาย ๆ ประเด็นของคุณ svn อาจถูกเขียนขึ้นเพื่อแทนที่ cvs แต่มันไม่มีส่วนเกี่ยวข้องเลยในขณะที่ cvs เริ่มต้นเป็นสคริปต์ที่ด้านบนของ RCS ดังนั้นจึงมีความสัมพันธ์โดยตรง อย่างไรก็ตามบุคคลที่คุณอ้างถูกต้องทั้งคู่ต่างก็จัดการการแก้ไขไฟล์การใช้งานและกระบวนการที่เกิดขึ้น มันเหมือนกับความแตกต่างระหว่าง CRC และ SHA1 โดยพื้นฐานแตกต่างกันมาก แต่พวกเขาก็ทำสิ่งเดียวกัน
Erik Funkenbusch

37

ข้อดี 2 ข้อที่สำคัญของ SVN ที่ไม่ค่อยมีการอ้างถึง:

  1. รองรับไฟล์ขนาดใหญ่ นอกจากโค้ดแล้วฉันยังใช้ SVN เพื่อจัดการโฮมไดเรกทอรีของฉัน SVN เป็น VCS เดียว (กระจายหรือไม่) ที่ไม่สำลักในไฟล์ TrueCrypt ของฉัน (โปรดแก้ไขให้ฉันถ้ามี VCS อื่นที่จัดการไฟล์ 500MB + ได้อย่างมีประสิทธิภาพ) นี่เป็นเพราะการเปรียบเทียบต่างถูกสตรีม (นี่เป็นจุดสำคัญมาก) Rsync ไม่สามารถยอมรับได้เพราะไม่ใช่แบบสองทาง

  2. ชำระเงิน / ตรวจสอบที่เก็บบางส่วน (ตำบล) Mercurial และ bzr ไม่สนับสนุนสิ่งนี้และการสนับสนุนของ git นั้นมี จำกัด นี่เป็นสิ่งที่ไม่ดีในสภาพแวดล้อมของทีม แต่ประเมินค่าไม่ได้ถ้าฉันต้องการตรวจสอบบางสิ่งบางอย่างในคอมพิวเตอร์เครื่องอื่นจากบ้านของฉัน

เพียงแค่ประสบการณ์ของฉัน


6
"โปรดแก้ไขให้ฉันด้วยถ้ามี VCS อีกตัวที่รองรับไฟล์ขนาด 500MB + ได้อย่างมีประสิทธิภาพ" - แน่นอน!
james creasy

8
อย่างแรง = ไม่ฟรี นอกจากนี้ Perforce ไม่สามารถใช้ได้กับทุกแพลตฟอร์ม
WhyNotHugo

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

1
@Hugo เท่าที่ฉันรู้ลูกค้า Perforce สามารถใช้ได้กับ Windows, Unix, Linux Variants, Mac, Amiga, BeOS, Cygwin, HPUX, IBM AS / 400, OS / 2, DEC VMS และ Novell File Server มีแพลตฟอร์มที่เกี่ยวข้องหายไปจากรายการหรือไม่
eis

1
ใช่ OpenBSD (และฉันรู้สิ่งนี้จากประสบการณ์ไม่จำเป็นต้อง google สิ่งนี้) ฉันเดาว่ามันจะไม่ทำงานกับ maemo เหมือนกัน แต่ฉันอาจผิด (และใช่ฉันใช้ git กับ maemo)
WhyNotHugo

25

หลังจากทำการวิจัยเพิ่มเติมและตรวจสอบลิงค์นี้: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(สารสกัดบางอย่างด้านล่าง):

  • มันเร็วอย่างไม่น่าเชื่อ ไม่มี SCM อื่นที่ฉันใช้แล้วสามารถใช้งานได้และฉันได้ใช้งานมากมายรวมถึงการโค่นล้ม Perforce darcs, BitKeeper, ClearCase และ CVS
  • มันกระจายอย่างเต็มที่ เจ้าของที่เก็บไม่สามารถบอกได้ว่าฉันทำงานอย่างไร ฉันสามารถสร้างสาขาและทำการเปลี่ยนแปลงในขณะที่ตัดการเชื่อมต่อบนแล็ปท็อปของฉันจากนั้นซิงโครไนซ์นั้นกับที่เก็บอื่น ๆ จำนวนเท่าใดก็ได้
  • การซิงโครไนซ์สามารถเกิดขึ้นได้ในหลาย ๆ สื่อ แชนเนล SSH ผ่าน HTTP ผ่าน WebDAV โดย FTP หรือโดยการส่งอีเมลที่มีแพตช์ที่จะใช้งานโดยผู้รับข้อความ ที่เก็บส่วนกลางไม่จำเป็น แต่สามารถใช้ได้
  • กิ่งก้านสาขามีราคาถูกกว่าในการโค่นล้ม การสร้างสาขานั้นง่ายเหมือนการเขียนไฟล์ขนาด 41 ไบต์ลงดิสก์ การลบสาขานั้นง่ายเหมือนการลบไฟล์นั้น
  • แตกต่างจากสาขาการโค่นล้มดำเนินการตามประวัติศาสตร์ที่สมบูรณ์ของพวกเขา โดยไม่ต้องทำการคัดลอกที่แปลกและเดินผ่านสำเนา เมื่อใช้การโค่นล้มฉันมักพบว่ามันอึดอัดใจที่จะดูประวัติของไฟล์ในสาขาที่เกิดขึ้นก่อนที่จะสร้างสาขา จาก #git: spearce: ฉันไม่เข้าใจเรื่องเกี่ยวกับ SVN ในหน้านี้ ฉันสร้างสาขาใน SVN และเรียกดูประวัติแสดงประวัติทั้งหมดของไฟล์ในสาขา
  • การรวมสาขานั้นง่ายและอัตโนมัติมากขึ้นใน Git ในการโค่นล้มคุณต้องจำสิ่งที่แก้ไขครั้งสุดท้ายที่คุณผสานจากเพื่อให้คุณสามารถสร้างคำสั่งผสานที่ถูกต้อง Git ทำสิ่งนี้โดยอัตโนมัติและทำให้ถูกต้องเสมอ ซึ่งหมายความว่ามีโอกาสน้อยที่จะทำผิดพลาดเมื่อรวมสองสาขาเข้าด้วยกัน
  • การรวมสาขาจะถูกบันทึกเป็นส่วนหนึ่งของประวัติที่เหมาะสมของที่เก็บ ถ้าฉันผสานสองกิ่งเข้าด้วยกันหรือถ้าฉันรวมสาขากลับเข้าไปในลำต้นมันมาจากการดำเนินการผสานนั้นจะถูกบันทึกไว้เป็นส่วนหนึ่งของประวัติศาสตร์การตีพิมพ์ใหม่ที่ฉันและเมื่อ เป็นการยากที่จะโต้แย้งว่าใครทำการผสานเมื่ออยู่ในบันทึก
  • การสร้างที่เก็บเป็นการดำเนินการเล็กน้อย: mkdir foo; cd foo; git init นั่นแหล่ะ ซึ่งหมายความว่าฉันสร้างที่เก็บ Git สำหรับทุกสิ่งในวันนี้ ฉันมักจะใช้ที่เก็บหนึ่งแห่งต่อคลาส ที่เก็บส่วนใหญ่นั้นมีขนาดไม่เกิน 1 MB ในดิสก์เนื่องจากเก็บบันทึกการบรรยายการบ้านและคำตอบของ LaTeX ของฉันเท่านั้น
  • รูปแบบไฟล์ภายในของที่เก็บนั้นง่ายอย่างไม่น่าเชื่อ ซึ่งหมายความว่าการซ่อมแซมทำได้ง่ายมาก แต่ดีกว่าเพราะง่ายมากยากที่จะเสียหาย ฉันไม่คิดว่ามีใครเคยมีที่เก็บ Git เสียหาย ฉันเคยเห็นการโค่นล้มกับ fsfs เสียหายแล้ว และฉันเห็น Berkley DB เสียหายตัวเองหลายครั้งเกินไปที่จะเชื่อถือรหัสของฉันไปที่แบ็กเอนด์ bdb ของการโค่นล้ม
  • รูปแบบไฟล์ของ Git นั้นดีในการบีบอัดข้อมูลแม้จะเป็นรูปแบบที่ง่ายมาก ที่เก็บ CVS ของโครงการ Mozilla มีขนาดประมาณ 3 GB ประมาณ 12 GB ในรูปแบบ fsfs ของ Subversion ใน Git มีขนาดประมาณ 300 MB

หลังจากอ่านทั้งหมดนี้ฉันเชื่อว่า Git เป็นวิธีที่จะไป (แม้ว่าจะมีช่วงการเรียนรู้เล็กน้อยอยู่) ฉันใช้ Git และ SVN บนแพลตฟอร์ม Windows เช่นกัน

ฉันชอบที่จะได้ยินสิ่งที่คนอื่นพูดหลังจากอ่านข้างต้น?


15
Git นั้นรวดเร็วอย่างไม่น่าเชื่อในการดำเนินการบางอย่างส่วนใหญ่เป็นเพราะการดำเนินการมีผลเฉพาะกับพื้นที่เก็บข้อมูลของคุณ ตัวอย่างเช่น Git checkin ไม่ควรเทียบกับ SVN checkin อย่างยุติธรรมเพราะ SVN checkin เป็นเหมือนการผลักดันการเปลี่ยนแปลงไปยังพื้นที่เก็บข้อมูล staging สำหรับส่วนที่เหลือของทีมของคุณ ที่ต้องมีการตีเครือข่ายและการเปรียบเทียบ Git ไม่มีเครือข่ายกระทำการถ่ายโอนเครือข่าย smacks ของการเปรียบเทียบที่ไม่เหมาะสม หากคุณส่งมอบฮาร์ดไดรฟ์และสูญเสียฮาร์ดไดรฟ์ด้วย Git คุณสูญเสียการเปลี่ยนแปลง ไม่เป็นไรถ้านั่นคือสิ่งที่คุณคาดหวัง แต่ก็ไม่ได้คาดหวังใน SCM ที่ไม่เผยแพร่
Edwin Buck

1
@EdwinBuck ไม่ได้รับสิ่งที่ Waqar ไม่เข้าบัญชีในการทดสอบแม้จะมีเวลาของเครือข่ายนำมาคอมไพล์บัญชีมีแนวโน้มที่จะได้เร็วขึ้น: git-scm.com/about/small-and-fast
Sqeaky

ของคุณ "การสร้างพื้นที่เก็บข้อมูลเป็นงานเล็ก ๆ น้อย ๆ" จุดคือextremlyสำคัญโดยเฉพาะอย่างยิ่งบน Windows: เมื่อเทียบกับ SVN ก็ไกลได้ง่ายขึ้นได้อย่างรวดเร็วจำลองพวงของการเชื่อมต่อระหว่างกัน Repos กระจายทั้งหมด conected ไปกลาง (--bare) repo กับ Git กว่า มันจะทำแบบอะนาล็อกกับ SVN (ติดตั้งแอปพลิเคชันเซิร์ฟเวอร์ Windows SVN และอื่น ๆ ) นอกจากนี้ยัง (bizarely) ผมพบว่า Git เพื่อให้สอดคล้องมากขึ้นทั่วทั้งระบบปฏิบัติการ: บรรทัดคำสั่งที่ถูกออกแบบมาเป็นอย่างดีและทำให้เพียงพอมากที่สุดของเวลา (และความจริงที่เหมือนกันระหว่างระบบปฏิบัติการ) VS SVN พื้นเมืองต่างๆปพลิเคชันไคลเอนต์ / เซิร์ฟเวอร์ ...
Shivan มังกร

1
บทความ wiki ที่คุณอ้างถึงเต็มไปด้วยข้อผิดพลาด ดังนั้นคำตอบของคุณผิด downvoted มีหน้าพูดคุยเกี่ยวกับวิกิที่อ้างถึงsvnvsgit.comบอกสาเหตุที่การเปรียบเทียบผิด
58

เร็วอย่างไม่น่าเชื่อ? ฉันได้ย้ายโครงการ ciforth จาก CV ในประเทศไปยัง Github นี่เป็นโครงการง่ายๆ แต่มีไฟล์หลักขนาดใหญ่หนึ่งไฟล์ 10,000 บรรทัด หากฉันพยายามที่จะใช้ความผิดกับไฟล์นี้ gitHub ตกอยู่ในการหมดเวลา ส่วนใหญ่ถ้าไม่มีเนื้อหาที่พูดอย่างรวดเร็วและยืนยันในการใช้คุณสมบัติเช่นนั้นมันไม่ได้เป็นความคิดเห็นที่สมดุลทำให้ฉันสงสัยเกี่ยวกับสิ่งที่คุณพูด Groetjes Albert
Albert van der Horst

12

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

ฉันเชื่อว่ามันจะเป็นช่วงเวลาสั้น ๆ ก่อนที่ Git จะทำงานได้ดีบน Windows เช่นเดียวกับใน Unix และ Mac OS X (ตั้งแต่คุณถาม)

การโค่นล้มมีเครื่องมือที่ยอดเยี่ยมสำหรับ Windows เช่น TortoiseSVN สำหรับการรวม Explorer และ AnkhSVN สำหรับการรวม Visual Studio


11

สิ่งที่ตลกคือ: ฉันโฮสต์โครงการใน Subversion Repos แต่เข้าถึงได้ผ่านคำสั่ง Git Clone

โปรดอ่านพัฒนาด้วย Git ในโครงการ Google Code

ถึงแม้ว่า Google Code จะพูดถึงการโค่นล้ม แต่คุณสามารถใช้ Git ระหว่างการพัฒนาได้อย่างง่ายดาย การค้นหา "git svn" แสดงให้เห็นการปฏิบัตินี้แพร่หลายและเราก็สนับสนุนให้คุณทดลองด้วย

การใช้ Git บน Svn Repository ให้ประโยชน์แก่ฉัน:

  1. ฉันสามารถทำงานกระจายในหลาย ๆ เครื่องได้รับมอบหมายและดึงจากและไปยังพวกเขา
  2. ฉันมีที่เก็บ svn ส่วนกลาง backup/publicให้ผู้อื่นลองดู
  3. และพวกเขามีอิสระที่จะใช้ Git ด้วยตนเอง

3
เพียงทราบ: ณ เดือนกรกฎาคม 2554 Google Code สนับสนุน Git โดยกำเนิด
Jeremy Salwen

9

ไม่ตอบคำถามของคุณจริงๆ แต่ถ้าคุณต้องการประโยชน์ของDistributed Revision Control - ดูเหมือนว่าคุณทำ - และคุณใช้ Windows ฉันคิดว่าคุณควรใช้Mercurialดีกว่าGit เนื่องจาก Mercurial มีการสนับสนุน Windows ที่ดีกว่ามาก Mercurial ก็มีพอร์ต Mac ด้วย


9

หากทีมของคุณคุ้นเคยกับโปรแกรมควบคุมเวอร์ชันและแหล่งที่มาเช่น cvs หรือ svn ดังนั้นสำหรับโครงการที่เรียบง่ายและเล็ก (เช่นที่คุณอ้างว่าเป็น) ฉันขอแนะนำให้คุณใช้ SVN ฉันรู้สึกสบายใจกับ svn แต่สำหรับโครงการอีคอมเมิร์ซปัจจุบันที่ฉันทำกับ django ฉันตัดสินใจที่จะทำงานกับ git (ฉันใช้ git ใน svn-mode นั่นคือด้วย repo ส่วนกลางที่ฉันผลักดันและดึง จากเพื่อทำงานร่วมกับนักพัฒนาซอฟต์แวร์อย่างน้อยหนึ่งราย) นักพัฒนาคนอื่นพอใจกับ SVN และในขณะที่ประสบการณ์ของคนอื่นอาจแตกต่างกันเราทั้งคู่ต่างก็มีช่วงเวลาที่เลวร้ายมากที่รับคอมไพล์โครงการขนาดเล็กนี้ (เราเป็นทั้งผู้ใช้ Linux ที่ไม่ยอมใครง่ายๆหากเป็นเรื่องสำคัญ)

ระยะของคุณอาจแตกต่างกันไปแน่นอน


8

แน่นอนsvnเนื่องจาก Windows เป็นที่ดีที่สุด - พลเมืองอันดับสองในโลกของgit(ดูhttp://en.wikipedia.org/wiki/Git_(software)#Portabilityสำหรับรายละเอียดเพิ่มเติม)

อัปเดต: ขออภัยสำหรับลิงก์ที่ใช้งานไม่ได้ แต่ฉันเลิกพยายามใช้ SO เพื่อทำงานกับ URI ที่มีวงเล็บอยู่ [แก้ไขลิงก์ทันที -ed]


1
FYI: ใส่ URL ในวงเล็บเหลี่ยมหรือแทนที่วงเล็บด้วย% 28 และ% 29
PhiLho

1
การเข้ารหัส URL จะทำงานกับไวยากรณ์ [] () หรือไม่
แฮงค์เกย์

16
นี่คือ FUD ที่ไม่ถูกต้อง Git นั้นยอดเยี่ยมบน Windows และ SVN นั้นแย่มากในทุกที่
ชาร์ลีดอกไม้

6
สำหรับผู้ที่ downvoting ฉันโปรดกลับไปดูความคิดเห็นของนักพัฒนาจากประมาณปี 2008: เป็นที่ชัดเจนว่า Linus และแก๊งค์ไม่สนใจการสนับสนุน Windows ไม่เป็นไรฉันไม่ต้องการทำเช่นนั้นและซอฟต์แวร์ของฉันก็ไม่ได้ซับซ้อนเหมือน VCS ที่คาดว่าพฤติกรรม POSIXish จากระบบไฟล์ อย่างไรก็ตามดูเหมือนว่าจะไม่เป็นธรรมในการกำหนดลักษณะคำสั่งของฉันเป็น FUD ถ้าคุณดูบริบท
แฮงค์ Gay

2
บางทีในปี 2008 คอมไพล์ก็ไม่ดีบน Windows แต่ฉันใช้ msysgit มาตั้งแต่ปี 2009 และใช้งานได้อย่างไม่มีที่ติ นั่นรวมถึง gitk ซึ่งเทียบเท่าเดสก์ท็อปออฟไลน์ของ GitHub
Dan Dascalescu

8

ประเด็นหลักคือ 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 นี้หายไป จุดอื่น ๆ (รวมศูนย์กระจายและตรวจสอบการสนับสนุนเครื่องมือ) ยังคงใช้ได้


ฉันมองโลกในแง่ดีว่าขอบเขตความไม่เกี่ยวข้องจะสั้นลงกว่าสองถึงสามปี
Greg Hewgill

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

1
มันเป็นปีหรือสองปีต่อมา มันเป็นอย่างไร :)
Merlyn Morgan-Graham

3
Git ขาดส่วนขยายของโมเดล SCM แบบกระจายไปยังเฟสอื่น ๆ ของขั้นตอนการพัฒนาซอฟต์แวร์ เราไม่มีโมเดลที่ดีสำหรับระบบ build build แบบกระจายกระจายการทดสอบอัตโนมัติแบบกระจายการควบคุมคุณภาพการควบคุม release ฯลฯ เราเพิ่งได้รับการสนับสนุนทดลองใช้สำหรับการสำรองข้อมูลแบบกระจายและหลังจากผ่านการวิจัยมาหลายทศวรรษ Git ดังกล่าวมอบข้อเสนอเพิ่มเติมให้แก่ผู้พัฒนาและน้อยกว่ากระบวนการพัฒนาซอฟต์แวร์ การใช้งาน Git ทั้งหมดในที่สุดก็อวยพรให้ repo คนหนึ่งเป็นศูนย์กลางซึ่งทำให้ความสามารถของ Git ที่น่าสนใจที่สุดกลายเป็นโทรสารของ SVN ได้ง่ายขึ้น
Edwin Buck

1
@hibbelig Git ไม่มีที่เก็บส่วนกลางทุกที่เก็บจะมีประสิทธิภาพ (เนื่องจากการออกแบบแบบกระจาย) เท่ากัน ซึ่งหมายความว่าคุณสามารถทำใหม่ไปป์ไลน์การผลิตของคุณเพื่อจัดการที่เก็บข้อมูลทั้งหมดอย่างเท่าเทียมกันหรือให้พรที่เก็บหนึ่งที่ปลอมแปลงเพื่อให้อยู่ในสถานะ "สูงเกินจริง" (หรือที่เก็บส่วนกลาง ) ถ้าคุณทำในอดีตไม่มีใครรู้มากนักเกี่ยวกับการสร้างท่อขนานที่ปล่อยออกมาจากโต๊ะทำงานของนักพัฒนาหากคุณทำสิ่งหลังสัญญาของการประมวลผลแบบกระจายจะถูกโกงโดยการประชุมแบบรวมศูนย์
Edwin Buck

6

ฉันจะเลือกใช้ SVN เนื่องจากแพร่หลายมากขึ้นและเป็นที่รู้จักดีขึ้น

ฉันเดาว่า Git น่าจะดีกว่าสำหรับผู้ใช้ Linux


1
อย่างไรก็ตามสิ่งนี้กำลังเปลี่ยนแปลงอย่างรวดเร็ว SVN สูญเสียส่วนแบ่งการตลาดในขณะที่ GIT ได้รับ: ตัวอย่าง: wikivs.com/wiki/Git_vs_Subversion# ความนิยมหรือโปรแกรมเมอร์
program.stackexchange.com/questions/136079/ …

@Zelphir: ฉันจะไม่เรียก 7 ปีอย่างรวดเร็ว แต่ใช่ GIT ได้รับส่วนแบ่งการตลาดและเป็นวิธีที่ดีกว่าสำหรับการรวมไฟล์
Burkhard

4

Git ยังไม่ได้รับการรองรับใน Windows มันเหมาะสำหรับระบบ Posix อย่างไรก็ตามการเรียกใช้ Cygwin หรือ MinGW ช่วยให้คุณสามารถเรียกใช้ Git ได้สำเร็จ

ทุกวันนี้ฉันชอบ Git มากกว่า SVN แต่ใช้เวลาสักพักกว่าจะถึงเกณฑ์ถ้าคุณมาจาก CVS, SVN land


8
กำหนด 'กำเนิด' msysgit ใช้งานได้ดี
Milan Babuškov

4

ฉันอาจจะเลือก Git เพราะฉันรู้สึกว่ามันมีประสิทธิภาพมากกว่า SVN มีบริการโฮสติ้ง Code ราคาถูกที่ใช้งานได้ดีสำหรับฉัน - คุณไม่จำเป็นต้องสำรองข้อมูลหรือบำรุงรักษาใด ๆ - GitHubเป็นผู้สมัครที่ชัดเจนที่สุด

ที่กล่าวว่าฉันไม่รู้อะไรเลยเกี่ยวกับการรวมกันของ Visual Studio และระบบ SCM ที่แตกต่างกัน ฉันจินตนาการว่าการรวมกับ SVN จะดีขึ้นอย่างเห็นได้ชัด


4

ฉันเคยใช้ SVN มาเป็นเวลานาน แต่เมื่อใดก็ตามที่ฉันใช้ Git ฉันรู้สึกว่า Git นั้นมีพลังมากน้ำหนักเบาและถึงแม้ว่าจะมีการเรียนรู้ที่เกี่ยวข้องเล็กน้อย แต่ดีกว่า SVN

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

ใน SVN ฉันได้จัดการกับนักพัฒนาจากมือใหม่ไปจนถึงผู้เชี่ยวชาญและดูเหมือนว่าผู้ฝึกหัดและคนกลางจะแนะนำความขัดแย้งของไฟล์หากพวกเขาคัดลอกโฟลเดอร์หนึ่งจากโครงการ SVN อื่นเพื่อนำกลับมาใช้ใหม่ ในขณะที่ฉันคิดว่าใน Git คุณเพียงแค่คัดลอกโฟลเดอร์และใช้งานได้เพราะ Git ไม่แนะนำโฟลเดอร์. git ในโฟลเดอร์ย่อยทั้งหมด (เหมือนที่ SVN ทำ)

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

ใครบ้างที่สามารถช่วยฉันตัดสินใจว่าฉันควรจะไปกับ Git จริงหรือไม่?


ฉันจะไม่เรียกนักพัฒนาซอฟต์แวร์ใด ๆ ที่คัดลอกโฟลเดอร์ควบคุม SVN ไปไว้ในโครงการอื่นเพื่อนำมาใช้ซ้ำและไม่คาดว่าจะมีปัญหา 'กลาง' ที่เห็นได้ชัด ฉันจะเรียกพวกเขาว่าเณร ใช่คุณพูดถูกเพราะโฟลเดอร์ย่อย. svn ที่แจ้งให้ SVN ทราบว่าเป็นที่เก็บไฟล์ใด หากผู้ใช้ลบโฟลเดอร์ย่อย. svn นี้ผู้ใช้สามารถนำเข้าโฟลเดอร์ไปยังโครงการ SVN ใหม่ได้ ฉันยังอยู่กับ SVN ด้วยตัวเอง แต่ความต้องการของฉันมีน้อย GIT นั้นยอดเยี่ยมสำหรับโครงการขนาดใหญ่
dyasta

3
ลูกค้า svn ล่าสุดไม่จำเป็นต้องมี.svnโฟลเดอร์ในแต่ละไดเรกทอรีย่อย "แก้ไข" ข้อผิดพลาดในการคัดลอกก่อนที่จะเกิดขึ้น
Edwin Buck

4

มันลงมาที่นี่:

การพัฒนาของคุณจะเป็นเชิงเส้นหรือไม่? ถ้าเป็นเช่นนั้นคุณควรติดอยู่กับการโค่นล้ม

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


3

คุณเคยลองBzrไหม?

เป็นเรื่องที่ดีมาก connonical (คนที่สร้าง Ubuntu) ทำเพราะพวกเขาไม่ชอบสิ่งอื่นในตลาด ...


แม้ว่าการรองรับ windows ต้องการการทำงานที่นี่จริง ๆ ไม่มากที่ฉันไม่ได้ใช้มันอย่างมีความสุขสำหรับการเขียนโปรแกรมล่าสุดของฉันภายใต้ Windows (ซึ่งฉันทำบิตยุติธรรม) หรืออะไร แต่ยัง ...
SamB

เกือบ 100% กับระบบปฏิบัติการที่ผู้คน "ทำมัน [ซอฟต์แวร์ใด ๆ ] เพราะไม่ชอบอะไรในตลาด"
WhyNotHugo

@Hugo กับโอเพ่นซอร์สหากพวกเขาชอบสิ่งอื่นในตลาดพวกเขาจะมีส่วนร่วมกับมันแทนที่จะทำสิ่งใหม่
yingted

นี่ไม่ใช่คำตอบสำหรับคำถามเลย
Albert van der Horst

@AlbertvanderHorst ไม่มันไม่ใช่คำถามที่ตอบในวันป่าตะวันตกของ SO เมื่อไม่มีใครรู้ดีขึ้นและเสนอทางเลือก พิสูจน์ได้อย่างรวดเร็วดูเหมือนว่าฉันยังสะกดชื่อ Canonical ด้วย น่าอายจริงๆเรา!
Omar Kooheji

3

ฉันขอขยายคำถามและถามว่า Git ทำงานได้ดีบน MacOS หรือไม่

ตอบกลับความคิดเห็น: ขอบคุณสำหรับข่าวที่ฉันรอคอยที่จะลอง ฉันจะติดตั้งที่บ้านใน Mac ของฉัน


1
ใช่มันใช้งานได้อย่างสวยงาม ฉันติดตั้งผ่าน MacPorts และใช้งานทุกวัน
Greg Hewgill

มันทำ มันยอดเยี่ยมกับระบบที่ใช้ POSIX (Unix, Linux, Solaris, BSD, ฯลฯ ) มันเป็นเพียง Windows ที่มีปัญหาอยู่
Oli

และ git-gui และ gitk อาจทำงานได้เหมือนกันภายใต้ OS-X เช่นเดียวกับ Linux และ Windows ตรงกันข้ามกับ TortoiseSVN ซึ่ง AFAIK เป็นแบบ Windows เท่านั้นหรือไม่
David Schmitt

@ David Schmitt: อืม tortoisesvn.tigris.orgเรียกมันว่า "Windows Shell Extension for Subversion" ดังนั้นฉันจะถือว่าใช่ใช่ ;-)
SamB

@ Robert: ประสบการณ์ของคุณกับ git บน OS X เป็นอย่างไร?
David Schmitt


2

SVN ดูเหมือนจะเป็นทางเลือกที่ดีภายใต้ Windows ซึ่งชี้โดยคนอื่น

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


1

คุณต้องไปกับ DVCS มันก็เหมือนกับการก้าวกระโดดควอนตัมในการจัดการแหล่งที่มา ส่วนตัวผมใช้Monotoneและเวลาในการพัฒนาที่เพิ่มขึ้นอย่างไม่มีที่สิ้นสุด เราใช้มันสำหรับ Windows, Linux และ Mac และมันเสถียรมาก ฉันได้สร้าง buildbot สร้างโครงการทุกคืนในแต่ละแพลตฟอร์ม

DVCS ในขณะที่เผยแพร่มักจะหมายความว่าคุณจะสร้างเซิร์ฟเวอร์กลางเพื่อให้ผู้คนผลักดันการเปลี่ยนแปลงไปมา

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