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:ignore
wirkt 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.
quelle
Antworten:
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 :
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:
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:
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:
So sieht ein einfaches Beispiel auf meinem Computer aus:
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.
quelle
$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?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:
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:
..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!
quelle
svnn ignore configs/*
- mit Platzhaltern und Schnickschnack. Ich glaube, ich schreibe so etwas selbst und komme dann hierher zurück!svnn
müssen, sollten Sie es aufrufensvn
und 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
.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.default
mit Standardwerten. Erstellen Sie dann eine Nant-Task, die alleweb.config.default
Dateien umbenenntweb.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.config
Datei ignorieren , damit sie nicht in das Repository übernommen wird.quelle
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!).
quelle
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:
Vielleicht hilft es jemandem.
quelle
svn ci
ist einfach alias zusvn commit
. Commit-Befehl ermöglicht dasLeute, 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:
(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!)
quelle
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 aktuellea-file
Repository und diea-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 Konflikta-file
wiefolgt 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. Commita-file
von WC1. Fügen Sie in WC2 oben eine andere Textzeile hinzua-file
, z. B. "Ich möchte einen Konflikt" . Update von WC2, und jetzt sollte eine Datei in Konflikt stehen.quelle
Ich würde stattdessen ein Helfer-Bash-Skript schreiben, das
svn commit
auf 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
.h
festschreiben,.cpp
an denen Sie Änderungen vorgenommen haben (und die keinen Konflikt verursachen würden):Ändern / Hinzufügen von Erweiterungen zum
[h|cpp]
Teil. Fügen Sie-m ""
bei Bedarf eine Protokollnachricht zwischen den Anführungszeichen von hinzu .quelle
Einige der vorgeschlagenen Ideen können folgendermaßen umgesetzt werden:
Unter Windows in PowerShell
Fügen Sie alle zur Standardliste.ps1 hinzu
Hinzufügen, um list.ps1 zu ignorieren
Jetzt können Sie einen Alias
svn ci --changelist default
erstellen, 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.
quelle
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:
quelle
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'
Das Skript befindet sich in / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
svnn status, svnn commit usw.
quelle
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
quelle
Dies ist zu spät zum Spiel, aber ich habe den tollsten Befehlszeilenbefehl für dieses Problem gefunden. Fertig mit Bash. Genießen.
Ok, hier ist eine Erklärung des Befehls. Einige Dinge müssen je nach Anwendungsfall geändert werden.
Ich bekomme eine Liste aller Dateien. Sie beginnen alle mit diesen Statuszeichen (?,!, A usw.). Jeder ist auf seinen eigenen Linien
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.
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.
Mit tr ersetze ich alle Zeilenumbrüche durch Leerzeichen. Jetzt befindet sich meine gesamte Liste der zu festschreibenden Dateien in einer Zeile.
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.
quelle
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:
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.
quelle
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 meinesvn status
Ausgabe 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:Möglicherweise müssen Sie dies für mehrere Verzeichnisse tun (hier zeichne ich die Eigenschaften von
DIR
und des aktuellen Verzeichnisses auf.
), im Grunde diejenigen mit einemM
in der zweiten Spalte bei der Ausgabe dessvn status
Befehls.Lösung
Ich habe Patches verwendet und
svn patch
. Im Pseudocode:Wie bei anderen Postern verwende ich am Ende ein Skript, um die Liste der zu ignorierenden Dateien zu verwalten:
Ich habe es normalerweise mit
ci
und verwendetrevert -R .
.quelle
svn:ignore
ist deine Antwort.Beispiel:
quelle
Das
*.xml
ist das Muster der zu ignorierenden Dateien. Hier können Sie auch Verzeichnisnamen verwenden.quelle