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.
Wenn Sie nicht auf mercurial fixiert sind, gibt es ein süßes git / tfs-Integrationsprojekt namens git-tfs, das ich verwendet habe. Es ist git-svn sehr ähnlich, drückt aber stattdessen von TFS. Überprüfen Sie es unter http://github.com/spalts/git-tfs
quelle
@ Eric, dein Beitrag bei lostechies war sehr hilfreich. Mit VS2010 musste ich dem Befehl tftp online im Push-Skript die Optionen / diff und / deletes hinzufügen , um geänderte und gelöschte Dateien in TFS einzuchecken. Am Anfang war ich einen Fehler von Push bekommen , wenn eine Datei (von -Arbeiten) gelöscht wurde hg update ist „nicht in der Lage zu entfernen FileXyz : Zugriff verweigert“. Ich habe die Erweiterung MakeWritable.py installiert, aber das funktioniert nur, wenn Dateien geöffnet und nicht gelöscht werden. Also habe ich einen Aufruf von attrib hinzugefügt , um das READ-ONLY aus allen Dateien im Projekt zu entfernen und es anschließend wiederherzustellen (mit Ausnahme des .hg-Ordners). Außerdem habe ich das / diff hinzugefügt
Option, damit Unterschiede von der MD5-Prüfsumme erkannt werden, anstatt vom READ-ONLY-Attribut abhängig zu sein. Scheint jetzt gut zu funktionieren.
Ich hatte eine gewisse Lernkurve mit PowerShell-Skripten, die ich zuvor noch nicht verwendet hatte. Für andere wie mich werden die Skripte mit einer Verknüpfung wie dieser ausgeführt:
Ich habe Push- und Pull-Verknüpfungen in meine Taskleiste eingefügt, sodass das Drücken / Ziehen zu / von TFS mit einem einzigen Klick erfolgt
quelle
Ich weiß, dass einige Leute hgsubversion mit der Subversion-Brücke verwendet haben. Ich weiß nicht, wie gut es funktioniert hat, und ich musste TFS nie verwenden.
Soweit mir bekannt ist, gibt es keine "nativere" Bridge als TFS -> Subversion Bridge -> hgsubversion, aber ich habe auch gehört, dass es ziemlich gut funktioniert. Mein äußerst begrenztes Verständnis von TFS legt nahe, dass sein internes Modell Subversion ähnlich genug sein sollte, damit Dinge wie hgsubversion wirklich gut funktionieren.
quelle
Wenn Sie mit DVCS und TFS arbeiten möchten, ist es meiner Meinung nach am besten, die SVNBridge für TFS zu installieren und Bazaar zu verwenden. Dies ist AFAIK , das einzige DVCS, das sich problemlos in SVN integrieren lässt, und seit Ihrem TFS sieht aus wie ein SVN, Sie erhalten auf magische Weise Bazaar / TFS-Integration
quelle
Hier ist ein Powershell-Skript, mit dem ich mit TFS & hg gearbeitet habe. Um es zu verwenden, müssen Sie ein hg-Repository in Ihrem TFS-Ordner erstellen (die Dateien von TFS darin festschreiben), dieses Repository klonen und am neuen Repository arbeiten. Sobald Sie zufrieden sind, können Sie "hgtfs.ps1 push" ausführen, um die Änderungen aus Ihrem Quecksilber-Repository zurück in TFS zu übertragen.
hgtfs.ps1:
quelle
Ich habe gerade ein kleines Tool zusammengestellt, HgTfs, das versucht, das Ziel der Synchronisierung von Mercurial- und TFS-Repositorys zu erreichen. Es ist wirklich einfach und hat nur drei Befehle: Klonen, Ziehen und Drücken. Hier ist mein Bitbucket-Repo:
https://bitbucket.org/thepretender/hgtfs
Es gibt auch einen Blog-Beitrag, der die Workflow- und Nutzungsszenarien beschreibt (eigentlich sind Wiki-Seiten nur Teile dieses Blogeintrags):
http://www.olegtarasov.me/Post/2013/07/Mercurial-to-TFS-bridge-(hgtfs)
Der Code ist hackig, aber er scheint die Arbeit zu erledigen. Ich würde mich über Feedback oder Gabeln sehr freuen :)
quelle
Ich hatte einen guten Versuch, es zum Laufen zu bringen. Ich konnte Git und TFS über svnbridge zusammen spielen lassen ( Link ), aber ich konnte Mercurial nicht dazu bringen, über svnbridge zu arbeiten, was mich ohne Ende frustrierte. Wenn Sie es schaffen, es zum Laufen zu bringen, lassen Sie es mich wissen, denn ich persönlich bevorzuge Quecksilber gegenüber Git (obwohl beide großartig sind).
quelle