Frage

Ich benutze SVN für ein Projekt im mit ein paar anderen Entwicklern arbeiten. Svn funktioniert gut für die Quellcodeverwaltung jedoch sind wir alle Möglichkeiten, Konflikte bekommen, wenn wir die dlls begehen.

Wenn ich löse ich den Konflikt (die meinen Dlls als diff-Programm löscht kippen binäre Dateien verarbeiten) dann zu verpflichten müssen wieder aufzubauen. Wie sollen Sie Konflikte wie diese lösen?

Edit:

Die DLLs in einem separaten SVN-Ordner als Projekt ist ein Spiel mod und nicht Programmierer benötigen Zugriff auf die neuesten Builds.

War es hilfreich?

Lösung

Wie hier in anderen Antworten erwähnt: Sie sollten nicht Version Ihre generierten DLLs in dem ersten Platz. Aber wenn Sie wirklich Haben auf der Version sie, dann können Sie einen Konflikt ohne ein Diff-Tool, das Ihre DLL-Dateien entfernt:

Für jede Datei mit Konflikten Subversion stellt drei zusätzliche unversionierte Dateien in Ihrer Arbeitskopie:

filename.mine

Das ist Ihre Datei, wie sie in Ihrer Arbeitskopie existiert, bevor Sie Ihre Arbeitskopie-die aktualisiert, ohne Konfliktmarken ist. Diese Datei hat nur Ihre neuesten Änderungen darin. (Wenn Subversion die Datei nicht-zusammenführbar hält, die .mine Datei nicht erstellt wird, da es in der Arbeitsdatei identisch sein würde.)

filename.rOLDREV

Dies ist die Datei, die die BASE Revision war, bevor Sie Ihre Arbeitskopie aktualisiert. Das heißt, die Datei, die Sie ausgecheckt, bevor Sie auf Ihre neuesten Änderungen.

filename.rNEWREV

Dies ist die Datei, die Ihr Subversion-Client nur vom Server erhalten, wenn Sie Ihre Arbeitskopie aktualisiert. Diese Datei entspricht die HEAD Revision des Repository.

Hier OLDREV ist die Revisionsnummer der Datei in Ihrem Verzeichnis .svn und NEWREV ist die Revisionsnummer des Repositorys HEAD.

Nun lösen einen solchen Konflikt, entfernen Sie die zusätzlichen Dateien, die Sie nicht wollen:

  • , wenn Sie Ihre eigene DLL behalten möchten, löschen Sie die Dateien filename.rOLDREV filename.rNEWREV
  • Wenn Sie die DLL aus dem Repository behalten möchten, löschen Sie die Dateien filename.rOLDREV und filename.mine, dann kopieren filename.rNEWREV in Dateiname

danach, ausführen

svn resolved filename

Subversion sagen, dass Sie den Konflikt selbst gelöst werden.

Andere Tipps

Wenn es eine DLL, die Sie bauen (und nicht als eine externe, die Sie keine Quelle haben für), dann sollte die Quelle in der Quellcodeverwaltung, nicht die binäre.

Wenn Sie wollen, dass es nicht enthalten in diesem speziellen Repository, dann können Sie es als SVN umfassen. Externe

Im Allgemeinen würden Sie Ihre eigene kompilierte DLLs in der Quellcodeverwaltung nicht speichern überhaupt. Haben Sie einen bestimmten Grund, die Sie benötigen, dies zu tun?

ich meine Entwicklungsumgebungen, so dass jemand irgendwelche meiner Projektkomponenten unabhängig von jeder andere aufbauen können. Auf diese Weise, dass das einzige, was in meinem Source-Control-System ist, ist mein source Code. Dies hat eine Reihe von Vorteilen:

  • Es vermeidet binäre Konflikte Datei, wenn in DLLs oder EXE-Dateien
  • zu überprüfen versuchen,
  • Das Volumen der Daten, die von Ihrem Source-Control-System verfolgt ist viel kleiner, so dass es schneller
  • Wenn Entwickler immer ihre eigenen DLLs bauen, dann können sie einigermaßen sicher sein, dass der Quellcode haben sie die kompilierte Datei übereinstimmt. Wenn Sie etwas verwenden, das jemand anders gebaut, dann kann man nie sicher sein.

Wie in den Kommentaren erwähnt, kann es durchaus sinnvoll sein, Dritter zu speichern DLLs in Ihrem Source-Control-System, vor allem, wenn Sie tatsächlich nicht die Quelle für sie haben. Ich habe auch an Projekten gearbeitet, wo wir Distributions-Dateien gespeichert (.tar.gz usw.) für verschiedene Open-Source-Bibliotheken in der Quellcodeverwaltung, hatte dann ein ganzes System von Makefiles, die gebaut diejenigen Bibliotheken als Teil eines Build-alles Ziel.

Für binäre Dateien, die meiste Zeit, möchten Sie entweder Version davon akzeptieren. Zum Beispiel, wenn die betreffende Datei eine ausführbare Datei-Tool ist, dann in der Regel eine Version könnte als die anderen neueren sein, und das kann diejenige, die Sie verwenden möchten sein.

die Version zu übernehmen, die in der Branche ist, dass Sie aus verschmelzen, verwenden:

svn resolve --accept=theirs-full path/to/filename

die Version zu übernehmen, die zuvor in dem aktuellen Zweig war, verwenden Sie:

svn resolve --accept=mine-full path/to/filename

Manchmal wird SVN verweigern theirs-full mit einer Warnung zu verwenden:

svn: warning: W195024: Inapplicable conflict resolution option given for conflicted path

da SVN ein Stück Scheiße ist, wenn es um Zusammenführung kommt. In diesem Fall müssen Sie Dateien wie in der akzeptierten Antwort manuell kopieren https://stackoverflow.com/a/410767/2279059, anstatt Befehlszeilenoptionen, die für die bestimmt sind, was Sie zu tun versuchen. Wenn Sie beide Dateien wissen identisch sind (aber SVN noch markiert sie als Konflikt aus Gründen bereits erwähnt), können Sie auch

svn resolve --accept=working path/to/filename

Während dies im Fall von identischen Dateien, ist das Gleiche wie alle anderen Befehle, SVN nicht feige weigern, sie auszuführen. Macht das Sinn? Nein, es funktioniert nicht. Damit umgehen.

Es ist sinnvoll, um auch Binärdateien in der Versionskontrolle hat:

  • Es vermeidet den Aufwand für die Menschen wieder aufzubauen, die nur die binären verwenden.

  • Die binäre wird genagelt, wenn Sie freigeben.

Um diese Arbeit zu machen, die binären immer zu den Quellen entsprechen muss. Also, wenn Sie Quellen fusionieren müssen Sie die binäre von ihnen neu zu erstellen, einer der Binärdateien aus den fusionierten Versionen Kommissionierung nicht tun.

Stellen Sie sicher, dass Ihr DLLs.Der svn:mime-type Eigenschaft hat auf application/octet-stream oder einen anderen Nicht-Text-Typ.

svn propget *.dll
svn propset svn:mime-type application/octet-stream *.dll

Sie werden nach wie vor eigentlich haben zu lösen Konflikte, wenn sie auftreten.

Und überprüfen Sie die Datei-Inhalt Geben Kapitel der Dokumentation.

Also, wenn Sie den * .dlls in einem separaten Ordner seines viel leichter zu tun, wie folgt:

  1. Direkt bevor Sie Ihre Änderung Ihrer * aktualisieren bauen DLL-Ordner besser auch Ihre Quellen aktualisieren, wenn Sie vertrauen, dass Ihre Kollegen nur übersetzbare Quellcode begehen. (Im Falle eines Konflikts (was deine Schuld an diesem Punkt wäre, wie Sie sich etwas geändert, bevor Sie auf die neueste Version aktualisiert))
  2. Sie Ihre bauen.
  3. Sie direkt das Ergebnis begehen.

Alternativ:

baut nicht auf den Pfad in dem Verzeichnis, bauen irgendwo draußen, bis Sie mit sind zufrieden sind, was auch immer ist das Ergebnis.

Dann gehen Sie wie folgt vor:

  1. Aktualisieren Sie Ihre Arbeitskopie des dlls Ordner (wenn es zu einem Konflikt seine Ihre Fehler und lösen den Konflikt durch „behalten ihre“)
  2. Kopieren Sie Ihre Arbeit .dlls an der Arbeitskopie
  3. Informieren Sie Ihre Kollegen, dass Sie eine neue Revision begehen wird (können Sie diesen Schritt lassen weg)
  4. Commit Ihrer Arbeit, wenn es ein Konflikt ist, sollte es ihre Schuld.

Sie haben zwei Möglichkeiten jetzt:

5a. Du bist eine sehr abscheuliche Person und löst das Problem durch Mine zu halten.

5b. Sie arbeiten, wie Sie funktionieren sollte ... Lesen Sie die Protokolldatei und finden Sie heraus, der auch während der kurzen Zeit verpflichtet, Sie benötigt, um Ihre Arbeit in den Ordner zu kopieren und gedrückt begehen. Sprechen Sie mit diesem Kollegen. Vereinbaren Sie weitere Vorgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top