Ignoriere bestimmte Verzeichnisse oder Dateien ohne Verwendung von svn: ignore

8

Aus irgendeinem Grund hat niemand jemals anständige svn:ignore -Eigenschaften in unserem Repository eingerichtet, und als ich danach gefragt habe, war die Antwort: "Niemand hat sich vorher darüber beschwert, können Sie nicht 'unversionierte Elemente' nicht deaktivieren?" (Wir verwenden TortoiseSVN praktisch global).

Ich bin neu für das Team, deshalb möchte ich einige lokale Ignorierlisten einrichten, anstatt Änderungen am Repository vorzunehmen.

Ich kenne die globale Ignorierliste, aber die globale Ignorierliste akzeptiert keine spezifischen Pfade , nur einfache Dateimuster auf einer Ebene. Ich lese eine Frage zu einer lokalen Ignorierliste , aber diese Frage fragt eigentlich nicht nach "Ignorieren" von nicht versionierten Dateien, sondern ist tatsächlich Fragen zum Blockieren von Commits für bestimmte versionierte Dateien. Ich lese eine weitere Frage zum lokalen Ignorieren eines Verzeichnisses , wie ich es möchte, aber die akzeptierte Antwort zu dieser Frage verwendet die globale Ignorierung Liste, die für mich nicht funktioniert, weil ich keine spezifischen Pfade innerhalb meiner Arbeitskopie angeben kann.

Ich kann einige svn:ignore -Eigenschaften lokal setzen, aber Verzeichnisse können nicht zu Änderungslisten hinzugefügt werden (wie in der obigen Frage empfohlen, um Commits von versionierten Dateien zu vermeiden), so dass ich riskiere, diese Änderungen versehentlich zu bestätigen.

Gibt es eine Möglichkeit, bestimmte unversionierte Verzeichnisse oder Dateien in meiner Arbeitskopiebaumstruktur lokal zu ignorieren, ohne svn:ignore ?

zu verwenden

Update: Die aktuelle Top-Antwort bringt mich sehr nahe an das, was ich möchte. Es erlaubt mir, beliebige Dateien in den Dialogen "Auf Änderungen prüfen" oder "Bestätigen" herauszufiltern. Wenn ich jedoch Verzeichnis Änderungen vornehmen möchte (dh Änderungen an den versionierten Eigenschaften eines Verzeichnisses), dann fügt TortoiseSVN automatisch alle Dateien unter dem Verzeichnis hinzu (dh ich kann nicht beide Verzeichnisse in die Liste aufnehmen, und filtern Dateien unter dem Verzeichnis heraus.

    
Ben 01.05.2015, 19:05
quelle

1 Antwort

5

Ich konnte keinen nahtlosen Weg finden, um das zu erreichen, wonach Sie suchen, aber ich habe eine Option gefunden, die zu Ihren Bedürfnissen passen könnte, wenn man bedenkt, dass dies etwas ist, was Sie nur für Ihr Lokal wollen Maschine.

Es ist möglich, das TortoiseSVN Commit-Dialogfeld manuell aufzurufen und die Pfade anzugeben, in denen nach Dateien gesucht werden kann, die wie folgt committen:

%Vor%

Also, da Sie wissen, welche Verzeichnisse & amp; Dateien, die Sie ignorieren möchten, könnten Sie eine Pfaddatei bereitstellen, die nur diese Verzeichnisse & amp; Dateien, die Sie übernehmen möchten.

Beachten Sie, dass die Pfaddatei in UTF-16 (Little-Endian) codiert sein muss, ohne die BOM. Pfade werden durch neue Zeilenzeichen getrennt. Sie können eine solche gültige Pfaddatei (in C #) wie folgt erstellen:

%Vor%

Beim Experimentieren mit den Pfaden werden sowohl Verzeichnis- als auch Dateipfade unterstützt, aber keine Platzhalter. Daher müsste zum Zeitpunkt der Erstellung der Pfaddatei eine Filterung durchgeführt werden.

Es gibt ein paar zusätzliche Befehlszeilenoptionen für TortoiseProc /command:commit , die Sie finden können hier .

Dieselbe Methode wird für "Auf Änderungen prüfen" verwendet, wobei /command:repostatus anstelle von /command:commit ersetzt wird. Zusammenfassend:

  1. Erstellen Sie ein Skript, das alle interessanten Dateinamen erfasst
  2. Filtern Sie alle Dateinamen, die nicht interessant sind (möglicherweise aus einer "Ignorierdatei" irgendwo auf Ihrem Computer).
  3. Schreiben Sie die Liste der Dateien im UTF-16 LE-Format (ohne BOM).
  4. Rufen Sie TortoiseProc mit einem /pathfile -Argument auf, das die Dateiliste und /command von entweder repostatus oder commit angibt.
  5. Löschen Sie optional die Dateiliste.

Optional - Integration mit "Commit" mithilfe eines Hook-Skripts

Nebenbei habe ich einen Weg der "Integration" gefunden, indem ich die TortoiseSVN Hook Script-Optionen in den Einstellungen verwendet habe. Es verwendet weiterhin die oben beschriebene TortoiseProc-Prozedur, bietet aber zusätzlich die Möglichkeit, weiterhin das TortoiseSVN Commit-Kontextmenü zu verwenden (mit einer Eigenart).

Die spezielle Sprache, die Sie für das Hook-Skript verwenden, ist nicht wichtig, nur dass es Befehlszeilenargumente verarbeiten und einen Beendigungscode zurückgeben kann. Aus der Dokumentation ( hier ):

  

Dies kann eine Batchdatei, eine ausführbare Datei oder eine andere Datei sein   welches eine gültige Windows-Dateiassoziation, z.B. ein Perl-Skript.

In diesem Beispiel habe ich C # verwendet:

%Vor%

Der Kürze halber kann ParentProcessUtilities.GetParentProcess , das ich von einem anderen SO-Post verwendet habe, hier gefunden werden.

Erläuterung:

Das PATH-Eingabeargument zeigt auf eine temporäre Datei, die alle im Explorer ausgewählten Verzeichnisse und Dateien enthält. Daraus können Sie Ihre Liste der gewünschten Pfade erstellen. Wenn die Liste erstellt und in eine Datei geschrieben wurde, starten wir TortoiseProc neu und übergeben die neue Datei als Argument sowie ein proprietäres Argument, das für das Tracking verwendet werden kann.

Am Ende geben wir einen anderen Exit-Code als 0 zurück, der verhindert, dass das ursprüngliche TortoiseSVN Commit-Fenster mit einem Vorbehalt angezeigt wird. Ein "Fehler" -Dialog wird angezeigt, der die in stderr geschriebene Nachricht anzeigt; die Eigenart, von der ich sprach. Einer der wichtigsten Teile dieses Codes ist das Überprüfen des übergeordneten Prozesses auf das proprietäre Argument, bevor diese Arbeit tatsächlich ausgeführt wird. Diese Überprüfung verhindert, dass der Hook unendlich oft ausgeführt wird. Wenn TortoiseProc durch den obigen Code erneut gestartet wird, wird das Hook-Skript erneut ausgelöst und ruft anschließend diesen Code erneut auf.

Ich habe auch untersucht, ob der Inhalt der ursprünglich übergebenen PATH-Datei einfach geändert werden kann, aber nicht. Es ist leider nur eine Datei, die TortoiseSVN explizit für den Zweck des Hook-Skripts ausgibt und dann löscht. Vielleicht könnte das ein zukünftiges Feature sein.

    
cokeman19 07.05.2015 04:04
quelle

Tags und Links