TFS: Wie können Sie das Auschecken nicht geänderter Dateien in einer Batchdatei rückgängig machen?

172

Wir verwenden eine Batch-Datei zum Generieren von Code und sie checkt die generierten Dateien von Team Foundation Server (TFS) automatisch aus, damit sie neu generiert werden können. Die meisten dieser Dateien werden nicht geändert, aber der Generator weiß dies nicht im Voraus.

Der Befehl "tfs rückgängig machen" macht das Auschecken rückgängig, fordert Sie jedoch auf, wenn einige geändert wurden (was wir nicht möchten). Wir möchten die generierten Dateien auch nicht sofort einchecken.

Gibt es einen Befehl (oder eine Reihe von Befehlen), um das Auschecken aller nicht geänderten Dateien rückgängig zu machen, ohne den Benutzer dazu aufzufordern?

Robert Wagner
quelle
Beachten Sie, dass alle Änderungen mit der Erwartung der Wahl „No to all“ , wenn Sie gefragt werden Dateien manuell rückgängig gemacht , die haben geändert wird nicht korrekt funktionieren, da es rückgängig machen ADDÄnderungen ohne Aufforderung (siehe Ray Antwort ).
Elaskanator

Antworten:

202

Sehen Sie sich den Befehl Unverändert rückgängig machen der Team Foundation Server Power Tools August 2011 an

c:\myProject> tfpt uu . /noget /recursive

Vielen Dank an Matt Florence für das Link-Update.

Vielen Dank an Ray Vega für die aktuelle Syntax .

Mike Chaliy
quelle
1
Dies sollte bearbeitet / zusammengeführt werden, um die Nutzungsinformationen als Teil des Antwortinhalts zu enthalten.
McW
4
Sie möchten diesen Beitrag wirklich lesen: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock
17
hmm, etwas, das fast jeder mehrmals täglich macht: "Lass es
uns
1
@ Mike Chaliy würden Sie denken. Ich probiere gerade TFS aus und habe nach Möglichkeiten gesucht und bin hier gelandet.
Vidstige
3
Es funktioniert nicht, wenn Ihre Änderungen zusammengeführt werden. Es scheint, dass tfpt uu eine Zusammenführung immer als echte Änderung betrachtet, auch wenn keine Dateiänderung vorliegt und es keine Option gibt, dieses Verhalten umzudrehen. Standardmäßig ist es in Ordnung, aber manchmal ist es nicht das, was Sie wollen.
user1164178
124

Installieren Sie Team Foundation Server Power Tools und führen Sie Folgendes über die Befehlszeile mit tfpt.exe im Stammverzeichnis des Arbeitsbereichsverzeichnisses Ihres Projekts aus:

c:\myProject> tfpt uu . /noget /recursive

Das Einschließen /nogetwird dringend empfohlen, da es verhindert, dass alle Dateien Ihres Projekts erzwungen werden, was abhängig von der Gesamtzahl extrem lange dauern kann.

Strahl
quelle
12
Dies sollte die akzeptierte Antwort sein, sie enthält alle relevanten Details (wie durch die höhere Punktzahl belegt).
Rikoe
7
Cool. Fügen Sie dies auch als permanentes externes Tool zu Visual Studio hinzu. Am Beispiel: blog.kurtschindler.net/post/… Befehl: [Ihr Installationsverzeichnis] ​​\ TFPT.EXE Argumente: uu. / noget / rekursiv Anfangsverzeichnis: $ (SolutionDir)
rohancragg
12
Die Frage gibt an, dass dieser Vorgang ohne Eingabeaufforderung ausgeführt werden soll , aber keine der Antworten scheint dies zu beheben. Wenn Sie dies benötigen, ist das zusätzliche / noprompt die Option, nach der Sie suchen. In der PowerTools-Dokumentation fehlt dies! Diese Option wird für einige der Befehle aufgelistet, nicht jedoch für diese (UU). In acht nehmen!
Johnny Kauffman
1
@ user20358 entweder dorthin cd, wo sich Ihr Arbeitsbereichsverzeichnis befindet (z. B. meins c:\myProject), oder fügen Sie es explizit nach uu(Ersetzen des Punkts .durch ihn) ein
Ray
Hat dies einen Kraftschalter wie / Y oder / force? Ich werde immer gefragt, ob ich es wirklich rückgängig machen möchte, und ich möchte, dass dies automatisiert wird. Setzen Sie / Y dort, aber es sagt mir, dass die Option Y einen Wert erfordert.
Eichhörnchenkiller
118

Vielen Dank an @mike & @ray,

Ich möchte es einfacher machen.

Klicken Sie in VS im Menü Extras auf "Externe Tools".

Externe Tools

Klicken Sie auf Hinzufügen.

Titel eingeben.

Befehl: tfpt.exe

Argumente: uu. / noget / rekursiv

Erstverzeichnis: [Sie können über die Pfeilschaltfläche auswählen].

In Lösung unverändert rückgängig machen

Im Projekt unverändert rückgängig machen

Dem Menü Extras werden zwei neue Befehle hinzugefügt.

Verwenden Sie sie bei Bedarf.

Genießen,

Ofir

Ofir
quelle
3
Sehr cool. Sie können auch noch einen Schritt weiter gehen und eine Verknüpfung hinzufügen. Beachten Sie, wie weit Ihr hinzugefügter Befehl entfernt ist (z. B. kann es der vierte sein). Gehen Sie dann zu Extras -> Optionen -> Umgebung -> Tastatur -> und geben Sie das Textfeld "Befehle mit" anzeigen "Tools.External" ein und weisen Sie eine Verknüpfung zu. Zum Beispiel habe ich Tools.ExternalCommand4 ausgewählt, da mein neu hinzugefügter Rückgängig-Befehl der vierte war. Ich habe dann Tastenkombinationen Strg + Alt + U, Strg + Alt + U zugewiesen
Mario
1
Könnten wir bitte eine aktualisierte Version davon haben? Wenn tf.exe gefunden, aber was ist uu Befehl? es sagt mir Unerkannter Befehl: uu. Vielen Dank für
Shay
1
@Shay: Funktioniert für mich in VS2015 mit den neuesten installierten TFS-Elektrowerkzeugen.
Igor Malin
27
  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt
  2. Wählen Sie "Kasse rückgängig machen" und klicken Sie dann auf "OK" oder auf eine Bestätigung, die noch übrig ist ...
  3. Wenn Sie dann das Auschecken rückgängig machen, werden Sie für jede Datei, die REAL-Änderungen enthält, aufgefordert, das Auschecken für diese Datei zu bestätigen. Klicken Sie einfach auf "Nein zu allen".

Visual Studio erkennt, ob die ausgecheckte Datei Änderungen aufweist oder keine.

WARNUNG: Diese Methode entfernt auch neue Dateien, dh Dateien, die noch nicht in TFS eingecheckt sind. Wenn Sie diese Dateien behalten möchten, schließen Sie sie einfach aus dem Satz von Dateien aus, die Sie "rückgängig machen".

Ray Lionfang
quelle
14
Be aware that this method also removes added files that are not yet checked in from TFS.... ja, das ist ein ziemlich sofortiger Disqualifizierer.
Shortstuffsushi
1
Es funktioniert für meine Baseless- Zweige zusammenführen. Vielen Dank. Normalerweise markiert VS in diesem Fall Alle Dateien in Lösung als geändert.
KoViMa
2
Dies ist eine Hölle, wenn Nuget nach 10000 Dateien sucht, die nicht aktualisiert werden müssen.
Ievgen Naida
13

Diese Frage wurde mit einer Antwort aktualisiert, wenn nur mit TFS2017 und VS2017 / VS2019 gearbeitet wird .

Die Elektrowerkzeuge existieren für TFS 2017 nicht und die alten können nicht gut damit zusammenarbeiten, aber anscheinend wurde der größte Teil der Funktionalität auf VS2017 selbst oder Plugins verschoben (siehe unten).

Visual Studio 2017/2019 Erweiterung

Einige Aktionen wie das Rückgängigmachen unveränderter Dateien wurden in eine verschoben

Erweiterung für VS2017

Erweiterung für VS2019

Position der Schaltfläche "Unverändert rückgängig machen":

Unveränderte Tastenposition rückgängig machen

Bekannter Fehler

Sie müssen den 'Versionsverwaltungs-Explorer' öffnen (und offen lassen), damit im Menü Aktion der Ansicht Ausstehende Änderungen die Option 'Unverändert rückgängig machen' angezeigt wird. hier berichtet .

Windows Shell-Integrationserweiterung

Sie können die Windows-Shell-Integration auch weiterhin über ein separates Installationsprogramm einrichten, das nicht mehr mit TFS Power Tools verknüpft ist.

Die Windows-Shell-Integration funktioniert nicht genau so wie die vorherigen Powertools, aber die wichtigsten Aktionen haben bei mir funktioniert.

Schwarzie2478
quelle
Ich bemerkte in der Frage, dass sie es schreiben wollen, dafür habe ich leider keine Lösung
Schwarzie2478
1
Ich kann die Option "Unverändert rückgängig machen" in VS2017 nach der Installation der verknüpften Erweiterung nicht finden. Habe ich etwas verpasst ?
Erzékiel
Ich habe es nicht sehr oft benutzt. Als ich es zum Testen für meinen Kunden verwendete, musste ich im Team Explorer ein wenig herumklicken und sicherstellen, dass Änderungen zum Rückgängigmachen vorgenommen wurden. Es ist möglich, dass diese Option nur angezeigt wird, wenn Sie nur ausstehende Änderungen für ein Commit in der Warteschlange haben. (oder nur ein Zweig ändert sich) ...
Schwarzie2478
2
@ Erzékiel Die Option wird nur angezeigt, wenn der Projektmappen-Explorer geöffnet und bereit ist.
MatrixRonny
1
Diese Erweiterung funktioniert manchmal und ihre Anwesenheit hängt damit zusammen, dass der TFS- Quellcodeverwaltungs-Explorer geöffnet ist und nicht der Projektmappen-Explorer (wie einige fälschlicherweise betonten). Verwechseln Sie nicht die beiden verschiedenen Steuerungsfenster. Jedoch; Wenn ich manchmal sage, liegt es daran, dass es kommt und geht. Im Moment habe ich es nicht, ich habe es vor einem Monat getan. Es ist ein kleines bisschen fehlerhaft und ich fürchte, andere Erweiterungen sind der Schuldige, wie Resharper und dergleichen.
Christian
8

Wenn Sie einfach alle Dateien, die Sie ausgecheckt haben, wieder einchecken, ist TFS intelligent genug, um herauszufinden, welche Änderungen vorgenommen wurden, und sie nur in das auf dem Server aufgezeichnete Änderungsset aufzunehmen.

TFS vergleicht dazu MD5-Hashes des Dateiinhalts vor und nach dem Einchecken.

Dies alles setzt voraus, dass Ihr Generierungsprozess lediglich denselben Satz von Dateien aktualisiert, dh Sie werden nie den Fall haben, dass eine Datei, die in einer vorherigen Generation generiert wurde, in der nächsten Generation nicht benötigt wird (dh Sie möchten einen Löschvorgang anhängen für diese Datei) oder dass die Dateien ihren Namen ändern.

Wenn für Ihren Prozess möglicherweise Dateien gelöscht werden müssen, lesen Sie am besten den Befehl Team Foundation Power Tools ( tfpt ) und verwenden Sie den Befehl tfpt online, mit dem nur die geänderten Dateien überprüft werden und die intelligent genug sind pend löscht alle Dateien, die nicht mehr benötigt werden, oder ändert den Namen und fügt hinzu.

Viel Glück,

Martin.

Martin Woodward
quelle
6
Vielen Dank dafür, aber wir möchten die geänderten Dateien zu diesem Zeitpunkt nicht einchecken. Die geänderten sollten nicht eingecheckt werden, bis die Funktion abgeschlossen ist, aber die nicht geänderten sollten entfernt werden, damit der Entwickler die Änderungen überprüfen kann.
Robert Wagner
@RobertWagner Wenn Sie einen gated Build haben, können Sie den Vorgang abbrechen (wenn er bei identischer Dateierkennung nicht abgebrochen wird), wenn Sie die Popup-Warnung erhalten, dass die Änderungen zuerst erstellt werden müssen.
Elaskanator
6

Beachten Sie, dass durch das Rückgängigmachen von TFS der Wert "Änderungsdatum" des Dateisystems nicht zurückgesetzt wird. Dies ist sehr frustrierend, insbesondere wenn Sie Tools wie Robocopy verwenden, um Remotecomputer zu synchronisieren. Selbst nachdem Sie das Auschecken rückgängig gemacht haben und die Datei gespeichert und dabei den Wert "Änderungsdatum" aktualisiert haben, bleibt dieser aktualisierte Wert auch nach dem Rückgängigmachen des Auscheckens erhalten.

evermeire
quelle
1
Verwenden Sie entweder eine Robokopie oder ein VCS. Die Verwendung einer Mischung führt immer zu Inkonsistenzen. Viel besser wäre es, jede Maschine direkt aus VCS zu füllen.
Richard
4

Es gibt einige Punkte bezüglich der uu-Option für tfpt (empfohlen in den meisten anderen Antworten), die mir zunächst nicht klar waren. Erstens ist dies die Befehlszeilenhilfe, auf die mit dem Befehl zugegriffen werden kanntfpt uu /?

Macht redundante ausstehende Änderungen rückgängig. Wenn der Status eines Elements mit einer ausstehenden Änderung mit dem auf dem Server identisch ist, wird die Änderung rückgängig gemacht.

Verwendung: tfpt uu [/ Änderungssatz: Änderungssatz] [/ rekursiv] [/ noget] [Dateispezifikation ...]

  • / Changeset Vergleichen Sie den Arbeitsbereich mit den Elementzuständen in der angegebenen Changeset-Version anstelle der neuesten Version
  • Dateispezifikation ... Überprüfen Sie die aufgelisteten Dateispezifikationen nur auf redundante Änderungen
  • / recursive Überprüfen Sie die angegebenen Dateispezifikationen mit vollständiger Rekursion
  • / noget Führen Sie get nicht aus, bevor Sie es überprüfen

Die Option / Changeset darf nicht mit Dateispezifikationen oder / rekursiv verwendet werden.

Lassen Sie mich nun den Befehl aufschlüsseln, der in den anderen Antworten empfohlen wird.

tfpt uu . /noget /recursive
  • tfpt uu Gibt an, dass der Befehl 'Unverändert rückgängig machen' verwendet werden soll.
  • . gibt an (ich denke), dass das aktuelle Arbeitsverzeichnis als Dateispezifikation verwendet werden sollte.
  • /noget stellt sicher, dass "Neueste Version abrufen" nicht aufgerufen wird, bevor die unveränderten Dateien rückgängig gemacht werden.
  • /recursivestellt sicher, dass nicht nur die Dateispezifikation berücksichtigt wird, sondern alle rekursiven untergeordneten Ordner und Dateien. Dies scheint von der Dateispezifikation abhängig zu sein. Wenn keine angegeben ist, wird der gesamte Arbeitsbereich verarbeitet.

In Bezug auf den Befehl von oben sind hier einige Dinge zu beachten ...

  • Es ist abhängig vom Arbeitsverzeichnis.
  • Es wird nicht der gesamte Arbeitsbereich verarbeitet.

Ich habe festgestellt, dass der folgende Befehl für mich am besten funktioniert - er verarbeitet den gesamten Arbeitsbereich.

tfpt uu /noget

Beachten Sie, dass es immer noch vom Arbeitsverzeichnis abhängt, in dem tfpt verwendet, um zu bestimmen, welcher Arbeitsbereich verarbeitet werden soll. Solange Sie jedoch einen Pfad zu einer Datei oder einem Ordner im Arbeitsbereich angeben, können Sie loslegen.

Scott Munro
quelle
3

Ich kann Ray LionFangs Ansatz oben sehen. Kann dort nicht kommentieren, da ich den Repräsentanten nicht habe. Ich mag diesen Ansatz zwar, da keine Änderungen an Tools usw. erforderlich sind.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt
  2. Wählen Sie "Kasse rückgängig machen" und klicken Sie dann auf "OK" oder auf die Bestätigung, die noch übrig ist ...
  3. Wenn Sie dann das Auschecken rückgängig machen, werden Sie für jede Datei, die REAL-Änderungen enthält, aufgefordert, das Auschecken für diese Datei zu bestätigen. Klicken Sie einfach auf "Nein zu allen".
  4. Visual Studio erkennt, ob die ausgecheckte Datei Änderungen aufweist oder keine. Beachten Sie, dass mit dieser Methode auch hinzugefügte Dateien entfernt werden, die noch nicht aus TFS eingecheckt wurden ...

....... Es gibt ein Problem mit diesem Ansatz, wenn Sie auf "Nein zu allen" klicken und einige Dateien beibehalten, die nicht geändert wurden. Es scheint so etwas wie nicht rückgängig gemachte Dateien rückgängig zu machen, bis es die erste tatsächlich geänderte Datei trifft und dann den Rest der nicht geänderten Dateien ignoriert, wenn dies Sinn macht. Ich habe diesen Effekt nur ab und zu gesehen.

Eine mögliche Problemumgehung besteht darin, den oben beschriebenen Vorgang auszuführen. Statt jedoch "Nein für alle" zu drücken, drücken Sie für jede Datei "Nein". Da dies abhängig von der Anzahl der Dateien, mit denen Sie arbeiten, eine Weile dauern kann, halte ich normalerweise "ALT + N" gedrückt und es werden nur alle Dateien beschleunigt, während ALLE unveränderten Dateien rückgängig gemacht werden.

Asche
quelle
Bitte beachten Sie, dass dies nicht genug betont werden kann. Neu hinzugefügte Dateien zum Projekt werden ebenfalls mit diesem Ansatz entfernt. Dies wird auch auf mehreren anderen Antworten erwähnt.
Christian
-20

Soweit ich verstanden habe, wird in TFS beim Auschecken eines Teamprojekts das gesamte Projekt ausgecheckt und Sie haben keine Kontrolle darüber, welche Dateien heruntergefahren werden. Wenn Sie das Einchecken in bestimmte Dateien verhindern möchten, können Sie diese sperren.

Bei der Arbeit hassen wir alle TFS.

achinda99
quelle
1
Wir können einzelne Dateien auschecken, und das Sperren würde es dem Entwickler nicht ermöglichen, sie einzuchecken.
Robert Wagner
5
Wollte abstimmen, aber "Bei der Arbeit hassen wir alle TFS." hat es gespeichert.
James