Wie ignoriere ich Dateien / Verzeichnisse in TFS, um zu vermeiden, dass sie in das zentrale Quellrepository gelangen?

254

Ist es möglich, Dateien / Ordner so einzurichten, dass sie projektweise in der TFS-Quellcodeverwaltung ignoriert werden?

Ich habe beispielsweise eine Website mit einem Assets-Ordner, in den ich nicht zur Quellcodeverwaltung wechseln möchte. Diese Vermögenswerte werden von einem separaten System verwaltet. Außerdem möchte ich nicht mehrere Gigabyte an Assets in die Quellcodeverwaltung einbinden, aber ich benötige ein paar Beispiele auf meinem Entwicklungscomputer, aber ich möchte diese auch nicht einchecken.

Wenn ich an dieser Website arbeite, während ich an die Quellcodeverwaltung gebunden bin, und den Baum aktualisiere, werden diese Dateien automatisch wieder hinzugefügt

Ich möchte dies verhindern.

Dave
quelle
1
Für lokale Arbeitsbereiche können Sie die .tfignore- Dateien verwenden, wie Richard Banks hervorhebt. Informationen zum Anpassen dieser Datei mit Context-Menue in Team-Explorerer finden Sie in meiner Antwort. Für Server-Workspaces habe ich in den Kommentaren einen Link angegeben.
gReX

Antworten:

88

Für VS2015 und VS2017

Funktioniert mit TFS (vor Ort) oder VSO (Visual Studio Online - das von Azure gehostete Angebot)

Die NuGet-Dokumentation enthält Anweisungen dazu. Ich habe sie gerade erfolgreich für Visual Studio 2015 und Visual Studio 2017 gegen VSTS (von Azure gehostetes TFS) befolgt. Alles ist ab November 2016 Aug 2018 vollständig aktualisiert .

Ich empfehle Ihnen, die Anweisungen von NuGet zu befolgen, aber nur um noch einmal zusammenzufassen, was ich getan habe:

  1. Stellen Sie sicher, dass Ihr packagesOrdner nicht an TFS gebunden ist. Wenn ja, holen Sie es da raus.
  2. Alles andere, was wir unten erstellen, befindet sich in demselben Ordner, in dem sich Ihre .slnDatei befindet, sofern nicht anders angegeben (die Anweisungen von NuGet sind hierzu nicht vollständig klar).
  3. Erstellen Sie einen .nugetOrdner. Sie können Windows Explorer verwenden, .nuget.um es zu benennen, damit es erfolgreich gespeichert werden kann .nuget(es entfernt automatisch den letzten Punkt), aber der direkte Versuch, es zu benennen, .nugetfunktioniert möglicherweise nicht (je nach Windows-Version wird möglicherweise ein Fehler angezeigt oder der Name wird geändert ). Oder benennen Sie das Verzeichnis nuget und öffnen Sie das übergeordnete Verzeichnis in der Eingabeaufforderung. Art. ren nuget .nuget
  4. Erstellen Sie in diesem Ordner eine NuGet.configDatei, fügen Sie den folgenden Inhalt hinzu und speichern Sie ihn:

NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>
  1. Gehen Sie zurück in Ihren .slnOrdner, erstellen Sie eine neue Textdatei und benennen Sie sie .tfignore(wenn Sie Windows Explorer verwenden, verwenden Sie den gleichen Trick wie oben und benennen Sie ihn .tfignore.).
  2. Fügen Sie den folgenden Inhalt in diese Datei ein:

.tfignore:

# Ignore the NuGet packages folder in the root of the repository.
# If needed, prefix 'packages' with additional folder names if it's 
# not in the same folder as .tfignore.
packages

# include package target files which may be required for msbuild,
# again prefixing the folder name as needed.
!packages/*.targets
  1. Speichern Sie all dies, übergeben Sie es an TFS, schließen Sie Visual Studio und öffnen Sie es erneut. Der Team Explorer sollte den Paketordner nicht mehr als ausstehendes Einchecken identifizieren.
  2. Kopieren / Einfügen der .tfignoreDatei und des .nugetOrdners über Windows Explorer in alle meine verschiedenen Lösungen und Festschreiben dieser Dateien. Der packagesOrdner versucht nicht mehr , sich in mein Versionsverwaltungs-Repo zu schleichen.

Weitere Anpassung

Obwohl nicht meine, habe ich diese .tfignoreVorlage von sirkirby als praktisch empfunden . Das Beispiel in meiner Antwort bezieht sich auf den Nuget- packagesOrdner, aber diese Vorlage enthält einige andere Dinge sowie zusätzliche Beispiele, die nützlich sein können, wenn Sie dies weiter anpassen möchten.

Jaxidian
quelle
1
Gefolgt von VS 2017 - TFS 2015. Hat wie ein Zauber funktioniert. Alle meine Nuget-Pakete wurden nicht mehr als ausstehende Änderungen angezeigt.
James Walsh Jr.
Ich musste nur die erkannten Änderungen öffnen und die neu erstellten Dateien von Hand zu den ausstehenden Änderungen hinzufügen. Nur dass alles gut funktioniert hat.
Machado
Das hat bei mir nicht funktioniert. VS 2017 - TFS 2015. Ich kann nichts einchecken. Wenn ich es versuche, wird folgende Fehlermeldung angezeigt: "D: \ Src \ MiniCoreWebAPI \ packages \ Microsoft.IdentityModel.Protocols.5.2.1 \ lib \ net451 \ Microsoft.IdentityModel.Protocols .dll: Konnte keinen Teil des Pfades finden "
Rod
Ich habe meinen Paketordner nicht eingecheckt, aber er wurde bereits als ausstehende Änderung erkannt. Nachdem ich diese Anweisungen angewendet hatte, musste ich "Ausstehende Änderungen rückgängig machen" im Paketordner, dann war alles in Ordnung, als ich die Pakete neu erstellte und NuGet wiederherstellte.
CodeHxr
172

Wenn Sie lokale Arbeitsbereiche verwenden (TFS 2012+), können Sie die .tfignoreDatei jetzt verwenden , um lokale Ordner und Dateien vom Einchecken auszuschließen.

Wenn Sie diese Datei zur Quellcodeverwaltung hinzufügen, können Sie sicherstellen, dass andere Mitglieder Ihres Teams dieselben Ausschlusseinstellungen verwenden.

Ausführliche Informationen zu MSDN - http://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore

Für die Faulen:

Sie können konfigurieren, welche Dateitypen ignoriert werden, indem Sie eine Textdatei mit dem Namen .tfignorein den Ordner legen, in dem die Regeln angewendet werden sollen . Die Auswirkungen der .tfignoreDatei sind rekursiv. Sie können jedoch .tfignore-Dateien in Unterordnern erstellen, um die Auswirkungen einer .tfignore Datei in einem übergeordneten Ordner zu überschreiben .

Die folgenden Regeln gelten für eine .tfignore-Datei:

  • # beginnt eine Kommentarzeile
  • Die * und? Platzhalter werden unterstützt.
  • Eine Dateispezifikation ist rekursiv, sofern nicht das Zeichen \ vorangestellt ist.
  • ! negiert eine Dateispezifikation (Dateien, die dem Muster entsprechen, werden nicht ignoriert)

Beispieldatei:

# Ignore .cpp files in the ProjA sub-folder and all its subfolders
ProjA\*.cpp
# 
# Ignore .txt files in this folder 
\*.txt
#
# Ignore .xml files in this folder and all its sub-folders
*.xml
#
# Ignore all files in the Temp sub-folder
\Temp
#
# Do not ignore .dll files in this folder nor in any of its sub-folders
!*.dll
Richard Banks
quelle
35
Ich habe versucht, das zu tun. Das einzige, was ignoriert wird, ist der Inhalt der .tfignore-Datei :(
user1852503
15
@ SerjSagan mein Computer hat mir nicht erlaubt zu erstellen, .tfignorealso habe ich erstellt .tfignore.und er hat den letzten Punkt selbst entfernt.
Peter
5
Das Problem ist, dass nur Ressourcen ignoriert werden, die 1) vor dem Einchecken explizit im Fenster " Quellcodeverwaltungs-Explorer" gelöscht und 2) im Fenster " Ausstehende Änderungen" explizit ausgeschlossen wurden . Zum Beispiel, wenn Sie es verwenden werden , ignorieren Pakete Ordner und stützen sich auf NuGet Paket wiederherstellen, müssen Sie 1) löschen Pakete Ordner in Source Control Explorer und dann 2) ausschließen es in Ausstehende Änderungen Fenster nach dem NuGet Paketwiederherstellungsprozess . Andernfalls wird der Paketordner weiterhin eingecheckt.
Deilan
1
Wenn Windows die .tfignoreDatei aufgrund des Fehlens eines Eigennamens nicht erstellen lässt, können Sie sie erstellen oder über ein Befehlszeilenfenster umbenennen.
Zarepheth
1
Es gibt ein großes Problem mit .tfignore in VS2015. Die Leute sind sehr unglücklich , aber es scheint keine klare Aussage über das Problem oder eine klare Verpflichtung zu geben, es zu beheben.
Bbsimonbb
71

Es ist offenbar ein wenig umständlich zu ignorieren Dateien (und Ordner) in Team Foundation Server. Ich habe einige Möglichkeiten gefunden, dies zu tun (mit TFS / Team Explorer / Visual Studio 2008). Diese Methoden funktionieren auch mit dem ASP-Projekttyp der Website.

Eine Möglichkeit besteht darin, einem Projekt ein neues oder vorhandenes Element hinzuzufügen (z. B. mit der rechten Maustaste auf das Projekt klicken, Vorhandenes Element hinzufügen oder aus dem Windows-Explorer in den Lösungs-Explorer ziehen und dort ablegen), TFS die Datei (en) oder den Ordner verarbeiten zu lassen und dann ausstehend rückgängig zu machen Änderungen an den Artikeln. TFS hebt die Markierung für eine ausstehende Änderung zum Hinzufügen auf, und die Dateien befinden sich ruhig im Projekt und halten sich von TFS fern.

Eine andere Möglichkeit ist der Befehl Elemente zum Ordner hinzufügen im Versionsverwaltungs-Explorer. Dadurch wird ein kleiner Assistent gestartet, und in einem der Schritte können Sie auszuschließende Elemente auswählen (obwohl Sie meiner Meinung nach mit dieser Methode mindestens ein Element zu TFS hinzufügen müssen, damit der Assistent fortfahren kann).

Sie können sogar eine Richtlinie zum Einchecken verbotener Muster hinzufügen (unter Team -> Teamprojekteinstellungen -> Quellcodeverwaltung ... -> Eincheckrichtlinie), um zu verhindern, dass andere Teammitglieder versehentlich bestimmte Assets einchecken.

Derek Morrison
quelle
7
Ich hatte keine verbotene Musterrichtlinie. Die Antwort auf eine verwandte Frage zeigt, wo Sie sie bekommen können. Es ist anscheinend Teil der TFS Power Tools .
Leif Carlsen
1
Ich stehe vor einem ähnlichen Problem. Können Sie weitere Details zu einem bestimmten Ordner angeben, damit dieser nicht mithilfe der Check-in-Richtlinie eincheckt?
Imran Rizvi
Hoppla - du hast recht, Leif. Es ist Teil der TFS Power Tools.
Derek Morrison
Imran, leider habe ich den Job gewechselt und benutze TFS nicht mehr und habe keinen Zugriff auf meine früheren Projekte. Daher bin ich mir nicht sicher, welche Syntax für die Syntax der Check-in-Richtlinien für verbotene Muster verwendet wird. Vielleicht hilft diese Frage? stackoverflow.com/questions/2741412/…
Derek Morrison
TFS 2010 Nachdem Sie die einzuschließenden Dateien ausgewählt haben, können Sie sie aus dieser Liste ausschließen. Vorhandene Dateien können nicht berührt werden ...
JNF
47

Für TFS 2013 :

Starten Sie im VisualStudio- Team-Explorer im PendingChanges- Dialogfeld die Änderungen mit dem Status [Hinzufügen], der ignoriert werden sollte.

Visual Studio erkennt die Add (s) erneut. Klicken Sie auf „erkannt: x (e)“ -in Ausgeschlossen Änderungen

Im geöffneten Dialog "Cadidate-Änderungen fördern" können Sie Dateien und Ordner einfach über das Kontextmenü ausschließen. Optionen sind:

  • Ignoriere diesen Punkt
  • Durch Erweiterung ignorieren
  • Nach Dateiname ignorieren
  • Nach Ordner ignorieren (ja Ordner, TFS 2013 Update 4 / Visual Studio 2013 Premium Update 4)

Vergessen Sie nicht, die geänderte .tfignore-Datei einzuchecken.

Für VS 2015/2017 :

Das gleiche Verfahren: Klicken Sie auf der Registerkarte "Ausgeschlossene Änderungen" in TeamExplorer \ Pending Changes auf Detected: xxx add (s)

Die Registerkarte Ausgeschlossene Änderungen in TeamExplorer \ Ausstehende Änderungen

Das Dialogfeld "Kandidatenänderungen fördern" wird geöffnet. Auf die Einträge können Sie mit der rechten Maustaste klicken, um das Kontextmenü aufzurufen. Tippfehler ist jetzt behoben :-)

gReX
quelle
Kann diese Option nicht finden. Ich bin auf VS 2015 RC.
Shimmy Weitzhandler
Dies funktioniert nur, wenn Sie mit einem lokalen Arbeitsbereich arbeiten, wie im Detail beschrieben, hier: msdn.microsoft.com/library/vstudio/…
stvn
@Shimmy: Die Vorgehensweise in VS 2015 RC ist dieselbe, mit immer noch demselben Tippfehler. Siehe meine aktualisierte Antwort. Wie stvn hervorhebt, funktioniert .tfignore jedoch nur mit lokalen Arbeitsbereichen. Für Server-Arbeitsbereiche müssen Sie das Einschließen in die ausstehenden Checkins rückgängig machen. Siehe Antwort hier: stackoverflow.com/questions/21887308/…
gReX
@Shimmy: Sind Sie mit TFS-Server 2015 verbunden? Stellen Sie sicher, dass Sie mit Team Explorer in VS
gReX
@ qw1564 Ich bin mir ziemlich sicher, als die Frage zuerst gestellt wurde, war es nicht möglich. Aber jetzt ist dies die Antwort, die ich wählen würde. Danke für die Credits!
gReX
5

Ich habe den perfekten Weg gefunden, um Dateien in TFS zu ignorieren, wie es SVN tut.
Wählen Sie zunächst die Datei aus, die Sie ignorieren möchten (z. B. die Datei Web.config).
Gehen Sie nun zur Menüregisterkarte und wählen Sie:

Datei-Quellcodeverwaltung> Erweitert> Web.config von der Quellcodeverwaltung ausschließen

... und boom; Ihre Datei ist dauerhaft von der Quellcodeverwaltung ausgeschlossen.

Bharat
quelle
1
Dies funktioniert für mich unter TFS 2010 für Code-generierte Dateien. VIELEN DANK!
BozoJoe
1
Das funktioniert tatsächlich, der .tfignore funktioniert bei mir nicht. Vielen Dank
EpicKip
2
Ich habe diese Option nicht in VS 2018
Adam
4

Ich gehe davon aus, dass Sie Website-Projekte verwenden. Diese crawlen automatisch ihr Projektverzeichnis und werfen alles in die Quellcodeverwaltung. Es gibt keine Möglichkeit, sie aufzuhalten.

Verzweifeln Sie jedoch nicht. Webanwendungsprojekte weisen dieses seltsame und eher unerwartete (imho: schwachsinnige) Verhalten nicht auf. WAP ist ein Addon für VS2005 und wird direkt mit VS2008 geliefert.

Alternativ zum Ändern Ihrer Projekte in WAP können Sie den Ordner "Assets" aus der Quellcodeverwaltung in eine TFS-Dokumentbibliothek verschieben. Tun Sie dies nur, wenn das Projekt selbst die Assets-Dateien nicht direkt verwendet.

Nicht ich
quelle
Ja, Ihre Annahme ist richtig. Ich dachte, das wäre der Fall, wollte nur doppelt sicher sein, dass ich nichts verpasst habe.
Dave