2009-05-21 6 views
51

Ist es möglich, Änderungen an einer Datei in Subversion lokal auf nur einem Client zu ignorieren, ohne die Ignorierung an das gesamte Repository weiterzugeben?Subversion: Änderungen an einer Datei lokal nur auf einem Client ignorieren

Das besondere Problem, mit dem ich es zu tun habe, ist, dass ich ein Projekt ausgecheckt und eine Reihe von Dateien einschließlich der Makefile, die bereits Teil des Repository ist, geändert habe. Jetzt ist die Umgebung, an der ich arbeite, anders als der Rest der Gruppe, und ich möchte, dass die Änderungen an den Makefiles lokal auf meinem Rechner bleiben und nicht festgeschrieben werden.

Allerdings möchte ich nicht svn: ignore setzen, weil ich glaube, würde die Ignorieren auf das Repository zu verpflichten, während es wichtig ist, die make-Datei dort zu halten.

+4

Grundsätzlich denke ich, dass Sie versuchen, das falsche Problem zu lösen. Warum ändern Sie Ihre Makefiles nicht in beiden Umgebungen? –

+22

Nicholas, auch wenn Fuad nicht den besten Ansatz für sein Problem verwendet, bin ich ziemlich sicher, dass es legitime Gründe gibt, Ignores zu erstellen, die nur für Ihre Arbeitskopie gelten. – allyourcode

+7

Ich stimme mit allyourcode überein. Ein Entwickler (Benutzer von svn) hat möglicherweise nicht das Privileg oder den Wunsch, grundlegende Prinzipien zu ändern. Ich möchte auch eine Lösung für dieses Problem. Wir haben Umgebungseigenschaftsdateien in unserem Repo eingecheckt. Wenn ich diese lokal ändere, muss ich sie manuell deaktivieren, wenn ich einchecke. Es ist nur eine Frage der Zeit, bis ich vergesse, sie zu deaktivieren.Ich würde zustimmen, dass diese Dateien NICHT in unserem Repo sein sollten, aber ich bin nicht befugt, diese Entscheidung zu treffen, also brauche ich wirklich einen Workaround. – andersonbd1

Antwort

-3

Verwenden Sie svn export, um die Datei zu exportieren, damit sie nicht der Versionskontrolle unterliegt.

http://svnbook.red-bean.com/en/1.0/re10.html

edit: Aber ich glaube, das auf einer Pro-Verzeichnis Basis getan werden muss, so würden Sie Ihre Dateien etwas neu organisieren müssen.

Ich kann das im Moment nicht testen, aber würde eine spärliche Kasse hier helfen?

http://svnbook.red-bean.com/nightly/en/svn.advanced.sparsedirs.html

+0

Funktioniert nicht, immer noch Teil des Repository und zeigt sich als geändert – fuad

+1

Ich bin nicht sicher, dass es möglich ist, Dateien in einem versionierten Verzeichnis exportiert haben. –

+0

Ich bin nicht sicher, warum das so stark abgelehnt wurde. Dies funktioniert in einer Reihe von Situationen, in denen andere Lösungen dies nicht tun. Vor allem funktioniert es für mich, weil ich zwei zusätzliche Anforderungen hatte. 1) Nein TortoiseSVN (Ich bin in OS X) 2) Ich möchte meine Gewohnheiten nicht anpassen, um Änderungslisten zu berücksichtigen. Edit: Getestet und funktioniert in einem versionierten Verzeichnis BTW. Sie können das angegebene Verzeichnis (innerhalb des Verzeichnisses) mit "svn update. --set-depth = empty" entfernen und anschließend mit "svn export --force svnrepopath/directory" erneut auschecken. – radicaledward101

1

Die nächstgelegene sichere Lösung, die ich denken kann, ist eine persönliche Zweig zu verwenden.

+1

Wie hilft das? Wenn Sie wieder in den Trunk migrieren möchten, haben Sie ein anderes (schlimmeres?) Problem: die Dateien, die Sie ignorieren möchten, NICHT zusammenführen. – allyourcode

+1

Sie können Ihre persönliche Änderung in Ihren persönlichen Zweig mit einer Nachricht mit der Aufschrift "nicht zusammenführen" und achten Sie auf diese Nachricht beim Zusammenführen, wird es bald unter den jüngsten Änderungen sowieso begraben werden; Sie können diese Revision sogar als bereits verschmolzen markieren, was eine versehentliche Zusammenführung verhindern sollte. BTW Ich wusste nicht über Änderungslisten und sie sind definitiv besser als eine Filiale für diesen Zweck. – Gleb

10

, wenn Sie verwenden Subversion 1.5.x oder höher können Sie Änderungslisten verwenden:

svn cl COMMIT /path/to/project/* 

svn cl NOT_COMMIT /path/to/project/Makefile 

Hinweis: mit dem zweiten Befehl Makefile wird von der ersten Änderungsliste entfernt werden. Sie können die Warnung ignorieren.

Die zweite Änderungsliste nicht übernehmen.

tun verpflichtet über:

svn ci --cl COMMIT -m"<LOG MESSAGE HERE>" 

Wichtig: Wenn Sie ohne -Cl Option verpflichten, werden alle Änderungen

+1

svn cl ist möglicherweise keine gute Option, da das Hinzufügen von Verzeichnissen zu Änderungslisten nicht unterstützt wird. Dies ist ein Problem, wenn es Verzeichnisse gibt, die Sie in Ihrem Commit hinzugefügt haben. – allyourcode

+2

Änderungslisten scheinen nützlich, aber ich denke nicht, dass sie hier wirklich gelten. Es ist ein anderer Anwendungsfall. Sie funktionieren möglicherweise, wenn die Befehle standardmäßig Dateien ignorieren, die sich in einer Änderungsliste befanden - das wäre wirklich nützlich. Aber wenn ich mich nicht irre, funktioniert das nicht. Wenn Sie für einen Befehl keine Änderungsliste angeben, verhält es sich so, als ob keine Änderungslisten existieren, richtig? Selbst wenn Änderungslisten Verzeichnisse unterstützen, wäre dies keine ideale Lösung. Sie müssten die Dateien, die Sie wirklich einchecken möchten, manuell in eine Änderungsliste verschieben. Ich würde lieber nur die Dateien manuell markieren, die ich NICHT einchecken möchte. – andersonbd1

38

Wie bei vielen Aspekten der SVN begangen werden, Schildkröte es wirklich macht einfach. Tatsächlich glaube ich, dass turtoise tatsächlich Features hinzufügt, indem es vorhandene svn-Features systematisch verwendet. Mir ist klar, dass diese Antwort nur Windows ist, aber vielleicht sind da draußen einige Leute wie ich und benutzen immer noch Windows. Im "Check for Modifications" Popup klicken Sie einfach mit der rechten Maustaste auf Ihre Dateien und wählen Sie "Zur Änderungsliste wechseln" -> "ignore-on-commit". Wenn Sie nun mit tortoise einchecken, segmentiert es Ihre Änderungen in die verschiedenen Änderungslisten, so dass Sie zumindest visuell erkennen können, was Sie begehen wollen und was Sie nicht begehen wollen.

+3

Schön! aber die Datei (und der so der Ordner) erscheint immer noch als modifiziert. – Loda

+0

Ja, ich habe das gleiche Problem. All dies verhindert einen versehentlichen Update/Commital. – ArtB

+2

Wie bereits erwähnt, ist dies alles perfekt, außer es zeigt, dass die Datei geändert wurde. Es ist besser, als jedes Mal, wenn ich festlege, alle diese Dateien zu deaktivieren. –