Git vs เซิร์ฟเวอร์มูลฐานทีม [ปิด]


263

ฉันแนะนำ Git ให้กับทีมนักพัฒนาของฉันและทุกคนเกลียดมันยกเว้นฉัน พวกเขาต้องการแทนที่ด้วย Team Foundation Server ฉันรู้สึกว่านี่เป็นก้าวถอยหลังที่ยิ่งใหญ่แม้ว่าฉันจะไม่คุ้นเคยกับ TFS มากนัก คนที่มีประสบการณ์สามารถเปรียบเทียบการสนับสนุนการแยกสาขาใน TFS กับ Git branching ได้หรือไม่? นอกจากนี้โดยทั่วไปข้อดีและข้อเสียของ TFS คืออะไร ฉันจะเกลียดมันหลังจากใช้ Git มาสองสามปีหรือไม่


24
คุณเผชิญกับการต่อสู้ที่ยากลำบากในเกมนี้ Git นั้นไม่ได้พัฒนาเต็มที่เท่า svn / hg / tfs บน Windows ซึ่งไม่ได้รบกวนทหารคอมไพล์มากนัก แต่เป็นอาการปวดหัวที่สำคัญสำหรับผู้มาใหม่
Marcelo Cantos

7
@Jacko: ฉันประเมิน git-for-Windows ในช่วงสองสามสัปดาห์ที่ผ่านมา ในขณะที่มันได้รับการปรับปรุงให้ดีขึ้นอย่างเห็นได้ชัดตั้งแต่ฉันดูครั้งสุดท้ายเมื่อประมาณหนึ่งปีที่ผ่านมามันยังคงเป็นการเตรียมพร้อมสำหรับช่วงเวลาสำคัญกับนักพัฒนา Windows ทั่วไป เช่นปลั๊กอิน VS มีความฉิบหายตรงไปตรงมา มันไม่มีอะไรนอกจากตัวเลือกเมนูมากมายภายใต้แถบเมนูหลักซึ่งจะล้มเหลวอย่างเงียบ ๆ หากเลือกโซลูชันแทนที่จะเป็นโครงการ ฉันไม่สามารถใช้เครื่องมือคอมมิชชันในการทำดัชนีการล่าสัตว์และบรรทัดซึ่งเป็นเหตุผลหลักที่ฉันใช้ git และการไปที่ git gui (ซึ่งเป็นความโหดร้ายที่สมบูรณ์แบบจากการใช้งานของ POV) ที่ดีที่สุด
Marcelo Cantos

6
แม้ว่าฉันจะซื่อสัตย์กับคุณ มันฆ่าฉันเพื่อวางคอมไพล์ ตรงกันข้ามกับมุมมองที่ได้รับความนิยมว่าทั้งสองอยู่ในระดับที่เท่าเทียมฉันพบว่าแบบจำลองของ git นั้นมีพลังและตรรกะมากกว่า Mercurial ไม่มีอะไรที่เทียบได้กับดัชนีของคอมไพล์และฉันเกลียดวิธีที่จะแตกสาขา แนวคิดของฉลากของ Git ที่คุณเคลื่อนไหวไปมาและซิงโครไนซ์ระหว่าง repos นั้นสง่างามมาก บุ๊กมาร์กของ Mercurial เป็นสิ่งเดียวที่เข้ามาใกล้และเป็น PITA สำหรับทุกคน สิ่งสำคัญที่สุดคือความสำเร็จนั้นมีความเป็นไปได้ที่ svn → Mercurial มากกว่า svn → git เนื่องจากพนักงานและวุฒิภาวะของเครื่องมือ
Marcelo Cantos

4
ใช่ Git เป็นตัวกำหนดอำนาจและความสง่างาม แต่ไม่ใช่ทุกคนพร้อมสำหรับมัน
Jacko

7
@ JamesReategui: โดยส่วนตัวแล้วฉันคิดว่า ( stackoverflow.com/a/11362998/520162 ) ว่าการรวม VCS ใน IDE เข้าด้วยกันนั้นเป็นคดเคี้ยว ลองจินตนาการว่าคุณกำลังเปลี่ยน IDE หลักของคุณในวันพรุ่งนี้ ถ้าคุณปล่อย VS สำหรับ Eclipse คุณเป็นจริงๆยินดีที่จะเรียนรู้บูรณาการ VCS ใหม่หรือไม่? Git นั้นยอดเยี่ยมในบรรทัดคำสั่ง ( stackoverflow.com/a/5645910/520162 ) เรียนรู้และคุณจะค้นพบโลกที่ทรงพลังอย่างไม่น่าเชื่อของการควบคุมเวอร์ชัน
eckes

คำตอบ:


273

ฉันคิดว่าคำสั่ง

ทุกคนเกลียดมันยกเว้นฉัน

ทำให้การพูดคุยเพิ่มเติมเสียไป: เมื่อคุณใช้ Git ต่อไปพวกเขาจะโทษคุณหากมีสิ่งผิดปกติเกิดขึ้น

นอกเหนือจากนี้สำหรับฉัน Git มีข้อดีสองประการเหนือ VCS ส่วนกลางที่ฉันซาบซึ้งมากที่สุด (ตามที่Rob Sobersอธิบายไว้บางส่วน):

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

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

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

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

หากคุณไม่สามารถโน้มน้าวผู้นำให้ลืมใช้ Git ไปที่ TFS จะทำให้ชีวิตของคุณง่ายขึ้น


22
Bang on, eckes พวกเขาตำหนิฉันเมื่อมีอะไรผิดพลาด ไม่ใช่ว่าตนเองล้มเหลวในการเรียนรู้วิธีการทำงาน สำหรับฉัน Git นั้นใกล้เคียงกับความสมบูรณ์แบบที่สุดเท่าที่ฉันเคยมีในระบบควบคุมเวอร์ชัน
Jacko

15
ในทางกลับกัน TFS รวมถึงการติดตามข้อบกพร่อง / งานรายการการรายงาน ... และฟังก์ชั่นอื่น ๆ ดังนั้น Git vs TFS ในการทำงานของ VCS เพียง แต่ขาดจุดของ TFS
Richard

5
@Dan ดู rebase, tree-tree ...
Artefacto

7
@Artefacto ฉันรู้ แต่แล้วการเปลี่ยนแปลงแท็กการส่งมอบทั้งหมดและข้อมูลเมตาทั้งหมด (การอภิปรายการตรวจสอบรหัส ฯลฯ ) นั้นเป็นเด็กกำพร้าหรือจำเป็นต้องได้รับการอัปเดต อย่างไรก็ตามหนึ่งเดือนกับ TFS ได้ชักชวนฉันว่ามันไม่ได้อยู่ในลีกของ Git ในฐานะระบบควบคุมเวอร์ชัน Git ปลดปล่อยนักพัฒนาให้มีประสิทธิภาพในรูปแบบที่จะต้องมีประสบการณ์ที่จะเข้าใจ สาขาที่เป็นอุปมาอุปไมยมีพลังชั่วร้าย
Dan Solovay

6
@ ริชาร์ดฉันขอยืนยันว่าข้อเสียของ TFS: เมื่อคุณอยู่คุณก็เข้ามาแล้วมันทำทุกอย่างได้ปานกลางและไม่ได้ให้คุณเลือกเลย มีเครื่องมือที่ดีกว่ามากสำหรับการติดตามรายการงานการรายงานและการจัดการโครงการ
Ben Collins

102

ความแตกต่างที่สำคัญระหว่างทั้งสองระบบคือ TFS เป็นระบบควบคุมเวอร์ชันรวมศูนย์และ Git เป็นระบบควบคุมเวอร์ชันกระจาย

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

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

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

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

ด้วย DVCS ผมสามารถกระทำอย่างต่อเนื่องโดยไม่ต้องกังวลเกี่ยวกับการทำลายการสร้างเพราะฉัน committing การเปลี่ยนแปลงของฉันในประเทศ ใน TFS และระบบรวมศูนย์อื่น ๆ ไม่มีแนวคิดของการเช็คอินท้องถิ่น

ฉันยังไม่ได้ไปถึงการแยกและการรวมที่ดีขึ้นใน DVCS แต่คุณสามารถค้นหาคำอธิบายมากมายที่นี่ใน SO หรือผ่านทาง Google ฉันสามารถบอกคุณได้จากประสบการณ์ว่าการแยกและรวมใน TFS นั้นไม่ดี

หากอาร์กิวเมนต์สำหรับ TFS ในองค์กรของคุณทำงานได้ดีบน Windows มากกว่า Git ฉันขอแนะนำ Mercurial ซึ่งใช้งานได้ดีบน Windows - มีการทำงานร่วมกับ Windows Explorer (TortoiseHg) และ Visual Studio (VisualHg)


5
หากคุณคิดจะไปกับ Mercurial โจเอลสปอลสกี้มี
Martin Owen

3
มันอาจจะคุ้มค่าที่จะกล่าวถึงว่า git นั้นสามารถจำลองระบบส่วนกลางได้อย่างสมบูรณ์แบบและเป็นเรื่องธรรมดาที่จะมีเซิร์ฟเวอร์ git หลักสำหรับผู้ใช้ทุกคนคุณไม่ต้องทำแบบนั้น
Tim Abell

7
หากคุณกำลังทำงานกับฟังก์ชั่นการใช้งานที่อาจแตกหักเรื่องอื่น ๆ - คุณไม่สามารถสร้างสาขาใน TFS ได้หรือไม่? แน่นอน - สาขาอยู่บนเซิร์ฟเวอร์กลาง - แต่มันสำคัญจริงๆเหรอ? ดูเหมือนว่าคุณสามารถทำสิ่งเดียวกันได้อย่างมีประสิทธิภาพทั้งคู่ - ดูเหมือนคำถามที่ IDE ที่คุณใช้อยู่และระบบการควบคุมเวอร์ชันที่ผสานรวมเข้ากับมันได้ดีแค่ไหน -
William

13
หากคุณกำลังทำงานกับฟีเจอร์ขนาดใหญ่ที่อาจขัดขวางทีมได้ขอแนะนำให้ใช้ฟีเจอร์สาขาจากนั้นเมื่อพร้อมที่จะรวมเข้ากับสาขาการพัฒนา
Mike Cheel

9
@MikeCheel นี่คือความคิดเห็นที่ดี คุณสามารถสร้างShelve Code ของคุณได้ทุกวันและลบออกเมื่อคุณเช็คอินฟีเจอร์ของคุณ (แต่แนวคิดการแตกกิ่งเป็นวิธีที่ดีกว่าในการทำมัน)
RPDeshaies

86

ผู้คนจำเป็นต้องวางปืนออกห่างจากหิ้งและคิดสักครู่ ปรากฎว่ามีวัตถุประสงค์ที่เป็นรูปธรรมและมีข้อได้เปรียบที่ปฏิเสธไม่ได้สำหรับ DVCS ที่จะสร้างความแตกต่างอย่างมากในการทำงานของทีม

ทุกอย่างลงมาที่ Branching และ Merging

ก่อน DVCS หลักการชี้นำคือ "อธิษฐานต่อพระเจ้าโดยที่คุณไม่จำเป็นต้องแยกตัวและรวมเข้าด้วยกันและถ้าคุณทำอย่างน้อยก็ขอให้เขาปล่อยให้มันเป็นเรื่องง่ายมาก"

ขณะนี้ด้วย DVCS การแยกสาขา ( และการรวม ) ได้รับการปรับปรุงให้ดีขึ้นมากหลักการที่แนะนำก็คือ "ทำที่หมวกสักใบมันจะให้ประโยชน์มากมายแก่คุณและไม่ทำให้คุณมีปัญหาใด ๆ "

และนั่นคือตัวเพิ่มประสิทธิภาพการทำงานที่ยอดเยี่ยมสำหรับทุกทีม

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

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


3
ขอบคุณชาร์ลี ฉันรู้และคุณรู้ แต่มันยากที่จะผ่านไปยังคนที่พูดสิ่งต่าง ๆ เช่น "การรวมการควบคุมแหล่งข้อมูลกับ Visual Studio เป็นคุณลักษณะที่สำคัญที่สุดสำหรับฉัน"
Jacko

58
ฉันรู้ว่า. เพื่อนกับฉันโยนความคล้ายคลึงนี้ไปให้คุณลองจินตนาการว่าคุณต้องการฐานข้อมูลเชิงสัมพันธ์ที่จริงจัง คุณประเมิน SQL Server, Oracle และ MS Access คุณเลือก Access เพราะมี GUI ที่ดีที่สุดแม้ว่ามันจะไม่สามารถปรับขนาดได้ไม่บังคับใช้ Referential Integrity ได้เป็นอย่างดี ฯลฯ การแยกและการรวมเป็นส่วนที่สมบูรณ์แบบและมันฝรั่งของระบบควบคุมเวอร์ชัน คุณสมบัติอื่น ๆ เป็นเพียงการกระพริบเล็กน้อยที่ด้านข้าง แต่ผู้คนกำลังทำการเลือกบนพื้นฐานของ bling
Charlie Flowers

17
แม้ว่าฉันจะเห็นด้วยกับข้อความของคุณ แต่ฉันไม่เห็นว่าทำไมการแยกและการรวมกันของ Git นั้น "ดีกว่า" เพียงเพราะมันเป็นระบบ "กระจาย" ฉันไม่แน่ใจว่าการเป็น DVCS นั้นเกี่ยวข้องกับความสามารถในการรวมกันหรือไม่ ฉันชอบคำอธิบายว่าทำไมการผสานจึงง่ายขึ้นในระบบกระจาย จากประสบการณ์ของฉันซึ่งส่วนใหญ่เป็น Git และ Svn การรวมใน SVN นั้นแย่มากไม่ใช่เพราะเป็น VCS ส่วนกลาง แต่เพราะมันไม่ได้ติดตามการแก้ไขข้ามสาขาอย่างที่ GIT ทำ
CodingWithSpike

8
@ rally25rs - ฉันเห็นด้วยกับส่วนใหญ่ ไม่มีเหตุผลใดที่ VCS จะไม่สามารถผสานได้ดี ยังไม่มีใครเลย (ที่ฉันรู้) แต่ส่วนที่ฉันไม่เห็นด้วยคือ "หมดจดโดยการเขียนขั้นตอนการผสานที่ดีขึ้น ซอสลับไม่ได้อยู่ในกิจวัตรการผสานที่ดีกว่าอย่างชาญฉลาด แต่ใช้วิธีการที่แตกต่างกันอย่างลึกซึ้งกับข้อมูลที่คุณเก็บใน repo และวิธีการจัดระเบียบ ส่วนใหญ่ทำให้มุ่งมั่นรากฐานของรัฐภายใน ความมุ่งมั่นไม่ได้เป็นเพียงแค่การสลักบน ... มันเป็นรากฐานของความสามารถ
Charlie ดอกไม้

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

45

Original : @Rob, TFS มีสิ่งที่เรียกว่า " Shelving " ที่ตอบข้อกังวลของคุณเกี่ยวกับการยอมรับความคืบหน้าในการทำงานโดยไม่ส่งผลกระทบต่อการสร้างอย่างเป็นทางการ ฉันรู้ว่าคุณเห็นว่าการควบคุมเวอร์ชันกลางเป็นสิ่งกีดขวาง แต่สำหรับ TFS การตรวจสอบรหัสของคุณลงในชั้นวางสามารถมองได้ว่าเป็นจุดแข็ง b / c ดังนั้นเซิร์ฟเวอร์กลางจะมีสำเนาของงานระหว่างทำของคุณในเหตุการณ์ที่หายาก เครื่องในประเทศของคุณล่มหรือสูญหาย / ถูกขโมยหรือคุณต้องเปลี่ยนเกียร์อย่างรวดเร็ว ประเด็นของฉันคือ TFS ควรได้รับการยกย่องอย่างเหมาะสมในพื้นที่นี้ นอกจากนี้การแยกและรวมใน TFS2010 ได้รับการปรับปรุงให้ดีขึ้นจากรุ่นก่อนหน้าและไม่ชัดเจนว่าคุณอ้างถึงรุ่นใดเมื่อคุณพูดว่า "... จากประสบการณ์ที่การแยกและรวมใน TFS ไม่ดี" ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้ใช้ระดับปานกลางของ TFS2010

แก้ไข Dec-5-2011 : สำหรับ OP สิ่งหนึ่งที่รบกวนฉันเกี่ยวกับ TFS คือยืนยันว่าการตั้งค่าไฟล์ในเครื่องทั้งหมดของคุณเป็น "อ่านอย่างเดียว" เมื่อคุณไม่ได้ทำงานกับมัน หากคุณต้องการเปลี่ยนแปลงโฟลว์ก็คือคุณต้อง "ชำระเงิน" ไฟล์ซึ่งจะเป็นการล้างข้อมูลคุณสมบัติอ่านได้อย่างเดียวบนไฟล์เพื่อให้ TFS รู้ที่จะคอยจับตาดูมัน นั่นเป็นขั้นตอนการทำงานที่ไม่สะดวก วิธีที่ฉันต้องการให้ทำงานก็คือตรวจพบโดยอัตโนมัติหากฉันทำการเปลี่ยนแปลงและไม่ต้องกังวล / รำคาญกับแอตทริบิวต์ของไฟล์เลย ด้วยวิธีนี้ฉันสามารถแก้ไขไฟล์ได้ทั้งใน Visual Studio หรือ Notepad หรือด้วยเครื่องมืออะไรก็ได้ที่ฉันต้องการ ระบบควบคุมเวอร์ชันควรมีความโปร่งใสที่สุดเท่าที่จะเป็นไปได้ในเรื่องนี้ มี Windows Explorer Extension ( TFS PowerTools)) ที่ช่วยให้คุณทำงานกับไฟล์ของคุณใน Windows Explorer แต่ไม่ได้ลดความซับซ้อนของเวิร์กโฟลว์เป็นอย่างมาก


2
คำถามนี้ตอบคำถามมันไม่ควรเป็นความคิดเห็นแม้ว่าคุณจะมีตัวแทน
SingleNegationElimination

8
FYI - TFS "11" ไม่จำเป็นต้องใช้บิตการอ่านอย่างเดียวอีกต่อไปหากคุณใช้พื้นที่ทำงานเฉพาะที่ซึ่งเป็นค่าเริ่มต้นในขณะนี้ มันจะค้นพบไฟล์ที่ถูกเปลี่ยนแปลงอย่างชาญฉลาดจากแอพพลิเคชั่นใด ๆ Brian Harry มีข้อมูลเพิ่มเติมเกี่ยวกับการปรับปรุงที่นี่: blogs.msdn.com/b/bharry/archive/2011/08/02/…
Ed Blankenship

2
@EdBlankenship ขอบคุณมากสำหรับลิงก์บล็อก นั่นเป็นข่าวที่ยอดเยี่ยมที่เห็นว่าเรื่องไร้สาระแบบอ่านอย่างเดียวกำลังได้รับการแก้ไขเพื่อให้การใช้ TFS รุ่นต่อไปง่ายขึ้นมาก
Lee Grissom

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

2
ขั้นตอนการทำงานของ 'การเช็คเอาท์' ไฟล์จะเตือนความทรงจำของ Visual SourceSafe เนื่องจากนี่เป็นวิธีการทำงานโดยทั่วไป ไฟล์ถูกดึงจาก SourceSafe และเก็บไว้ในเครื่องเป็นไฟล์แบบอ่านอย่างเดียว การเช็กเอาต์ไฟล์หรือไฟล์หลาย ๆ ไฟล์นั้นอาจถูกทำเครื่องหมายว่าเป็นเอกสิทธิ์ซึ่งหมายความว่าผู้อื่นสามารถเห็นไฟล์ชุดที่ dev อื่นกำลังทำงานอยู่เพื่อป้องกันไม่ให้ต้องรวมเมื่อปิดการใช้งานแบรนช์ (อาจเป็นเพราะ หมูขวาใน VSS)
Brett Rigby

18

ด้านบนของทุกสิ่งที่กล่าวมา (

https://stackoverflow.com/a/4416666/172109

https://stackoverflow.com/a/4894099/172109

https://stackoverflow.com/a/4415234/172109

) ซึ่งถูกต้อง TFS ไม่ได้เป็นเพียง VCS หนึ่งในคุณสมบัติที่สำคัญที่ TFS มีให้คือการรวมฟังก์ชั่นการติดตามบั๊ก เซ็ตการแก้ไขเชื่อมโยงกับปัญหาและสามารถติดตามได้ นโยบายต่าง ๆ สำหรับเช็คอินได้รับการสนับสนุนรวมถึงการรวมเข้ากับโดเมน Windows ซึ่งเป็นสิ่งที่ผู้ใช้ TFS มี GUI ที่รวมเข้าด้วยกันกับ Visual Studio เป็นจุดขายอีกจุดหนึ่งซึ่งดึงดูดความสนใจให้น้อยกว่าค่าเฉลี่ยของเม้าส์คลิกและนักพัฒนาและผู้จัดการของเขา

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


4
กรุณาคุณสามารถรับเครื่องมือแบบเดียวกันกับที่ TFS มอบให้ในแอปพลิเคชันเครื่องมือแบบว่องไว แรลลี่คุณชื่อมัน
PositiveGuy

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

@PositiveGuy คุณไม่สามารถรับมันได้โดยไม่ต้องทำงานและตั้งค่า TFS ให้ทุกสิ่งได้ในคลิกเดียว ในกรณีที่ระบบนิเวศทั้งหมดพร้อมใช้งานในขณะนี้เป็นบริการคลาวด์ที่มีการกำหนดค่าเป็นศูนย์ หากฉันสามารถรับการควบคุมเวอร์ชันการสนับสนุนการต่อสู้การสร้างอัตโนมัติการทดสอบในห้องปฏิบัติการและการจัดการแผนการทดสอบทั้งหมดรวมอยู่ในกล่องด้วยตนเองและ LDAP ขององค์กร (โกหก AzureAD) ราคา $ 10 / mo ทำไมในใจของฉัน พยายามวางชิ้นด้วยกันด้วยตัวเองหรือไม่?
Craig Brunetti

1
@slashCoder คาดว่าชุดเต็มจะดีที่สุดในแต่ละชิ้นได้อย่างไร ค่าใช้จ่ายที่ไม่ใช่ของดีที่สุดนั้นมีค่าเกินกว่าค่าใช้จ่ายในการจัดการการรวมส่วนประกอบของคุณเองหรือไม่? ... อาจจะมีบางที่ที่ฉันเห็น แต่มันเป็นค่าใช้จ่ายที่บริสุทธิ์ที่จะต้องทำสิ่งนั้น จะเกิดอะไรขึ้นถ้า GIT ขององค์กรของคุณทำงานได้ดี แต่ JIRA อินสแตนซ์ของคุณลดลงและการอัพเกรด Jenkins ของคุณไม่ได้บิน ขวา? มันเหมือนเลื่อยไฟฟ้าที่เล่นกล ไฟไหม้ กึ่งปิดตา :) :)
Craig Brunetti

17

หากทีมของคุณใช้ TFS และคุณต้องการใช้ Git คุณอาจต้องการพิจารณาสะพาน "git to tfs" โดยพื้นฐานแล้วคุณทำงานทุกวันโดยใช้ Git บนคอมพิวเตอร์ของคุณจากนั้นเมื่อคุณต้องการผลักดันการเปลี่ยนแปลงของคุณคุณจะผลักมันไปยังเซิร์ฟเวอร์ TFS

มีคู่อยู่ข้างนอกนั่น (บน github) ฉันใช้อันสุดท้ายของฉัน (รวมถึงนักพัฒนารายอื่น) ด้วยความสำเร็จ ดู:

https://github.com/spraints/git-tfs

https://github.com/git-tfs/git-tfs


6
Microsoft มอบการรวมโดยตรงกับที่เก็บ Git และ TFS ในขณะนี้: blogs.msdn.com/b/bharry/archive/2012/08/13/…
Ed Blankenship

1
@EdBlankenship คุณอาจต้องการแปลงความคิดเห็นเป็นคำตอบ มันดูเหมือนจะเป็นทางออกที่ดีสำหรับ OP ฉันจะลงคะแนนให้ :)
Lee Grissom

1
ยกเว้นถ้าคุณอยู่บนแพลตฟอร์มอื่นที่ไม่ใช่ Windows คุณควรเลือก git-tfs! git-tf อยู่ไกลจากจะดีเท่า git-tfs ... และปรัชญาคือ TFS ที่มุ่งเน้นในขณะที่ git-tfs เป็น git ที่มุ่งเน้นมากขึ้น (และนั่นคือสิ่งที่เราต้องการ!)
ฟิลิปป์

15

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

ดูคำอธิบายโดยละเอียดในบล็อกของฉันโพสต์TFS เป็นแพลตฟอร์มข้ามเทคโนโลยีที่แท้จริง


3
บางที แต่ TFS แต่ละส่วนนั้นไม่ดีและยากที่จะจัดการ (อันที่จริงคุณต้องมีผู้ดูแลระบบที่แท้จริงสำหรับ TFS) ดู Git> TFS (VCS), Jenkins> TFS (CI), nunit หรือ xunit> mstest, IceScrum หรือ ... > TFS (การจัดการโครงการ) TFS เป็นความคิดที่ดีตั้งแต่แรกจนกระทั่งคุณใช้ !!!
ฟิลิปป์

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

อัปเดต: TFS 2013 (เซิร์ฟเวอร์) [และ VS12-13) ตอนนี้รองรับ git สำหรับการควบคุมเวอร์ชัน ดังนั้นคุณจะได้รับสิ่งที่ดีที่สุดของทั้งสองโลก
DarcyThomas

2
แน่นอนว่ามันเป็นเรื่องดีที่มี ALM แบบครบวงจร แต่ไม่ได้อยู่ที่ค่าใช้จ่ายของความยืดหยุ่น IMO ALM ควรถูกสร้างขึ้นด้วยเทคโนโลยี "ดีที่สุดของสายพันธุ์" เท่าที่จะเป็นไปได้ ... หรืออย่างน้อยที่สุดความยืดหยุ่นในการบูรณาการที่ดีที่สุดของสายพันธุ์เนื่องจากพวกเขามีแนวโน้มที่จะเปลี่ยนแปลงตลอดเวลา การเลือก TFS นั้นเป็นการเสี่ยงที่จะพูดว่า "ไมโครซอฟท์จะเป็นผู้ชนะในทุกด้านของ ALM ของฉัน" ซึ่งโง่เง่า ฉันเคยใช้ Git w / Jira ซึ่งอนุญาตให้ฉันอัปเดต / ปิดปัญหาตามข้อความยืนยันของฉัน จากประสบการณ์ของฉัน (มากมายด้วย TFS) นี่เป็นขั้นตอนการทำงานที่เหนือกว่าอย่างมากมาย
Scott Silvi

1
แถบด้านข้าง - ถึงแม้จะมีการรวม TFS / Git คุณก็จะพูดว่า "ให้ VCS กับ Git ทำฟาร์มขณะที่ติดตามปัญหาของเรา" - โดยพื้นฐานแล้วไม่ต่างจากการใช้ Git w / ซอฟต์แวร์ติดตามปัญหาอื่น ๆ ดังนั้นฉันไม่แน่ใจว่าอาร์กิวเมนต์ ALM นั้นใช้ได้อีกต่อไปเนื่องจาก Microsoft พยายามที่จะยืดหยุ่น (ซึ่งฉันปรบมือให้)
Scott Silvi

14

สิ่งที่แจกจ่ายทั้งหมดของ Git นั้นยอดเยี่ยมจริงๆ มันให้คุณสมบัติไม่กี่อย่าง Shelvesets ไม่มี (ในผลิตภัณฑ์ปัจจุบัน) เช่นการย้อนกลับในพื้นที่และตัวเลือกการยอมรับ (เช่นคุณลักษณะประวัติภายในของ Eclipse ) คุณสามารถบรรเทาสิ่งนี้ได้โดยใช้สาขานักพัฒนาซอฟต์แวร์ แต่ขอให้ซื่อสัตย์นักพัฒนาหลายคนไม่ชอบการรวมสาขาและผสานหนึ่งบิต ฉันถูกขอให้เปิดคุณลักษณะ "การชำระเงินพิเศษ" แบบเก่าใน TFS บ่อยเกินไป (และปฏิเสธทุกครั้ง)

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

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

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

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

ด้วย TFS Basic ที่มาพร้อมกับ TFS 11 อาจไม่ไกลที่จะคาดหวังว่า TFS แบบกระจายจะช่วยให้คุณสามารถซิงค์ TFS พื้นฐานในพื้นที่ของคุณกับ TFS กลางในยุค TFS 12+ ฉันจะลงคะแนนของฉันสำหรับที่ลงใน uservoice !


คุณจะสนใจคุณสมบัติใหม่นี้ที่มากับคุณโดย Microsoft: gittf.codeplex.com
jessehouwing

1
ใช้ git-tfs ในตอนนี้มันดีกว่า git-tf !!! github.com/git-tfs/git-tfs
ฟิลิปป์

3
คำตอบทั้งหมดนี้ล้าสมัยอย่างรวดเร็ว Microsoft ได้เพิ่มการสนับสนุน Git ให้กับ Team Foundation Service และจะเพิ่มการสนับสนุน Git ให้กับ Team Foundation Server รุ่นถัดไป
jessehouwing

1
@ ฟิลิปป์: ฉันลองทั้งคู่แล้ว ข้อแตกต่างสองประการ: 1) git-tf เป็น cross-platform ในขณะที่ git-tfs ทำงานบน Windows เท่านั้น 2) git-tfs เขียนคำอธิบายการคอมมิทเมื่อคุณ "push" เพื่อรวมหมายเลขเซ็ตการแก้ไขในขณะที่ git-tf ปล่อยแฮชการคอมมิทในเครื่องของคุณให้เหมือนเดิม
Joey Adams

@JoeyAdams 1) +1 นั่นเป็นเหตุผลที่ดีเพียงข้อเดียวในการเลือก git-tf 2) คุณสามารถทำได้ด้วย git-tfs โดยใช้checkinคำสั่ง (แทนที่จะเป็น rcheckin) แต่ฉันชอบ rcheckin เพราะมันเป็นวิธีที่คอมไพล์ที่จะทำสิ่งต่าง ๆ และที่ว่าทำไมเราจึงเลือกที่จะใช้คอมไพล์;)
ฟิลิปป์

9

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


2
จุดที่ดีที่นี่ Git จะเพิ่ม.gitโฟลเดอร์เพื่อติดตามรายละเอียดพื้นที่เก็บข้อมูลทั้งหมด อย่างน้อยที่สุด TFS จะทำการแก้ไขไฟล์ของคุณ.sln(หรือมันคือ.csproj?) เพื่อวางตำแหน่งของที่เก็บระยะไกลเข้าไป
CodingWithSpike

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