SVN: Gibt es eine Möglichkeit, eine Datei als "Nicht festschreiben" zu markieren?

153

Mit TortoiseSVN kann ich eine Datei in die Änderungsliste "Ignorieren beim Festschreiben" verschieben, sodass Änderungen an dieser Datei nicht festgeschrieben werden, wenn ich einen ganzen Baum festschreibe.

Gibt es eine Möglichkeit, so etwas mit dem Befehlszeilentool svn zu tun?

EDIT: Danke für die Vorschläge svn:ignore, aber das macht nicht ganz das, wonach ich gesucht habe.

svn:ignorewirkt sich auf Dinge wie svn add& aus svn import. Es gibt ihm eine Liste von Dateinamenmustern, die ignoriert werden müssen.

Ich habe eine Datei, die bereits unter Quellcodeverwaltung steht, möchte jedoch vorübergehende Änderungen an dieser Datei vornehmen, die später nicht festgeschrieben werden sollen, wenn ich den gesamten Quellbaum festschreibe. Ich nehme viele andere Änderungen vor und könnte eine Notiz auf meinen Monitor kleben, in der ich aufgefordert werde, diese Datei zurückzusetzen, bevor ich den Baum festschreibe, aber es wäre schön, wenn svn diese Datei automatisch überspringen könnte.

Ferruccio
quelle
1
Es gibt eine Möglichkeit, den Status einer persönlichen Zweigstelle und eines Switches zu verwenden. [Siehe meinen anderen Beitrag zu diesem Thema.] [1] [1]: stackoverflow.com/questions/862950/…
ptitpion

Antworten:

120

Subversion verfügt ab Februar 2016 / Version 1.9 nicht über die integrierte Funktion "Nicht festschreiben" / "Beim Festschreiben ignorieren". Diese Antwort ist eine nicht ideale Problemumgehung für die Befehlszeile

Wie im OP angegeben, verfügt TortoiseSVN über eine integrierte Änderungsliste "Ignorieren beim Festschreiben", die automatisch von Festschreibungen ausgeschlossen wird. Der Befehlszeilenclient verfügt nicht über diese Option. Sie müssen daher mehrere Änderungslisten verwenden, um dasselbe Verhalten (mit Einschränkungen) zu erzielen :

  • eine für die Arbeit, die Sie begehen möchten [Arbeit]
  • eine für Dinge, die Sie ignorieren möchten [ignore-on-commit]

Da es bei TortoiseSVN einen Präzedenzfall gibt, verwende ich in meinen Beispielen "Ignorieren beim Festschreiben" für die Dateien, die ich nicht festschreiben möchte. Ich werde "Arbeit" für die Dateien verwenden, die ich mache, aber Sie können jeden gewünschten Namen auswählen.

Fügen Sie zunächst alle Dateien zu einer Änderungsliste mit dem Namen "work" hinzu. Dies muss vom Stammverzeichnis Ihrer Arbeitskopie ausgeführt werden:

svn cl work . -R

Dadurch werden alle Dateien in der Arbeitskopie rekursiv zur Änderungsliste mit dem Namen "Arbeit" hinzugefügt. Dies hat einen Nachteil: Wenn der Arbeitskopie neue Dateien hinzugefügt werden, müssen Sie die neuen Dateien speziell hinzufügen, da sie sonst nicht enthalten sind. Zweitens, wenn Sie dies erneut ausführen müssen, müssen Sie alle Ihre "Ignor-on-Commit" -Dateien erneut hinzufügen. Nicht ideal - Sie könnten anfangen, Ihre eigene "Ignorier" -Liste in einer Datei zu verwalten, wie es andere getan haben.

Dann für die Dateien, die Sie ausschließen möchten:

svn cl ignore-on-commit path\to\file-to-ignore

Da sich Dateien nur in einer Änderungsliste befinden können, wird durch Ausführen dieses Zusatzes nach dem vorherigen Hinzufügen von "Arbeit" die Datei, die Sie ignorieren möchten, aus der Änderungsliste "Arbeit" entfernt und in die Änderungsliste "Ignorieren bei Festschreiben" eingefügt.

Wenn Sie bereit sind, Ihre geänderten Dateien festzuschreiben, die Sie festschreiben möchten, fügen Sie Ihrem Festschreiben einfach "--cl work" hinzu:

svn commit --cl work -m "message"

So sieht ein einfaches Beispiel auf meinem Computer aus:

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

Eine Alternative wäre, einfach jede Datei, die Sie festschreiben möchten, zu einer 'Arbeits'-Änderungsliste hinzuzufügen und nicht einmal eine Ignorierliste zu führen, aber dies ist auch eine Menge Arbeit. Die einzig einfache und ideale Lösung besteht darin, ob / wann dies in SVN selbst implementiert wird. Es gibt ein langjähriges Problem im Subversion Issue Tracker SVN-2858 , falls sich dies in Zukunft ändert.

Joshua McKinnon
quelle
1
Ich habe mit dem von Ihnen erwähnten Befehl zwei Dateien hinzugefügt: $svn st --- Changelist 'ignore-on-commit': M database.php M config.php und dennoch wurden sie beim Festschreiben an das Repo gesendet. Irgendeine Idee, was ich falsch gemacht habe?
Attila Fulop
7
Das Hinzufügen von Dateien zur Änderungsliste "Ignorieren bei Festschreiben" verhindert nicht, dass Dateien festgeschrieben werden. TortoiseSVN (ein Windows-GUI-Client) hat "Ignorieren beim Festschreiben" berücksichtigt, die Befehlszeile svn jedoch nicht. Der einzige Vorschlag, den ich in meiner ursprünglichen Antwort hatte, war, die Dateien, die Sie festschreiben möchten, zu einer Änderungsliste hinzuzufügen und ihr zu sagen, dass sie das festschreiben soll
Joshua McKinnon
7
Ignorieren bei Festschreiben ist definitiv eine reservierte Schildkrötenliste. Alles, was es tut, ist zu verhindern, dass die Elemente standardmäßig in der GUI überprüft werden. Es handelt sich also um eine Tortoise GUI-spezifische Funktion. Sie müssen die Befehlszeile auch nicht zum Hinzufügen zur Liste verwenden, wenn Sie die GUI verwenden. Nur das Kontextmenü für Festschreibungslistenelemente und unten können Sie sie in eine Änderungsliste verschieben, und das Ignorieren beim Festschreiben ist bereits definiert. tortoisesvn.net/docs/release/TortoiseSVN_en/…
tjmoore
Das hat Jack nicht getan. es hat alles begangen.
Ahnbizcad
Funktioniert nicht, die Frage wurde speziell nach einer Befehlszeilenlösung gestellt, nicht nach einer grafischen Benutzeroberfläche.
Riv
26

Ich habe festgestellt , mich konsequent in dieser Situation zu: und Änderungslisten für mich nicht funktionieren - ich eine kurze Liste von Dateien machen will , dass ich nicht wollen , zu begehen, anstatt eine massive Liste der Dateien zu behaupten , dass ich tun will begehen!

Ich arbeite an der Linux-Befehlszeile: Meine Lösung besteht also darin, ein Skript / usr / bin / svnn (ja, mit zwei 'n'!) Wie folgt zu erstellen:

#! /bin/bash
DIR=/home/mike/dev/trunk

IGNORE_FILES="\
        foo/pom.xml \
        foo/src/gwt/App.gwt.xml \
        foo/src/main/java/gwt/Common.gwt.xml \
        foo/src/main/resources/context/datasource/local.xml \
        foo/src/main/resources/context/environment/local.xml"

for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done;

svn "$@"

for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;

Dies ist natürlich auf meine Situation zugeschnitten - aber ändern Sie einfach DIR und IGNORE_FILES, um sie an Ihr Entwickler-Setup anzupassen. Denken Sie daran, das Skript in eine ausführbare Datei zu ändern mit:

sudo chmod +x /usr/bin/svnn

..dann verwenden Sie einfach "svnn" anstelle von "svn", um die Subversion auszuführen, ohne befürchten zu müssen, lokale Änderungen an den Dateien in der Liste IGNORE_FILES einzuchecken. Ich hoffe das hilft!

user88044
quelle
Schließlich ist diese Antwort tatsächlich richtig. Sie müssen ein Werkzeug schreiben. Dies ist eigentlich unvollkommen, weil ich eine dynamische Option haben möchte, wie svnn ignore configs/*- mit Platzhaltern und Schnickschnack. Ich glaube, ich schreibe so etwas selbst und komme dann hierher zurück!
Tomasz Gandor
das ist toll! Noch besser ist es, in .bashrc einen Alias ​​für svn -> svnn zu erstellen. Anstatt die Dateien anzugeben, die im Befehl ignoriert werden sollen, könnte es sich wie git verhalten. Es würde eine .ignore-Datei im Ordner überprüfen und jede Datei ignorieren, die dem Muster entspricht.
Tarek
Anstatt das Tippen neu lernen zu svnnmüssen, sollten Sie es aufrufen svnund dieses Skript in etwas einfügen, das am Anfang Ihres Pfads stehen kann, z ${HOME}/bin. Aus dem Skript selbst würden Sie dann aufrufen /usr/bin/svn.
Joost
17

Ich glaube nicht, dass es eine Möglichkeit gibt, eine Datei im Repository zu ignorieren. Wir stoßen häufig mit web.config und anderen Konfigurationsdateien darauf.

Obwohl nicht perfekt, besteht die Lösung, die ich am häufigsten sehe und verwende, darin, eine Standarddatei und eine wichtige Aufgabe zum Erstellen lokaler Kopien zu haben.

Im Repo befindet sich beispielsweise eine Datei web.config.defaultmit Standardwerten. Erstellen Sie dann eine Nant-Task, die alle web.config.defaultDateien umbenennt web.config, die dann an lokale Werte angepasst werden können. Diese Aufgabe sollte aufgerufen werden, wenn eine neue Arbeitskopie abgerufen oder ein Build ausgeführt wird.

Sie müssen auch die erstellte web.configDatei ignorieren , damit sie nicht in das Repository übernommen wird.

Steven Lyons
quelle
8

Schauen Sie sich Änderungslisten , die Sie mit einer Option zur Verfügung stellen kann , um herauszufiltern Dateien , die Sie geändert haben , wollen aber nicht begehen. SVN überspringt eine Datei nicht automatisch, es sei denn, Sie weisen sie an - und die Art und Weise, wie Sie ihr mitteilen, dass sich diese Datei irgendwie von anderen Dateien unterscheidet, besteht darin, sie in eine Änderungsliste aufzunehmen.

Es erfordert mehr Arbeit für Sie, und Sie können die Änderungsliste nur auf Ihre Arbeitskopie anwenden (stellen Sie sich natürlich das Chaos vor, das entstehen könnte, wenn Sie eine Revisionseigenschaft "Nie aktualisieren" anwenden könnten!).

gbjbaanb
quelle
1
Aber genau das wollen wir. Beispiel: Eine Quelldatei, für die Sie anstelle des Systemstandards eine defaultUserId = yourId festlegen müssen.
Orbfish
4

Ich bin zu diesem Thread gekommen, um nach einer Möglichkeit zu suchen, nur einige Dateien "atomar" festzuschreiben. Anstatt einige Dateien beim Festschreiben zu ignorieren, bin ich in die andere Richtung gegangen und habe nur die gewünschten Dateien festgeschrieben:

svn ci filename1 filename2

Vielleicht hilft es jemandem.

Radek
quelle
Ihre Antwort ist nur ein angemessener Vorschlag in diesem Thread. svn ciist einfach alias zu svn commit. Commit-Befehl ermöglicht das
Festschreiben
3

Leute, ich habe gerade eine Lösung gefunden. Da TortoiseSVN so funktioniert, wie wir es wollen, habe ich versucht, es unter Linux zu installieren - was bedeutet, dass es auf Wine läuft. Überraschenderweise funktioniert es! Alles was du tun musst, ist:

  1. Fügen Sie Dateien hinzu, die Sie überspringen möchten, indem Sie Folgendes ausführen: "svn changelist 'ignore-on-commit'".
  2. Verwenden Sie TortoiseSVN, um Folgendes festzuschreiben: "~ / .wine / drive_c / Program \ Files / TortoiseSVN / bin / TortoiseProc.exe / command: commit / path: '
  3. Die Dateien ausgeschlossen werden nicht markiert für standardmäßig verpflichten, während andere modifizierte Dateien werden überprüft werden. Dies ist genau das gleiche wie unter Windows. Genießen!

(Der Grund, warum Dateien über die CLI ausgeschlossen werden müssen, liegt darin, dass der Menüeintrag dafür nicht gefunden wurde und nicht sicher ist, warum. Auf jeden Fall funktioniert dies hervorragend!)

James Fu
quelle
2

Konfliktdateien dürfen nicht festgeschrieben werden. Sie können dies nutzen, um Ihre privaten Änderungen aus dem Repository herauszuhalten. Dies funktioniert am besten mit einer kleinen Anzahl von Dateien.

Um einen Konflikt zu erhalten a-file, verfügt Ihre Arbeitskopie (WC) nicht über das aktuelle a-fileRepository und die a-fileÄnderungen in Ihrem WC befinden sich am selben Speicherort wie Änderungen im Repository (Änderungen, die Sie nicht aktualisiert haben) bis jetzt). Wenn Sie nicht auf die oben genannten Bedingungen warten möchten, können Sie einen Konflikt a-filewie
folgt erstellen : Fügen Sie in Arbeitskopie 1 (WC1) oben eine Textzeile ein a-file, z. B. "Hier einen Konflikt erstellen " . Verwenden Sie die erforderliche Syntax, damit Sie das Repository nicht beschädigen. Commit a-filevon WC1. Fügen Sie in WC2 oben eine andere Textzeile hinzu a-file, z. B. "Ich möchte einen Konflikt" . Update von WC2, und jetzt sollte eine Datei in Konflikt stehen.

Phi
quelle
1

Ich würde stattdessen ein Helfer-Bash-Skript schreiben, das svn commitauf allen Dateien ausgeführt wird, die Sie benötigen, und auf keiner der Dateien, die Sie nicht benötigen. Auf diese Weise haben Sie viel mehr Kontrolle.

Mit einer Zeile können Sie beispielsweise alle Dateien mit der Erweiterung .hfestschreiben, .cppan denen Sie Änderungen vorgenommen haben (und die keinen Konflikt verursachen würden):

svn commit -m "" `svn status | grep "^M.*[h|cpp]$" | awk '{print $2}' | tr "\\n" " "`

Ändern / Hinzufügen von Erweiterungen zum [h|cpp]Teil. Fügen Sie -m ""bei Bedarf eine Protokollnachricht zwischen den Anführungszeichen von hinzu .

Alan Turing
quelle
1

Einige der vorgeschlagenen Ideen können folgendermaßen umgesetzt werden:

Unter Windows in PowerShell

Fügen Sie alle zur Standardliste.ps1 hinzu

dir -Recurse | ? { -not $_.PSIsContainer } | % { svn cl default $_.FullName }

Hinzufügen, um list.ps1 zu ignorieren

 dir file1 ... filN  % { $_.FullName } > ignore-on-commit
 cat .\ignore-on-commit | % { svn cl ignore-on-commit $_ }
 svn add ignore-on-commit

Jetzt können Sie einen Alias svn ci --changelist defaulterstellen, damit Sie ihn nicht jedes Mal angeben müssen. Der zusätzliche Vorteil besteht darin, dass Sie die Ignor-on-Commit-Liste (falls gewünscht) im Repository speichern können.

Ich mache das für einige Dateien, die ständig neu generiert werden, aber selten von Hand geändert werden. Zum Beispiel füge ich meinen Konfigurationsdateien an bestimmten Platzhaltern eine Revisionsnummer hinzu, damit Dateien bei jedem Commit geändert werden. Manuelle Änderungen sind jedoch selten.

Majkinetor
quelle
1

Ich hatte es satt, darauf zu warten, dass dies in SVN eingebaut wird. Ich habe tortoiseSVN mit ignore-on-commit verwendet, aber dadurch wird ein Benutzerdialogfeld angezeigt, das Sie nicht über die Befehlszeile unterdrücken können. Wenn ich mein Build-Skript ausführe und eine Tasse Tee mache, hasse ich es, wenn Ich komme zurück und stelle fest, dass es zu 10% auf Benutzereingaben wartet.

Hier ist ein Windows-Powershell-Skript, das nur Dateien festschreibt, die nicht in einer Änderungsliste enthalten sind:

# get list of changed files into targets
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad
# select the nodes that aren't in a changelist
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path};
# create a temp file of targets
$fileListPath =  [IO.Path]::GetTempFileName();
$fileList | out-file $fileListPath -Encoding ASCII
# do the commit
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file
Remove-Item $filelistPath
Ben Curthoys
quelle
1

Aktualisierung des Skripts von user88044.

Die Idee ist, die Dateien in die Änderungsliste "Nicht festschreiben" zu verschieben und das böse Skript auszuführen.

Das Skript extrahiert die Do-Not-Commit-Dateien aus dem Befehl: svn status --changelist 'Do-not-commit'

#! / bin / bash DIR = "$ (pwd)"

IGNORE_FILES = "$ (svn status --changelist 'nicht festschreiben' | tail -n +3 | grep -oE '[^] + $')"

für i in $ IGNORE_FILES; mache mv $ DIR / $ i $ DIR / "$ i" _; getan;

svn "$ @";

für i in $ IGNORE_FILES; mache mv $ DIR / "$ i" _ $ DIR / $ i; getan;

Das Skript befindet sich in / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)

svnn status, svnn commit usw.

Nicolas F.
quelle
1

Sie können die Änderungsliste "Ignorieren bei Festschreiben" direkt mit TortoiseSVN konfigurieren. Es ist nicht erforderlich, eine andere Änderungsliste einschließlich aller anderen Dateien zu konfigurieren

1) Klicken Sie auf "SVN Commit ..." (wir werden nicht festschreiben, nur um ein grafisches Menü für die Änderungsliste zu finden). 2) Klicken Sie in der Liste mit der rechten Maustaste auf die Datei, die Sie ausschließen möchten. 3) Menü: Gehen Sie zu Änderungsliste> Ignorieren bei Festschreiben

Wenn Sie das nächste Mal eine SVN-Festschreibung durchführen ... Die Dateien werden am Ende der Liste unter der Kategorie "Ignorieren bei Festschreiben" deaktiviert angezeigt.

Getestet mit: TortoiseSVN 1.8.7, Build 25475 - 64 Bit, 05.05.2014 20:52:12, Subversion 1.8.9, -release

luney
quelle
1
Ich habe gerade die Kommentare von tjmoore gesehen und bereits die guten Informationen für den Benutzer von tortoiseSVN gegeben ... keine Befehlszeile tortoisesvn.net/docs/release/TortoiseSVN_en/…
luney
Ist das in 1.9 kaputt?
Jake Hm
1

Dies ist zu spät zum Spiel, aber ich habe den tollsten Befehlszeilenbefehl für dieses Problem gefunden. Fertig mit Bash. Genießen.

svn status | grep -v excluding | sed 's/^A */"/g; s/$/"/g' | tr '\n' ' ' | xargs svn commit -m "My Message"

Ok, hier ist eine Erklärung des Befehls. Einige Dinge müssen je nach Anwendungsfall geändert werden.

svn status

Ich bekomme eine Liste aller Dateien. Sie beginnen alle mit diesen Statuszeichen (?,!, A usw.). Jeder ist auf seinen eigenen Linien

grep -v excluding

Ich benutze grep, um die Liste zu filtern. Es kann entweder normal (zum Einschließen) oder mit dem Flag -v (zum Ausschließen) verwendet werden. In diesem Fall wird es zum Ausschließen verwendet, wobei ein Ausdruck "Ausschließen" das ist, was ausgeschlossen wird.

sed 's/^. */"/g; s/$/"/g'

Jetzt entferne ich das Statuszeichen und das Leerzeichen am Anfang jeder Zeile und zitiere dann jede Zeile mit sed. Einige meiner Dateinamen enthalten Leerzeichen, daher das Zitat.

tr '\n' ' '

Mit tr ersetze ich alle Zeilenumbrüche durch Leerzeichen. Jetzt befindet sich meine gesamte Liste der zu festschreibenden Dateien in einer Zeile.

xargs svn commit -m "My Message"

Zuletzt verwende ich xargs, um meinen Commit-Befehl mit der Nachricht auszuführen. Es führt das Commit durch und löscht meine zitierte Dateiliste als letztes Argument.

Das Ergebnis ist, dass letztendlich alles so funktioniert, wie ich es möchte. Ich hasse es immer noch, dass ich gezwungen bin, durch diese verdammten Reifen zu springen, aber ich kann damit leben. Ich vermute.

user2223059
quelle
0

Da ich genau das gleiche Problem hatte und mein Googeln mir immer wieder nichts gab, habe ich eine Problemumgehung gefunden. Hier ist, was ich getan habe, es scheint für mich zu funktionieren, aber da ich mit einer alten Version von SVN festgefahren bin (<1.5, da es nicht die Option --keep-local gibt), bin ich kein Experte dafür Ich kann nicht sicher sein, ob es eine universelle Lösung ist. Wenn es auch bei Ihnen funktioniert, lassen Sie es mich bitte wissen!

Ich hatte es mit einer Prestashop-Installation zu tun, die ich von SVN erhalten hatte, da andere Leute bereits damit begonnen hatten. Da die DB-Einstellungen für einen anderen Server vorgenommen wurden, habe ich sie in einer Datei im Ordner / config geändert. Da dieser Ordner bereits versioniert war, würde das Festlegen in svn: ignore nicht verhindern, dass meine lokalen Änderungen daran festgeschrieben werden. Folgendes habe ich getan:

cp config ../cfg_bkp              # copy the files out of the repo
svn rm config                     # delete files both from svn and "physically"
svn propset svn:ignore "config" . # as the files no longer exists, I can add my ignore rule and then...
mv ../cfg_bkp config              # ...bring'em back
svn revert --recursive config     # make svn forget any existing status for the files (they won't be up for deletion anymore)

Jetzt kann ich svn add --force ausführen. im Repo-Stammverzeichnis, ohne meine Konfiguration hinzuzufügen, auch wenn sie nicht mit der Repo-Version übereinstimmt (ich denke, ich müsste das alles noch einmal durchgehen, wenn ich es noch einmal modifizieren würde, habe es nicht getestet). Ich kann auch svn aktualisieren, ohne dass meine Dateien überschrieben werden oder Fehler auftreten.

neemzy
quelle
0

Eine Lösung, die Änderungen an den Verzeichniseigenschaften nicht ignoriert

Ich habe versucht, die Lösung basierend auf zu verwenden changelist, aber ich habe ein paar Probleme damit. Zuerst hat mein Repository Tausende von Dateien, daher ist die festzuschreibende Änderungsliste riesig, und meine svn statusAusgabe wurde viel zu lang und musste analysiert werden, um nützlich zu sein. Am wichtigsten ist, dass ich Änderungen festschreiben wollte, die aus einer Zusammenführung stammen, was bedeutet, dass sie Eigenschaftsänderungen enthalten. Beim Festschreiben einer Änderungsliste werden die an das Verzeichnis angehängten svn-Eigenschaften nicht festgeschrieben, daher musste ich ein zusätzliches Festschreiben durchführen:

svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"

Möglicherweise müssen Sie dies für mehrere Verzeichnisse tun (hier zeichne ich die Eigenschaften von DIRund des aktuellen Verzeichnisses auf .), im Grunde diejenigen mit einem Min der zweiten Spalte bei der Ausgabe des svn statusBefehls.

Lösung

Ich habe Patches verwendet und svn patch. Im Pseudocode:

svn diff $IGNORE_FILES > MYPATCH   # get the mods to ignore
svn patch --reverse-diff MYPATCH   # remove the mods
svn ci -m "message"                # check-in files and directory properties
svn patch MYPATCH                  # re-apply the mods

Wie bei anderen Postern verwende ich am Ende ein Skript, um die Liste der zu ignorierenden Dateien zu verwalten:

#! /usr/bin/env bash

finish() {
    svn patch MYPATCH               # re-apply the mods
}
trap finish EXIT

IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"

svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods

svn "$@"

Ich habe es normalerweise mit ciund verwendet revert -R ..

P. Le Sager
quelle
-1

svn:ignore ist deine Antwort.

Beispiel:

$ svn propset svn:ignore -F .cvsignore .
property 'svn:ignore' set on '.'
Manuel Ferreria
quelle
1
Beachten Sie, dass das obige Beispiel zeigt, wie Sie eine zuvor konfigurierte cvsignore-Datei als Eingabe für Ihre svnignore-Eigenschaft verwenden.
Ben Hoffstein
1
no svn: ignore ist nur für Unversionsdateien. funktioniert nicht mit Versionsdateien
Sérgio
1
Und es ist auch nicht lokal. Es ist eine Eigenschaftsänderung, die von selbst festgeschrieben wird.
Adam Badura
-9
svn propset "svn:ignore" "*.xml" .

Das *.xmlist das Muster der zu ignorierenden Dateien. Hier können Sie auch Verzeichnisnamen verwenden.

Homes2001
quelle
3
-1, weil Sie eine Datei, die Teil des Repositorys ist, nicht ignorieren können.
Zellus