Von TFS zu Git

14

Ich bin ein .NET-Entwickler und habe TFS (Team Foundation Server) oft als Versionsverwaltungssoftware verwendet. Gute Eigenschaften von TFS sind:

  1. Gute Integration mit Visual Studio (so mache ich fast alles visuell; keine Konsolenbefehle)
  2. Einfaches Auschecken, Einchecken
  3. Einfaches Zusammenführen und Beheben von Konflikten
  4. Einfache automatisierte Builds
  5. Verzweigung

Jetzt möchte ich Git als Backbone, Repository und Quellcodeverwaltung für meine Open Source-Projekte verwenden. Meine Projekte sind in C # -, JavaScript- oder PHP-Sprache mit MySQL- oder SQL Server-Datenbanken als Speichermechanismus.

Ich habe gerade die Hilfe von github.com für diesen Zweck verwendet und dort ein Profil erstellt und eine GUI für Git heruntergeladen. Bis zu diesem Teil war es so einfach.

Aber ich bin fast festgefahren, um weiterzukommen. Ich möchte nur einige einfache (wirklich einfache) Operationen ausführen, darunter:

  1. Ein Projekt auf Git erstellen und es einem Ordner auf meinem Laptop zuordnen
  2. Dateien und Ordner auschecken / einchecken
  3. Konflikte lösen

Das ist alles was ich jetzt tun muss. Aber es scheint, dass die GUI nicht so benutzerfreundlich ist. Ich erwarte, dass die grafische Benutzeroberfläche ein Connect To...oder so etwas hat, und dann erwarte ich, dass eine Liste der Projekte angezeigt wird. Wenn ich eines auswähle, erwarte ich, dass die Liste der Dateien und Ordner dieses Projekts angezeigt wird, genau wie beim Durchsuchen Ihres TFS-Projekts in Visual Studio. Dann möchte ich in der Lage sein, mit der rechten Maustaste auf eine Datei zu klicken und check-in...oder check-outund ähnliches auszuwählen .

Erwarte ich viel Was soll ich tun, um Git einfach wie TFS zu nutzen? Was vermisse ich hier?

Saeed Neamati
quelle
8
Ich bin vor einem Jahr von SVN zu Git gewechselt und freue mich sehr darüber. Ich würde SVN niemandem empfehlen, außer einem starren Kommandozeilenhasser. Sobald Sie git lernen, werden Sie es lieben.
Maaartinus
14
Warum sind Windows-Benutzer so besessen von grafischen Oberflächen?
tdammers
8
@tdammers Weil die Befehlszeile unter Windows zum Kotzen ist? Ich weiß, es gibt PowerShell, aber verwenden sie es?
Maaartinus
3
@Saeed, für den Anfang erwarten Sie, dass es in git Dateien gibt, die ein- und ausgecheckt werden. Kein verwendbares VCS hat das seit Jahren.
Daniel Roseman
1
Empfohlene Lektüre: ericsink.com/entries/vcbe_print_edition_free.html Erläutert die Grundlagen der Versionskontrolle und die Unterschiede zwischen zentralisiert und dezentralisiert (die möglicherweise noch einen zentralen Server benötigen )
Inca,

Antworten:

19

Die Vorteile, die sich daraus ergeben, dass viele alte Annahmen darüber, was ein VCS tun sollte, verworfen wurden. Die Nachteile resultieren daraus, dass Sie nicht in der Lage sind, frühere Erfahrungen zu nutzen und Dinge nicht so zu tun, wie Sie es gewohnt sind.

Wenn Sie von etwas anderem zu Git wechseln möchten, versuchen Sie, tabula-rasa zu starten (obwohl dies in der Praxis nicht wirklich möglich ist). Bewerten Sie es basierend darauf, was es tut und wie gut es es tut, nicht darauf, wie es es tut, verglichen mit der Art, wie Sie es gewohnt sind. Es ist nicht so, dass Sie zu viel erwarten, es ist so, dass Ihre Erwartungen orthogonal zu dem sind, was Git bereitstellt. Wenn Sie mit einer grafischen Benutzeroberfläche verheiratet sind, werden Sie enttäuscht sein. Git verfügt zwar über GUI-Tools, diese fügen jedoch nicht viel hinzu. Das ist kein Misserfolg, sie so zu versorgen, wie es nicht so viel gibt, dass ein GUI hinzufügen kann. GitK hilft nicht bei der täglichen Arbeit, sondern bei der Visualisierung der Filialstruktur und der Überprüfung oder Suche in der Historie.

Hier ist eine doofe Analogie für das, was ich mit "orthogonal" meine. Mit einer Zeitung können Sie unter anderem Fische einwickeln oder einen Vogelkäfig damit auskleiden. Dies ist jedoch für die Funktion einer Zeitung nicht unbedingt erforderlich , da es sich um zufällige Merkmale des Formulars handelt . Wenn Sie erwarten, dass git Dateien eincheckt, Projekte auswählt oder eine Verbindung zu ... "ist eine Art Erwartung, Fische einwickeln oder Ihren Vogelkäfig mit der Website einer Zeitung auskleiden zu können .

kylben
quelle
Hoppla, ich habe vergessen, die Bearbeitung zu erklären. Ich habe gerade den letzten Absatz hinzugefügt, nachdem ich aufgestanden war, um noch etwas Kaffee zu trinken, und mir die Analogie in den Kopf gesetzt hatte.
kylben
3
Liebte die Metapher am Ende. +1
Yam Marcovic
7

Haben Sie mercurial betrachtet? Wie bei git handelt es sich um ein DCVS, mit dem Sie alle netten Dinge erledigen können, die mit einem DCVS möglich sind. Genau wie git gibt es einen ziemlich guten Cloud-basierten Dienstanbieter (Bitbucket). Aber im Gegensatz zu Idiot ist die Windows-Geschichte ziemlich anständig, Sie sind kein Bürger zweiter Klasse. Sie haben gute Werkzeugoptionen (TortiseHG) und eine recht gute Visual Studio-Integration (VisualHG).

Nichts wird so sein wie TFS im Visual Studio - die Welt ist einfach nicht so verkabelt.

Wyatt Barnett
quelle
1
Ich würde zustimmen, vor ein paar Jahren bin ich von VSS zu Mercurial gewechselt und es war eine echte Offenbarung. Plötzlich konnte ich Dinge tun, von denen ich nie gedacht hätte, dass sie praktisch wären. Dann bin ich zu svnvielen Dingen übergegangen und habe sie verpasst, die einfach so einfach waren hg. Jetzt ziehe ich um gitund habe gemischte Gefühle. Ich liebe es, viele der Einrichtungen, die ich verpasst habe, zurückzugewinnen svn, aber ich vermisse immer noch die Einfachheit im hgVergleich zu der unnötigen Komplexität von git. Selbst wenn Sie TortoiseGit nur unter Windows installieren , müssen Sie durch Rahmen springen, die mit TortoiseHg einfach nicht erforderlich sind .
Mark Booth
@ Mark Booth: Ich würde zustimmen, dass Git nicht sehr benutzerfreundlich ist, aber welche unnötige Komplexität ? Installationsprobleme zählen nicht, sie können an TortoiseGit (einem anderen Programm) oder an Windows liegen.
Maaartinus
Dies wäre im Chat besser dran, aber ich sehe keinerlei Notwendigkeit für den Index- / Cache- / Staging-Bereich. IMHO sollte die Standardeinstellung sein, alles mit der Option der teilweisen Festschreibung festzuschreiben, falls dies angefordert wird nicht sofort, führen Sie Ihre Komponententests erneut aus, schreiben Sie fest und heben Sie dann auf). Ich hasse es auch, explizit einen neuen Zweig erstellen zu müssen, wenn ich einen möchte. Mit hg wird ein unbenannter Zweig automatisch erstellt, wenn Sie einen Nicht-Kopf festlegen. Wenn Sie sich in git von einem Kopf entfernen, ohne sich zu verzweigen, können Sie ihn möglicherweise verlieren und dann den Müll einsammeln lassen!
Mark Booth
6

Ich bin vor einem Jahr von SVN zu Git gewechselt und freue mich sehr darüber. Ich verlasse mich jedoch nicht auf eine GUI, und falls Sie die Befehlszeile strikt ablehnen, kann dies ein Problem sein.

Sie scheinen zu erwarten git, dass Sie so arbeiten, wie Sie es gewohnt sind, aber das tut es nicht. Es ist nicht schwer, aber Sie sollten einen Blick auf die Prinzipien werfen, bevor Sie fortfahren.

Ein Projekt auf Git erstellen und es einem Ordner auf meinem Laptop zuordnen

Git ist verteilt, was bedeutet, dass Sie immer mit Ihrem lokalen Repository arbeiten, das auf eine beliebige Anzahl von Remotes, einschließlich Null, abgebildet werden kann. Beim Spielen mit dem Projekt anderer verwende ich zwei Fernbedienungen: das Git- oder SVN-Repository und meinen eigenen Server.

Ich erstelle immer ein leeres Verzeichnis und dann entweder git initoder git clone SOME-REMOTE-REPOSITORY. Dieser Link könnte Ihnen helfen.

Dateien und Ordner auschecken / einchecken

Sie haben nicht geschrieben, welche GUI Sie verwenden. Beides kann TortoiseGitund git-guikann es sicher.

Konflikte lösen

Dafür benutze ich git-guioder mein Lieblingstexteditor.

Ich erwarte, dass die GUI eine Verbindung zu ... oder so etwas hat

Verbinden mit was, wenn es 0 bis N Fernbedienungen geben kann? Git bleibt nicht mit einem Remote-Server verbunden, sondern stellt die Verbindung nur vorübergehend und nur für die wenigen Befehle her, die mit dem Remote-Repository arbeiten. Die meiste Arbeit wird vor Ort erledigt.

dann erwarte ich, dass eine Liste von Projekten gezeigt wird

Ich gehe davon aus, dass projectsdu meinst repositories.

Ich fürchte, es gibt so etwas nicht. Git auf einem Remote-Server funktioniert nur mit einem einzigen Repository. Das Auflisten aller Repositorys entspricht dem Auflisten aller Verzeichnisse, die das Unterverzeichnis enthalten .git. Ich bin sicher, dass es so etwas gibt GitHub.

Ich wähle eines aus und erwarte, dass die Liste der Dateien und Ordner dieses Projekts angezeigt wird, genau wie beim Durchsuchen

Leider gibt es so etwas nicht, da es gitvor Ort arbeitet. Und wieder würde es nicht viel nützen. Klonen Sie einfach das Repository und durchsuchen Sie es auf Ihrem Computer. Während das Klonen großer Repos einige Zeit in Anspruch nimmt, sind alle nachfolgenden Vorgänge viel schneller, und Sie können sich jedes Commit oder jeden Zweig ansehen.

Dann möchte ich in der Lage sein, mit der rechten Maustaste auf eine Datei zu klicken und "Einchecken" oder "Auschecken" auszuwählen.

Funktioniert wieder gitlokal. Es macht also keinen Sinn, in ein Remote-Repo ein- oder auszuchecken. Auf diese Weise zu arbeiten ist Zeitverschwendung, selbst in einem schnellen LAN. Holen Sie sich das Repository auf Ihren Computer, arbeiten Sie damit und nehmen Sie git pushdie Änderungen an der Fernbedienung vor. Stellen Sie sich vor, Sie veröffentlichen Ihre Änderungen und erstellen ein Backup. Sie sollten sich sehr oft vor Ort engagieren .

Bevor Sie mit Ihrer Arbeit beginnen git fetchoder git pulldie Änderungen von der Fernbedienung aus, falls jemand anders damit gearbeitet hat.

Erwarte ich viel

Ja und nein. Sie erwarten etwas anderes als das, was es bietet. Sie können viel Besseres erreichen, gitsind leistungsfähig, flexibel, sicher, schnell und können alles tun, was Sie brauchen, aber es kann nicht genau nachahmen, was ein zentrales VCS tut.

maaartinus
quelle
5

Ich habe die Reise von der visuellen Quelle sicher zu tfs zu svn zu git gemacht.

Der Wechsel von vss zu tfs war eine angenehme Erfahrung. Es war eine angenehme Erfahrung, von tfs zu svn zu wechseln. Der Wechsel von Svn zu Git war eine Art innerer Kampf.

Oft bin ich ziemlich konservativ und versuche, mich an das zu halten, was funktioniert. Eine nette Benutzeroberfläche ist für mich der Befehlszeile vorzuziehen und ich habe nach einer Benutzeroberfläche gesucht, mit der ich mit den coolen Kindern spielen kann, mit denen ich arbeite. Sie alle benutzten git ausschließlich mit der Kommandozeile.

Der Eureka-Moment für mich war gekommen, als ich die Suche nach einem Silberkugel-GUI aufgegeben und angefangen hatte, Git Bash zu testen (ich lerne noch).

Ich habe einige Guis installiert und sie ergänzen Git von der Kommandozeile. Git-Erweiterungen, Git-Versionsverwaltungsanbieter für Visual Studio und Tortoise Git. Aber ich sage, mach dich mit Git Bash vertraut. Die Befehle können etwas kryptisch sein, aber sobald Sie sie gelernt haben, sind sie viel schneller als die GUI.

Das Verzweigen mit git ist einfach fantastisch im Vergleich zu den anderen. Erstellen Sie Zweige und wechseln Sie fast augenblicklich zwischen Zweigen. Sie können Dinge tun, die Sie mit svn nicht tun würden, weil svn im Grunde Ihre Arbeitskopie kopiert (zumindest so, wie ich es getan habe).

Ich finde, Git hat eine steilere Lernkurve als SVN. Aber sobald du es mit git "verstanden" hast, willst du nicht mehr zurück.

Git den ganzen Weg.

tomasat
quelle
5

Sie sind es gewohnt, einen Server zu haben, auf dem Ihre Dateien gespeichert sind und der allmächtige Eigentümer der Dateien ist. Um eine Datei zu bearbeiten, müssen Sie den Server um Erlaubnis bitten.

Git ist nicht so. Stellen Sie sich git folgendermaßen vor: Sie haben Ihr lokales Repository. Git können Sie verpflichten Änderungen, Reverse - Commits, einfache und schnelle Verzweigung, etc. Wenn Sie sichern möchten Ihre Quelle-Steuer Geschichte, Sie drücken , um die Änderungen zu einem anderen Repository, das „nur zufällig sein“ ein Server, wie GitHub.com.

Arbeitsablauf:

  1. Klonen (Download) / Repository erstellen
  2. Nehmen Sie einige Änderungen vor. Fahren Sie mit der Entwicklung fort, ohne sich um andere zu kümmern.
  3. Push in ein anderes Repository (könnte ein Server wie GitHub sein).
  4. Wenn Sie auf ein Repository pushen, wird der Eigentümer des anderen Repository über den ausstehenden Push informiert und muss entscheiden, ob diese Commits akzeptiert, abgelehnt oder nur eine Teilmenge davon angenommen werden sollen.
  5. Der Zyklus geht weiter.

Das ist alles.

Yam Marcovic
quelle
1

Was meinst du mit "der" Git Gui? Es gibt eine Unmenge davon, einschließlich eines Plugins für die visuelle Studio-Integration, wenn ich mich richtig erinnere. Wenn eine GUI für Sie nicht funktioniert, versuchen Sie es noch einmal, bis Sie eine finden, die dies tut. Ich persönlich benutze verschiedene GUIs für verschiedene Aufgaben (und die CLI für andere).

Git ist jedoch eher ein Versionskontrollframework als ein festes System. Sie müssen noch einige Grundlagen lernen, um das Beste daraus zu machen.

Karl Bielefeldt
quelle
-2

Erwarte ich viel

Ja

Was soll ich tun, um Git einfach wie TFS zu nutzen?

Nichts. Git ist CLI-zentriert und hat kein gutes Frontend (ich kenne TortoiseGit, was im Vergleich zu anderen Tortoise * keine Antwort ist). Sie können versuchen , SmartGit zu verwenden (Vorsicht vor Java)

Fauler Dachs
quelle
1
-1: Das Ein- und Auschecken von Dateien und das Lösen von Konflikten erfordert nicht viel von der Quellcodeverwaltung.
Steven Evers
2
+1 Es macht einfach keinen Sinn, sie direkt von einem Remote-Server aus zu überprüfen. Es ist einfach zu langsam, auch über LAN. Solche Dinge zu tun ist etwas, wofür FTP ist, nicht VCS.
Maaartinus
1
Das Ein- und Auschecken von Dateien ist für ein VCS keine grundlegende Operation. Es ist eine Implementierungsfunktion, die den meisten VCS gemeinsam ist und subtile, aber unglückliche Nebenwirkungen hat.
kylben
2
@kylben: Einchecken / Auschecken ist eine Möglichkeit, die Versionskontrolle zu betrachten. Bearbeiten und Zusammenführen ist ein anderer Weg. Einige VCSs verwenden den vorherigen Ansatz und bieten Ihnen exklusive Sperren und die Möglichkeit, einzelne Dateien auszuchecken. andere nehmen letzteres und mit diesen laden Sie das gesamte Repository herunter, nehmen Ihre lokalen Änderungen vor und übertragen sie dann zurück auf die Fernbedienung. Das VCS kümmert sich um die Verwaltung widersprüchlicher Änderungen und bittet im Zweifelsfall um Ihre Eingabe. Keiner der Ansätze ist besser, aber Sie können ein VCS normalerweise nicht in das verbiegen, für das es nicht gemacht wurde.
tdammers
1
Beim Ein- und Auschecken ging es mir tatsächlich darum, wie sperrenbasierte VCS Dinge implementieren, und nicht darum, wie Sie Quelldateien zum Bearbeiten herunterladen können (was in der Tat für jedes VCS möglich sein muss). Die Tatsache, dass viele VCS den bloßen Vorgang des Herunterladens einer Datei als "Auschecken" bezeichnen, ist eine falsche IMO - nichts wird überprüft, und das Repository kann sich nicht erinnern, wer die Datei hat.
tdammers