Ich habe Git meinem Entwicklerteam vorgestellt und alle außer mir hassen es. Sie möchten es durch Team Foundation Server ersetzen. Ich denke, dies ist ein großer Rückschritt, obwohl ich mit TFS nicht sehr vertraut bin. Kann jemand mit Erfahrung die Verzweigungsunterstützung für TFS mit der Git-Verzweigung vergleichen? Welche Vor- und Nachteile hat TFS im Allgemeinen? Werde ich es hassen, nachdem ich Git ein paar Jahre lang benutzt habe?
262
Antworten:
Ich denke, die Aussage
Weitere Diskussionen werden verschwendet: Wenn Sie weiterhin Git verwenden, werden Sie beschuldigt , wenn etwas schief geht.
Abgesehen davon hat Git für mich zwei Vorteile gegenüber einem zentralisierten VCS, die ich am meisten schätze (wie teilweise von Rob Sobers beschrieben ):
Aber wie gesagt: Ich denke, du kämpfst einen verlorenen Kampf: Wenn jeder Git hasst, benutze Git nicht. Es könnte dir 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 nicht bereit ist, etwas Neues zu lernen: Sind Sie sicher, dass Sie mit diesen Mitarbeitern eine erfolgreiche Entwicklung durchführen werden?
Hasst wirklich jeder einzelne Git oder werden sie von einigen Meinungsführern 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, nehmen Sie das TFS. Erleichtert Ihnen das Leben.
quelle
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 eine Momentaufnahme des Codes zu einem bestimmten Zeitpunkt ist. Mit Git klonen Entwickler das gesamte Repository auf ihre Computer, 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 ist, dass Sie Ihre Arbeitskopie zwischen den Revisionen hin und her verschieben können, ohne jemals mit dem Server zu sprechen. Dies kann hilfreich sein, wenn der Server ausfällt oder nur nicht erreichbar ist.
Für mich ist der wahre Segen , dass Sie verpflichten Changesets auf Ihrem lokalen Repository , ohne jemals im Gespräch mit dem Server oder zuzufügen potenziell instabilen Änderungen in Ihrem Team (dh brechen die Build).
Wenn ich beispielsweise an einem großen Feature arbeite, kann es eine Woche dauern, bis ich es vollständig codiert und getestet habe. Ich möchte nicht Mitte der Woche instabilen Code einchecken und den Build abbrechen, aber was passiert, wenn ich mich dem Ende der Woche nähere und versehentlich meine gesamte Arbeitskopie borke? Wenn ich mich nicht die ganze Zeit engagiert habe, besteht das Risiko, dass ich meine Arbeit verliere. Dies ist keine effektive Versionskontrolle, und TFS ist dafür anfällig.
Mit DVCS kann ich ständig Commits durchführen, ohne mir Gedanken über das Brechen des Builds machen zu müssen, da ich meine Änderungen lokal festschreibe . In TFS und anderen zentralisierten Systemen gibt es kein Konzept für ein lokales Einchecken.
Ich habe noch nicht einmal untersucht, wie viel besser das Verzweigen und Zusammenführen in DVCS ist, aber Sie können hier auf SO oder über Google unzählige Erklärungen finden. Ich kann Ihnen aus Erfahrung sagen, dass das Verzweigen und Zusammenführen in TFS nicht gut ist.
Wenn das Argument für TFS in Ihrer Organisation lautet, dass es unter Windows besser funktioniert als Git, würde ich Mercurial vorschlagen, das unter Windows hervorragend funktioniert - es gibt eine Integration mit Windows Explorer (TortoiseHg) und Visual Studio (VisualHg).
quelle
Die Leute müssen die Waffe niederlegen, sich von der Kante entfernen und eine Minute nachdenken . Es stellt sich heraus, dass DVCS objektive, konkrete und unbestreitbare Vorteile bietet, die einen RIESIGEN Unterschied in der Produktivität eines Teams bewirken.
Es kommt alles auf das Verzweigen und Zusammenführen an.
Vor DVCS lautete das Leitprinzip: "Bete zu Gott, dass du dich nicht verzweigen und verschmelzen musst. Und wenn du das tust, bitte ihn zumindest, es sehr, sehr einfach sein zu lassen."
Mit DVCS wird das Verzweigen ( und Zusammenführen ) so stark verbessert, dass das Leitprinzip lautet: "Machen Sie es im Handumdrehen. Es bietet Ihnen eine Menge Vorteile und verursacht Ihnen keine Probleme."
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 davon überzeugt sind, dass es wahr ist, zuerst in eine kleine Lernkurve investieren müssen. Sie müssen weder Git noch irgendein anderes DVCS selbst lernen ... sie müssen nur lernen, wie Git verzweigt und zusammenführt. Lesen und lesen Sie einige Artikel und Blog-Beiträge erneut, nehmen Sie sie langsam und arbeiten Sie sie durch, bis Sie sie sehen. Das kann fast zwei oder drei volle Tage dauern.
Aber sobald Sie das sehen, werden Sie nicht einmal in Betracht ziehen, ein Nicht-DVCS zu wählen. Denn DVCS bietet wirklich klare, objektive und konkrete Vorteile, und die größten Gewinne liegen im Bereich der Verzweigung und Zusammenführung.
quelle
Original : @Rob, TFS hat etwas namens " Shelving ", das Ihre Bedenken hinsichtlich der Festlegung laufender Arbeiten aufgreift, ohne dass dies Auswirkungen auf den offiziellen Build hat. Mir ist klar, dass Sie die zentrale Versionskontrolle als Hindernis ansehen, aber in Bezug auf TFS kann das Einchecken Ihres Codes in das Regal als Stärke angesehen werden. In seltenen Fällen verfügt der zentrale Server über eine Kopie Ihrer laufenden Arbeiten Ihre lokale Maschine stürzt ab oder geht verloren / wird gestohlen oder Sie müssen schnell umschalten. Mein Punkt ist, dass TFS in diesem Bereich angemessen gelobt werden sollte. Außerdem wurde das Verzweigen und Zusammenführen in TFS2010 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 "schreibgeschützt" zu setzen, wenn Sie nicht daran arbeiten. Wenn Sie eine Änderung vornehmen möchten, müssen Sie die Datei "auschecken", wodurch nur das schreibgeschützte Attribut in der Datei gelöscht wird, damit TFS ein Auge darauf hat. Das ist ein unpraktischer Workflow. Ich würde es vorziehen, wenn es funktioniert. Es erkennt nur automatisch, ob 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 diesbezüglich so transparent wie möglich sein. Es gibt eine Windows Explorer-Erweiterung ( TFS PowerTools)), mit dem Sie im Windows Explorer mit Ihren Dateien arbeiten können, der den Workflow jedoch nicht wesentlich vereinfacht.
quelle
Zu allem, was gesagt wurde (
), was richtig ist, TFS ist nicht nur ein VCS. Eine wichtige Funktion 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. Eine eng integrierte Benutzeroberfläche in Visual Studio ist ein weiteres Verkaufsargument, das
weniger als den durchschnittlichenMaus- und Klickentwickler und seinen Manager anspricht .Daher ist der Vergleich von Git mit TFS keine richtige Frage. 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. Jedes ernsthafte Team benötigt jedoch andere Tools, und hier bietet TFS ein One-Stop-Ziel.
quelle
Wenn Ihr Team TFS verwendet und Sie Git verwenden möchten, sollten Sie eine "Git to TFS" -Brücke in Betracht ziehen. Im Wesentlichen arbeiten Sie Tag für 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 verwendet. Sehen:
https://github.com/spalts/git-tfs
https://github.com/git-tfs/git-tfs
quelle
Nach einigen Nachforschungen zwischen Vor- und Nachteilen entschied sich das Unternehmen, an dem ich beteiligt war, 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 liefert. Wenn nur die Versionskontrollfunktion wichtig war, könnte die Wahl wahrscheinlich GIT gewesen sein. Die steile GIT-Lernkurve für reguläre Entwickler darf jedoch nicht unterschätzt werden.
Eine ausführliche Erklärung finden Sie in meinem Blogbeitrag TFS als echte technologieübergreifende Plattform .
quelle
Die ganze Distributed-Sache von Git ist wirklich großartig. Es bietet einige Funktionen, über die Shelvesets (im aktuellen Produkt) nicht verfügen, z. B. lokale Rollback- und Commit-Optionen (z. B. die Localhistory-Funktion von Eclipse ). Sie könnten dies mit 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 ein paar Mal zu oft zu aktivieren (und sie jedes Mal abzulehnen).
Ich denke, viele große Unternehmen haben große Angst davor, dass ein Entwickler einfach die gesamte Geschichte in einen lokalen Arbeitsbereich bringt und mitnimmt (zum Beispiel zu einem neuen Arbeitgeber) ... Einen Schnappschuss zu stehlen ist schlecht, aber eine ganze Geschichte wegzunehmen ist noch problematischer. (Nicht, dass Sie keine vollständige Historie von TFS erhalten könnten , von der Sie es wollten) ...
Es wird erwähnt, dass dies eine großartige Möglichkeit zum Sichern ist, was wiederum für Open Source großartig ist, wenn der ursprüngliche Betreuer möglicherweise aufhört, sich um seine Version zu kümmern und sie entfernt, aber für einen Unternehmensplan ist dies für viele Unternehmen wiederum unzureichend, da es keine eindeutige Zuweisung von Verantwortlichkeiten gibt Backups zu halten. Und es wäre 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 zu einem Projekt beitragen können, ohne Commit-Rechte zu benötigen. Ich denke, 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 über Teamprojekte hinweg mag ebenfalls funktionieren, aber aus administrativer Sicht ist dies für viele Unternehmen nicht wirklich machbar, da das Hinzufügen von Teamprojekten einen hohen Verwaltungsaufwand verursacht.
Ich möchte auch zu den Dingen hinzufügen, die im Bereich ohne Quellcodeverwaltung erwähnt werden. Funktionen wie Workitem-Tracking, Berichterstellung und Build-Automatisierung (einschließlich Laborverwaltung) 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 machen einen der Knoten führend (und kehren daher zu einem weniger verteilten Modell zurück).
Da TFS Basic mit TFS 11 geliefert wird, ist es möglicherweise nicht weit entfernt, ein verteiltes TFS zu erwarten, mit dem Sie Ihr lokales TFS Basic in der TFS 12+ -Ära mit einem zentralen TFS synchronisieren können. Ich werde meine Stimme dafür im Uservoice ablegen !
quelle
checkin
Befehls (anstelle von rcheckin) tun. Aber ich bevorzuge rcheckin, weil es eher die git-Methode ist, Dinge zu tun, und deshalb entscheiden wir uns für git;)Für mich besteht der Hauptunterschied in allen Zusatzdateien, die TFS zu Ihrer Lösung (.vssscc) hinzufügt, um TFS zu unterstützen. Wir hatten kürzlich Probleme mit diesen Dateien, die dem falschen Zweig zugeordnet wurden, was zu einem interessanten Debugging führte ...
quelle
.git
Ordner hinzu, um alle Repository-Details zu verfolgen. TFS ändert mindestens Ihre.sln
(oder sind es die.csproj
?) Dateien, um den Speicherort des Remote-Repositorys darin abzulegen.