Wie kann ich mein Mercurial-Repository in ein Verzeichnis verschieben?

8

Ich habe eine Verzeichnisstruktur wie:

%Vor%

Wie Sie an der Position von .hg / sehen können, steht nur src / unter Hg-Kontrolle. Ich möchte das Repository-Wurzelverzeichnis von src / in sein übergeordnetes Verzeichnis project_root verschieben, damit ich auch Daten /, README.txt und LICENCE.txt verfolgen kann.

Ein hacky Weg, dies zu tun wäre, alles in ein Verzeichnis zu verschieben, anstatt .hg nach oben zu verschieben:

  • Verschieben Sie den Inhalt von src in ein neues Verzeichnis src / src /
  • Verschieben Sie den Inhalt von project_root (außer src /) nach src /
  • Benennen Sie src in new_project_root
  • um
  • Neues Projektstammverzeichnis aus Projektstammverzeichnis entfernen, Projektstammverzeichnis löschen

Gibt es einen besseren Weg? Ich kann nicht die erste Person mit diesem Problem sein, und die obige Lösung scheint übermäßig beteiligt.

    
SuperElectric 17.07.2011, 16:13
quelle

3 Antworten

4

Ihr Plan ist in Ordnung. Es scheint, dass es beteiligt ist, aber es sollte weniger als 20 Minuten dauern (schlimmster Fall) und passiert nur einmal.

Im ersten Schritt, wenn Sie die verfolgten Dateien verschieben, sollten Sie hg rename (alias hg move ) verwenden, um sie zu verschieben, da sich Mercurial daran erinnert, was jede Datei vor und nach dem Verschieben war. Dies hilft beim Zusammenführen von Änderungen in der Datei vor dem Verschieben mit den neuen Dateien nach dem Verschieben. Funktioniert am besten, wenn beim Umbenennen / Kopieren keine Änderungen am Inhalt desselben Änderungssatzes vorgenommen werden.

Ich empfehle, den aktuellen Repo zu klonen (oder das gesamte Projektverzeichnis zu kopieren), bevor Sie fortfahren.

    
Joel B Fant 17.07.2011, 19:18
quelle
5

Sie sollten hg convert ausprobieren. Sie werden Ihr bestehendes Mercurial-Repo in ein neues "konvertieren". Sie geben Regeln für die Konvertierung an. In diesem Fall werden alle Dateien aus dem ursprünglichen Repo in das Verzeichnis src im neuen Repo übernommen. Dann können Sie die anderen Dateien manuell kopieren und hg add in den neuen Repo einfügen.

Dies hat den Vorteil, dass es nicht als separate Änderungen in Ihrem Verlauf angezeigt wird. Der mögliche Nachteil besteht darin, dass Ihre ChangeSet-IDs neu generiert werden und vorhandene Klone nicht mehr aus dem neuen Repo ziehen können.

    
John Zwinck 17.07.2011 17:15
quelle
0

hg's Detect Renames funktioniert heutzutage.

Klonen Sie das Repo, damit Sie die Dinge ohne Bedenken durcheinander bringen können.

Verwenden Sie Ihr Beispiel:

  • Erstellen Sie das src / src-Unterverzeichnis
  • verschiebe utils, math, graphics usw. in src / src
  • Öffnen Sie dann das Bestätigungsfenster.
    • Die verschobenen Dateien erscheinen in ihrem alten Verzeichnis mit einem! und in ihrem neuen Verzeichnis mit einem?
  • Klicken Sie mit der rechten Maustaste auf eine Datei und wählen Sie "Erkennen umbenennen ..."
  • Schieben Sie den Schieberegler "Min Similarity" auf 100%
  • Klicken Sie auf die Schaltfläche Alle Übereinstimmungen akzeptieren und schließen Sie das Fenster "Kopien erkennen / umbenennen"
    • Die verschobenen Dateien sollten jetzt mit einem R im alten Verzeichnis und einem A in ihrem neuen Verzeichnis
    • erscheinen
  • Übernehmen Sie diese Änderung

  • Dann habe ich Daten, Readme.txt usw. nach src (nicht src / src) verschoben

  • hat die Adds begangen.

Endlich, nachdem ich das Repo so eingerichtet habe, wie ich es möchte, schieben Sie die Änderungen zurück zum ursprünglich geklonten Repo. Vergessen Sie nicht, dass Sie das ursprüngliche Repo aktualisieren müssen, um die Änderungen im Arbeitsverzeichnis zu sehen.

    
Lee Oades 16.10.2012 00:12
quelle

Tags und Links