web-dev-qa-db-de.com

Git gegen Team Foundation Server

Ich habe Git meinem Entwicklerteam vorgestellt, und alle außer mir hassen es. Sie möchten es durch Team Foundation Server ersetzen. Ich bin der Meinung, dass dies ein großer Rückschritt ist, obwohl ich mit TFS nicht sehr vertraut bin. Kann jemand mit Erfahrung die Unterstützung von Verzweigungen in TFS mit der von Git vergleichen? Welche Vor- und Nachteile hat TFS im Allgemeinen? Werde ich es hassen, nachdem ich Git für ein paar Jahre benutzt habe?

248
Jacko

Ich denke, die Aussage

alle außer mir hassen es

verschwenden Sie weitere Diskussionen: Wenn Sie weiterhin Git verwenden, werden sie Ihnen die Schuld geben , wenn etwas schief geht.

Abgesehen davon hat Git für mich zwei Vorteile gegenüber einem zentralen VCS, die ich am meisten schätze (wie teilweise von Rob Sobers ):

  • Automatisches Backup des gesamten Repos: Jedes Mal, wenn jemand vom zentralen Repo abzieht, erhält er einen vollständigen Verlauf der Änderungen. Wenn ein Repo verloren geht: Keine Sorge, nehmen Sie eines der an jedem Arbeitsplatz vorhandenen Repos mit.
  • Offline-Repo-Zugriff: Wenn ich zu Hause (oder in einem Flugzeug oder Zug) arbeite, kann ich den gesamten Verlauf des Projekts sehen, und zwar für jeden einzelnen einchecken, ohne meine VPN-Verbindung zu starten und arbeiten zu können, wie ich bei der Arbeit were: einchecken, auschecken, verzweigen, alles.

Aber wie gesagt: Ich denke, du kämpfst in einem verlorenen Kampf: Wenn jeder Git hasst, benutze Git nicht. Es könnte Ihnen mehr helfen zu wissen, warum sie Git hassen anstatt zu versuchen, sie zu überzeugen.

Wenn sie es einfach nicht wollen, weil es für sie neu ist und sie nicht bereit sind, etwas Neues zu lernen: Sind Sie sicher, dass Sie sich mit diesen Mitarbeitern erfolgreich weiterentwickeln werden?

Hasst wirklich jeder einzelne Git oder werden sie von einigen Meinungsbildnern beeinflusst? Finden Sie die Führer und fragen Sie sie, was das Problem ist. Überzeugen Sie sie und Sie werden den Rest des Teams überzeugen.

Wenn Sie die Führungskräfte nicht überzeugen können: Vergessen Sie die Verwendung von Git, und nehmen Sie das TFS. Wird dir das Leben leichter machen.

251
eckes

Der Hauptunterschied zwischen den beiden Systemen besteht darin, dass TFS ein zentrales Versionskontrollsystem und Git ein verteiltes Versionskontrollsystem ist.

Mit TFS werden Repositorys auf einem zentralen Server gespeichert und Entwickler checken eine Arbeitskopie aus, die ein Snapshot des Codes zu einem bestimmten Zeitpunkt ist. Mit Git klonen Entwickler das gesamte Repository auf ihre Maschinen, einschließlich des gesamten Verlaufs.

Ein Vorteil des vollständigen Repositorys auf den Computern Ihres Entwicklers ist die Redundanz für den Fall, dass der Server ausfällt. Ein weiterer Vorteil von Nice ist, dass Sie Ihre Arbeitskopie zwischen Revisionen hin und her verschieben können, ohne jemals mit dem Server zu sprechen. Dies kann hilfreich sein, wenn der Server nicht verfügbar oder nicht erreichbar ist.

Für mich ist der wahre Segen, dass Sie commit Änderungen an Ihrem lokalen Repository vornehmen können, ohne jemals mit dem Server zu sprechen oder Ihrem Team möglicherweise instabile Änderungen zuzufügen (d. H. Den Build zu brechen).

Wenn ich zum Beispiel an einem großen Feature arbeite, brauche ich möglicherweise eine Woche, um es vollständig zu codieren und zu testen. Ich möchte mitten in der Woche keinen instabilen Code einchecken und den Build abbrechen. Aber was passiert, wenn ich mich dem Ende der Woche nähere und versehentlich meine gesamte Arbeitskopie kaputt mache? Wenn ich nicht die ganze Zeit zugesagt habe, besteht die Gefahr, dass ich meine Arbeit verliere. Dies ist keine effektive Versionskontrolle, und TFS ist dafür anfällig.

Mit DVCS kann ich ständig ein Commit ausführen, ohne dass ich mir Sorgen machen muss, dass der Build unterbrochen wird, da ich meine Änderungen festschreibe lokal. In TFS und anderen zentralisierten Systemen gibt es kein Konzept für ein lokales Einchecken.

Ich bin noch nicht einmal darauf eingegangen, wie viel besser Verzweigen und Zusammenführen in DVCS ist, aber Sie finden hier jede Menge Erklärungen auf SO= oder über Google. Ich kann Ihnen aus Erfahrung sagen, dass Verzweigen und Zusammenführen in TFS ist nicht gut.

Wenn das Argument für TFS in Ihrer Organisation lautet, dass es unter Windows besser funktioniert als unter Git, würde ich Mercurial vorschlagen, das unter Windows hervorragend funktioniert - es gibt eine Integration mit Windows Explorer (TortoiseHg) und Visual Studio (VisualHg).

93
Rob Sobers

Die Leute müssen die Waffe niederlegen, sich von der Kante entfernen und eine Minute lang nachdenken. Es stellt sich heraus, dass DVCS objektive, konkrete und unbestreitbare Vorteile bietet, die einen RIESIGEN Unterschied in der Produktivität eines Teams bewirken.

Auf das Verzweigen und Zusammenführen kommt es an.

Vor DVCS lautete das Leitmotiv: "Bete zu Gott, dass du dich nicht verzweigen und verschmelzen musst. Und wenn du das tust, bitte ihn zumindest, dass es sehr, sehr einfach ist."

Mit DVCS wird das Verzweigen ( und Zusammenführen ) so stark verbessert, dass das Leitprinzip lautet: "Mach es auf Knopfdruck. Es wird dir eine Menge Vorteile bringen und Sie keine Probleme verursachen. "

Und das ist ein RIESIGER Produktivitätsschub für jedes Team.

Das Problem ist, dass die Leute, um zu verstehen, was ich gerade gesagt habe, und um überzeugt zu sein, dass es wahr ist, zuerst in ein bisschen Lernzeit investieren müssen. Sie müssen weder Git noch ein anderes DVCS selbst lernen. Sie müssen nur lernen, wie Git verzweigt und verschmilzt. Lesen und wiederholen Sie einige Artikel und Blogbeiträge, indem Sie sie langsam angehen und durcharbeiten, bis Sie sie sehen. Das könnte den größten Teil von 2 oder 3 vollen Tagen dauern.

Aber sobald Sie das sehen, werden Sie nicht einmal darüber nachdenken, sich für ein Nicht-DVCS zu entscheiden. Weil DVCS wirklich klare, objektive und konkrete Vorteile bietet und die größten Erfolge im Bereich der Verzweigung und Zusammenführung zu verzeichnen sind.

86
Charlie Flowers

Original : @Rob, TFS hat etwas mit dem Namen " Shelving ", das Ihre Besorgnis über das Festschreiben von Work-in-Progress ohne dieses anspricht Auswirkungen auf den offiziellen Build. Ich bin mir bewusst, dass Sie die zentrale Versionskontrolle als Hindernis ansehen, aber in Bezug auf TFS kann das Einchecken Ihres Codes in das Regal als eine Stärke angesehen werden, da der zentrale Server in seltenen Fällen eine Kopie Ihres Work-in-Progress hat Ihre lokale Maschine stürzt ab oder ist verloren/gestohlen oder Sie müssen schnell umschalten. Mein Punkt ist, dass TFS in diesem Bereich angemessen gelobt werden sollte. Das Verzweigen und Zusammenführen in TFS2010 wurde gegenüber früheren Versionen verbessert, und es ist nicht klar, auf welche Version Sie sich beziehen, wenn Sie sagen: "... aus Erfahrung, dass das Verzweigen und Zusammenführen in TFS nicht gut ist." Haftungsausschluss: Ich bin ein moderater Benutzer von TFS2010.

Edit Dec-5-2011 : Für das OP ist eine Sache, die mich an TFS stört, dass es darauf besteht, alle Ihre lokalen Dateien auf "read-" zu setzen. nur "wenn du nicht daran arbeitest. Wenn Sie eine Änderung vornehmen möchten, müssen Sie die Datei "auschecken", wodurch nur das schreibgeschützte Attribut für die Datei gelöscht wird, damit TFS ein Auge darauf hat. Das ist ein unbequemer Arbeitsablauf. Ich würde es vorziehen, wenn es funktioniert: Es wird nur automatisch erkannt, wenn ich eine Änderung vorgenommen habe und kümmert sich überhaupt nicht um die Dateiattribute. Auf diese Weise kann ich die Datei entweder in Visual Studio oder Notepad oder mit einem beliebigen Tool ändern. Das Versionskontrollsystem sollte in dieser Hinsicht so transparent wie möglich sein. Es gibt eine Windows Explorer-Erweiterung ( TFS PowerTools ), mit der Sie im Windows Explorer mit Ihren Dateien arbeiten können, die den Workflow jedoch nicht wesentlich vereinfacht.

43
Lee Grissom

Zu allem, was gesagt wurde (

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

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

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

), was richtig ist, ist TFS nicht nur ein VCS. Ein Hauptmerkmal von TFS ist die nativ integrierte Fehlerverfolgungsfunktion. Änderungssätze sind mit Problemen verknüpft und können nachverfolgt werden. Es werden verschiedene Richtlinien für das Einchecken sowie die Integration in die Windows-Domäne unterstützt, über die Benutzer von TFS verfügen. Die eng in Visual Studio integrierte Benutzeroberfläche ist ein weiteres Verkaufsargument, das anspricht weniger als durchschnittlich Maus-und-Klick-Entwickler und sein Manager.

Daher ist es keine richtige Frage, Git mit TFS zu vergleichen. Die richtige, wenn auch unpraktische Frage ist, Git nur mit der VCS-Funktionalität von TFS zu vergleichen. Dabei bläst Git TFS aus dem Wasser. Ein seriöses Team benötigt jedoch andere Tools, und hier bietet TFS eine zentrale Anlaufstelle.

18
Sherlock

Wenn Ihr Team TFS verwendet und Sie Git verwenden möchten, sollten Sie eine "Git to TFS" -Brücke in Betracht ziehen. Grundsätzlich arbeiten Sie jeden Tag mit Git auf Ihrem Computer. Wenn Sie Ihre Änderungen übertragen möchten, übertragen Sie sie auf den TFS-Server.

Es gibt ein paar da draußen (auf Github). Ich habe einen an meinem letzten Platz (zusammen mit einem anderen Entwickler) mit einigem Erfolg benutzt. Sehen:

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

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

17
bytedev

Nach einigen Nachforschungen zwischen Vor- und Nachteilen entschied sich das Unternehmen, mit dem ich zusammengearbeitet hatte, auch für TFS. Nicht, weil GIT kein gutes Versionskontrollsystem ist, sondern vor allem für die vollständig integrierte ALM-Lösung, die TFS bietet. Wenn nur die Versionskontrollfunktion wichtig war, war die Wahl wahrscheinlich GIT. Die steile GIT-Lernkurve für reguläre Entwickler darf jedoch nicht unterschätzt werden.

Eine ausführliche Erklärung finden Sie in meinem Blog-Beitrag TFS als echte technologieübergreifende Plattform .

15
Pieter Gheysens

Die ganze Distributed-Sache von Git ist wirklich großartig. Es gibt einige Funktionen, die Shelvesets (im aktuellen Produkt) nicht haben, wie z. B. lokale Rollback- und Commit-Optionen (wie z. B. Eclipse's localhistory-Funktion ). Sie könnten dies mithilfe von Entwicklerzweigen abmildern, aber seien wir ehrlich, viele Entwickler mögen es nicht, ein Bit zu verzweigen und zusammenzuführen. Ich wurde gebeten, die Funktion "Exklusives Auschecken" im alten Stil in TFS einige Male zu oft zu aktivieren (und dies jedes Mal abzulehnen).

Ich denke, viele große Unternehmen haben große Angst davor, dass ein Entwickler die gesamte Historie einfach in einen lokalen Arbeitsbereich bringt und mitnimmt (zum Beispiel zu einem neuen Arbeitgeber) ... Einen Schnappschuss zu stehlen ist schlecht, aber eine ganze Historie wegzunehmen ist noch schwieriger. (Nicht, dass Sie nicht konnten erhalten Sie eine vollständige Geschichte von TFS von Ihnen wollte es) ...

Es wird erwähnt, dass dies eine großartige Möglichkeit zum Sichern ist, was sich hervorragend für Open Source eignet, bei dem der ursprüngliche Betreuer möglicherweise aufhört, sich um seine Version zu kümmern und diese zu entfernen. Für einen Unternehmensplan ist dies jedoch für viele Unternehmen ebenfalls unzureichend, da es keine klare Zuordnung der Verantwortlichkeiten gibt Backups zu halten. Und es ist schwer herauszufinden, welche Version verwendet werden soll, wenn das Hauptprojekt irgendwie verschwindet. Welches würde dazu neigen, ein Repository als führend/zentral zu ernennen.

Was mir an Git am besten gefällt, ist die Push/Pull-Option, mit der Sie problemlos Code in ein Projekt einbringen können, ohne über Festschreibungsrechte verfügen zu müssen. Ich vermute, Sie könnten sehr begrenzte Benutzer und Regale in TFS verwenden, um dies nachzuahmen, aber es ist nicht so leistungsfähig wie die Git-Option. Das Verzweigen zwischen Teamprojekten mag ebenfalls funktionieren, aus administrativer Sicht ist dies für viele Organisationen jedoch nicht wirklich machbar, da das Hinzufügen von Teamprojekten einen hohen administrativen Aufwand bedeutet.

Ich möchte auch die Dinge hinzufügen, die im Bereich der Nicht-Quellcodeverwaltung erwähnt wurden. Funktionen wie Workitem-Tracking, Berichterstellung und Build-Automatisierung (einschließlich Labormanagement) profitieren in hohem Maße von einem zentralen, führenden Repository. Diese werden viel schwieriger, wenn Sie ein rein verteiltes Modell verwenden, es sei denn, Sie führen einen der Knoten an (und kehren daher zu einem weniger verteilten Modell zurück).

Da TFS Basic mit TFS 11 geliefert wird, ist ein verteiltes TFS möglicherweise nicht weit entfernt, mit dem Sie Ihr lokales TFS Basic mit einem zentralen TFS im Zeitalter von TFS 12+ synchronisieren können. Ich werde mein Stimme dafür in der Uservoice ab !

14
jessehouwing

Für mich liegt der Hauptunterschied in den zusätzlichen Dateien, die TFS zu Ihrer Lösung (.vssscc) hinzufügt, um TFS zu "unterstützen". Wir hatten kürzlich Probleme damit, dass diese Dateien dem falschen Zweig zugeordnet wurden, was zu einem interessanten Debugging führte ...

9
Paddy