Ich bin mir nicht sicher, ob dies etwas ist, das Sie noch nicht wissen, aber ich verwende Mercurial bereits seit einiger Zeit lokal, und ich denke, dass die Vorteile den zusätzlichen Aufwand für die Verwaltung der beiden Versionsverwaltungssysteme überwiegen. So habe ich es gemacht:
Ich habe meine TFS-Kasse zu einem HG-Repository gemacht, das ich als meinen "Master" betrachte. Ich erhalte Updates von TFS und verpflichte sie zu diesem Repo, sodass dieser den aktuellsten Status des Projekts von TFS enthält. Wichtig hierbei ist, dass keine Änderungen daran vorgenommen werden, die unabhängig von einem TFS-Update oder einer Hg-Zusammenführung (Teil 2) vorgenommen wurden.
Immer wenn ich etwas ändern muss, klone ich mein "Master" -Repo und mache dort meine Arbeit. Ich habe festgestellt, dass ein Klon pro Feature oder Story eigentlich ziemlich einfach zu verwalten ist und sich ziemlich sauber anfühlt. Sobald ich eine Funktion abgeschlossen habe, führe ich eine Hg-Zusammenführung zum "Master" -Repo durch, auf das alle TFS-Updates angewendet wurden. Auf diese Weise kann ich Mercurials-Zusammenführungsfunktionen verwenden, die TFS so weit überlegen sind, dass in Frage gestellt wird, wie TFS behaupten kann, Code überhaupt zusammenzuführen. Sobald die Zusammenführung abgeschlossen ist, übertrage ich sie in Hg und überprüfe diese Änderungen in TFS. Das Beste daran ist, dass ich beim Einchecken in TFS nichts zusammenführen muss. Sehr sehr nett.
Hier sind die Probleme, die ich bei diesem Ansatz festgestellt habe:
Das größte Problem ist die Tatsache, dass TFS schlecht darin ist, Änderungen zu finden. Es gibt ein Make-Writable- Plugin, mit dem Sie die geänderten Dateien beschreibbar machen können, wenn sie von Mercurial aktualisiert / zusammengeführt werden. Dafür habe ich zwei Möglichkeiten gefunden. Sie können entweder TFS zwingen, offline zu gehen. Zu diesem Zeitpunkt wird davon ausgegangen, dass alles Beschreibbare eingecheckt werden muss, oder Sie können das Vergleichstool im Versionsverwaltungs-Tool verwenden, die geänderten Dateien auswählen und einzeln auschecken. Beide sind beschissen IMO
Die Quellcodeverwaltungsbindungen sind auf Projektebene weiterhin vorhanden, auch wenn Sie die TFS-Quellcodeverwaltungsdateien aus Ihrem hg-Repository ausschließen (was Sie tun sollten). Dies ist erst dann ganz offensichtlich, wenn Sie der Lösung eine Datei hinzufügen. Zu diesem Zeitpunkt wird versucht, sie der Quellcodeverwaltung hinzuzufügen. Sie können "Ausstehende Änderungen rückgängig machen" und das Hinzufügen der Quellcodeverwaltung entfernen, aber es ist wirklich ärgerlich.
Die gute Nachricht ist, dass ich diesen Ansatz verwendet habe, um eine ziemlich massive Fusion durchzuführen, von der ich glaube, dass ich mich einer Form von harten Drogen zugewandt hätte, wenn ich gezwungen gewesen wäre, die TFS-Tools zu verwenden, um dies zu tun.
Ich habe dies noch nicht auf die Aktualisierung von Zweigen in TFS angewendet, aber ich vermute, dass dies viel besser wäre als die Optionen, die Sie für das Zusammenführen in TFS erhalten. In einem ähnlichen Zusammenhang ist die Verwendung der TFS-Zusammenführung weniger problematisch, da Sie alle für eine Funktion erforderlichen Änderungen an einem Ort zusammenfassen können, da Sie Teile der Arbeitsfunktionalität gleichzeitig einchecken können.
Eine Sache, die ich nicht in Angriff genommen habe, ist, dies im gesamten Team zu teilen. Ein Grund dafür ist, dass es wirklich nicht teamweit sein muss. Ich arbeite remote, daher ist ein lokales Repository eine große Sache und spart viel Zeit. Die anderen Mitglieder meines Entwicklerteams können von diesem Ansatz profitieren oder auch nicht, aber ich finde es ziemlich cool, dass ich es kann, ohne ihre Arbeitsweise zu beeinträchtigen.
Update
Ich wollte diese Antwort schon seit einiger Zeit mit zusätzlichen Informationen aktualisieren, die auf Kommentaren und einigen meiner Erfahrungen mit großen TFS-Repositorys basieren.
Wie @ Eric Hexter in den Kommentaren ausführt , können Sie zunächst die Rebase-Erweiterung verwenden , um Commits aus Ihren Arbeitsrepositorys besser in Ihr Haupt-TFS-Repository zu integrieren. Obwohl, je nachdem , wie Sie Ihre Commits TFS erscheinen sollten Sie das verwenden Zusammenbruch Erweiterung um die Änderungen zu quetschen in einem einzigen Commit (dies einfacher Rollbacks in TFS machen können). Es gibt auch den Befehl "online" von TFS PowerTools , mit dem TFS leichter wissen kann, was sich geändert hat (nochmals vielen Dank an Eric, der dies in seinem Blog-Beitrag erwähnt hat ).
Als ich das ursprünglich schrieb, arbeitete ich an einem Projekt, das nur einen TFS-Zweig hatte, den Entwickler verwendeten, und der ziemlich klein war, sodass das Klonen von Repositorys keine große Sache war. Später arbeitete ich an einem Projekt mit einem Repo, das nach dem Auschecken etwa 1,5 GB groß und nach dem Build viel größer war, und wechselte häufig zwischen Zweigen in TFS. Offensichtlich ist dieser Ansatz für diese Umgebung nicht gut geeignet (zumal es zu einem bestimmten Zeitpunkt unmöglich war, die Lösungen in einem beliebigen Verzeichnis zu erstellen.
Das Größenproblem lässt sich am besten lösen, indem eine Technik verwendet wird, die den Themenzweigen von gits ähnelt, anstatt die Repositorys in neue Verzeichnisse zu klonen. Hierfür gibt es einige Optionen. Ich denke, das Beste ist, die Lesezeichenerweiterung zu verwendenund erstellen Sie Themen- "Lesezeichen" anstelle von Themenzweigen. Sie können auch benannte Zweige verwenden, diese haben jedoch den leichten Nachteil, dass sie permanent sind und mit allen Klonen reisen, die Sie möglicherweise verwenden (wenn Sie Ihren raffinierten TFS-Hg-Hybrid mit einem Kollegen teilen möchten). Lesezeichen sind lokal für Ihr Repo und weisen effektiv auf ein Commit hin und reisen mit dem Kopf. Sie sind so implementiert, dass sie an jedem Ort verwendet werden können, an dem Hg eine Überarbeitung erwartet (also Zusammenführungen, Aktualisierungen usw.). Sie können diese verwenden, um ein TFS-Lesezeichen als primären "Zweig" zu erstellen, der nur Aktualisierungen von TFS erhält und aus der Themenarbeit zusammengeführt wird, für die jeweils eigene Lesezeichen vorhanden sind. Sie können diese löschen, sobald Sie sich wieder für TFS entschieden haben. Wenn Sie lieber benannte Zweige verwenden möchten, können Sie genau die gleichen Techniken anwenden, was praktisch ist.
Das Problem mit mehreren Zweigen ist jetzt schwieriger, insbesondere da TFS- "Zweige" tatsächlich Kopien jeder Datei aus dem ursprünglichen Zweig sind. Dies bedeutet, dass Ihr Repo jedes Mal, wenn Sie Zweige aus TFS ziehen, viel größer wird. Eine Möglichkeit, damit umzugehen, besteht darin, eine Kombination aus benannten Hg-Zweigen und Lesezeichen zu verwenden, sodass Sie für jeden TFS-Zweig einen Zweig haben, und dann Lesezeichen für Ihre Arbeit aus diesen Zweigen zu erstellen. Die wirklichen Kopfschmerzen in diesen Szenarien sind tatsächlich die Behandlung von TFS-Arbeitsbereichen durch all dies. Sie können die Zuordnungen in Ihren Arbeitsbereichen entfernen und ziemlich weit kommen. Wenn Sie jedoch wieder Ihrem Arbeitsverzeichnis zugeordnet sind, müssen Sie darauf achten, dass TFS nicht auf Dateien stampft (hier bieten sich die TF PowerTools an). Der Versuch, den Arbeitsbereich angeschlossen zu lassen, während Sie die Zweige wechseln, wird schnell hässlich. Ein paar Werkzeuge, die schön in Ihrem Werkzeuggürtel zu haben sind, sind die HgPurge-Erweiterung und der TF PowerTools-Befehl "scorch". Beide entfernen effektiv Dateien, die sich nicht in der Versionskontrolle befinden (technisch "scorch" stellt sicher, dass TFS und Ihr lokales Arbeitsverzeichnis übereinstimmen, sodass auch Dateien aktualisiert werden können).
Für mich wurde dieser Prozess jedoch ziemlich lästig und fehleranfällig. Ich habe kürzlich auf die Verwendung von git mit git-tfs umgestellt , da es TFS-Arbeitsbereiche für mich verwaltet und einen Großteil der mit dieser Seite verbundenen Belastung beseitigt. Leider scheint es nirgendwo da draußen ein "hg-tfs" zu geben, oder ich hätte das wahrscheinlich gewählt.