Versionskontrolle (hg): Kann ein Verzeichnis mit verschiedenen Repositorys "synchronisiert" werden?

338
MostlyHarmless

Ich habe ein Verzeichnis für meine Arbeitsdateien, das der Versionskontrolle unterliegt (Mercurial):

~ / myfiles

In einem Unterpfad habe ich ein Verzeichnis mit Emacs-Paketen für meine Einrichtung im Org-Modus:

~ / myfiles / org-mode

Wie gesagt, der gesamte Pfad steht unter Versionskontrolle und wird daher mit einem Hg-Repository "synchronisiert". Die ursprüngliche Quelle für das org-modeUnterverzeichnis ist auch ein (git) Repository im Internet ( http://orgmode.org/cgit.cgi/org-mode.git/ ).

Es wäre also schön, wenn Sie neue Versionen dieses Verzeichnisses direkt aus dem offiziellen Org-Mode-Repository ziehen und sie dann in meinem persönlichen Repository festschreiben könnten, um immer die Version zu haben, die mit meiner Emacs-Konfiguration funktioniert.

Für einen Programmierer mag dies eine sehr einfache Frage sein - da ich kein Programmierer bin, bin ich mir nicht sicher, wie er damit umgehen soll, aber ich gehe davon aus, dass dies ein allgemeines Problem sein muss.

Sicher, ich könnte das org-mode-Verzeichnis lokal in einem anderen Pfad speichern und aus meiner Versionskontrolle herausnehmen, aber dann wäre ich nicht in der Lage, das vollständige Setup zu einem bestimmten Zeitpunkt einfach wiederherzustellen.

2
Warum benötigen Sie die org-mode-Dateien unter hg? Arbeiten Sie daran oder handelt es sich um globale Dateien, die unabhängig von Ihrer Arbeit aktualisiert werden können? Doktoro Reichard vor 9 Jahren 0
Meine Arbeit ist von diesen Dateien abhängig, da ich häufig Funktionen benutze, die nur mit der neuesten Version des Org-Modus funktionieren. Bei Problemen möchte ich problemlos zur letzten Version zurückkehren können, die funktionierte. MostlyHarmless vor 9 Jahren 0
Soweit ich sehen kann, gibt es keine Interoperabilitätsprobleme bei der Verwendung von hg und git, wie Sie erläutert haben. Ich würde jedoch empfehlen, dass Sie jedes Mal, wenn Sie eine Änderung aus dem Repo des Org-Modus herausgezogen haben, auch hg festlegen (dh die Pull-Anforderung eine einzelne Änderung vornehmen). Angenommen, git speichert alles, was es braucht, im org-mode-Ordner, und ein Zurücksetzen von entweder hg oder git hätte die gleichen Auswirkungen. Doktoro Reichard vor 9 Jahren 2
Danke vielmals! Wenn Sie Ihren Kommentar in eine Antwort umwandeln würden, kann ich ihn akzeptieren. Aber verstehe ich das richtig: es kann nur funktionieren, da ich 2 verschiedene VCS verwende, also könnte ich das nicht mit `git` oder` hg` machen, um mehrere "überlappende" Arbeitsverzeichnisse mit verschiedenen Repos zu synchronisieren? MostlyHarmless vor 9 Jahren 0
Ich werde meine Kommentare in eine Antwort umwandeln, aber bitte unterlassen Sie es, diese zu akzeptieren, da jemand in der Zwischenzeit erscheinen und eine bessere Antwort entwickeln kann. Ich verwende VCS nicht ausgiebig, daher kann mein Wissen in einigen Bereichen fehlerhaft sein. Was Ihre Frage im letzten Kommentar angeht, gibt es keinen Grund, dies nicht zu tun. wenn es mit git funktioniert, sollte es mit hg funktionieren. Doktoro Reichard vor 9 Jahren 1

3 Antworten auf die Frage

1
Doktoro Reichard

Die Verwendung von hg und git in demselben Baum birgt keinen inhärenten Konflikt. Da diese Programme unabhängig voneinander entwickelt wurden, liegt es nahe, dass sie sich nicht gegenseitig stören.

In diesem Fall überlagert sich hg jedoch mit git (ein anderer Weg, um festzustellen, dass das git- Repository von der zugrunde liegenden hg- Verzeichnisstruktur abhängt ). Betrachten Sie das folgende Beispiel, in dem Sie bereits den Org-Modus geklont haben und ein Patch aus dem Online-Repository wartet.

So kann hg aussehen, bevor Sie die Änderungen aus git ziehen :

c:\myfiles> hg log -l 1 changeset: 123:da5f372c3901 tag: tip user: John Doe <john@doe.com> date: Fri Jun 13 12:00:00 2014 -0500 summary: Some change in the work files 

Anschließend ziehen Sie die Änderungen von git in den org-Modus . Am wichtigsten ist hier jedoch, dass die Pull-Aktion nicht sofort auf das hg- Repository angewendet wird .

Sie können testen, ob die neueren Patches im Org-Modus funktionieren. Wenn sie nicht sofort funktionieren, sollten Sie run ausführen hg revert --all, wodurch das Repository zum Zeitpunkt der letzten Festschreibung wiederhergestellt wird. Wenn sie funktionieren oder Sie keine Probleme finden, sollten Sie unter hg eine Änderung vornehmen, die darauf hinweist, dass Sie eine Reihe von Änderungen in den Organisationsmodus verschoben haben .

c:\myfiles> hg com -m "Pulling changes in org-mode"  c:\myfiles> hg log -l 1 changeset: 124:da5f372c3901 tag: tip user: John Doe <john@doe.com> date: Fri Jun 13 12:01:00 2014 -0500 summary: Pulling changes in org-mode 

Wenn git seine Metadaten in Bezug auf das Repository im Ordner org-mode speichert (dh wie hg mit dem Ordner .hg im Stammverzeichnis des Repositorys), sollte es kein Problem mit dem Zurücksetzen des Commits unter hg geben nach dem Feststellen, dass ein Problem mit dem org-Modus vorliegt ):

c:\myfiles> hg rollback rolling back last transaction  c:\myfiles> hg log -l 1 changeset: 123:da5f372c3901 tag: tip user: John Doe <john@doe.com> date: Fri Jun 13 12:01:00 2014 -0500 summary: Some change in the work files 

Wie in meinen Kommentaren erwähnt, können Sie dies auch unabhängig von der von Ihnen verwendeten VCS-Software ausführen. Wenn Sie haben:

c:\my_repo c:\my_repo\2nd_repo 

Es wäre kein Problem, denn um mit jedem Repository arbeiten zu können, müssten Sie in dem Verzeichnis arbeiten, in dem Sie arbeiten.

1 - Ich habe einige Codes von hier angepasst, da ich, wie gesagt, nicht viel Erfahrung mit dem Thema habe

1
SlightlyCuban

Klingt wie Sie möchten, dass der Org-Modus ein Subrepo ist . Und es scheint, als git wird als Subrepo unterstützt. Die Dokumentation ist klar, was als nächstes zu tun ist:

echo "http://orgmode.org/cgit.cgi/org-mode.git" >> .hgsub hg add .hgsub git clone http://orgmode.org/cgit.cgi/org-mode.git org-mode 

Dadurch können Sie Ihre Sachen lokal verfolgen und Änderungen aus dem Org-Modus herausholen, wenn sie verfügbar sind.

0
bbaassssiiee

Ihr Code hängt von einer "Lieferanten-Niederlassung" ab. Jeder hat sein Repository. Kein Problem. Die meisten Versionskontrollsysteme erlauben einen "Export" des neuesten Codes, dh ohne Metadaten. Wenn Sie dies in Ihrem eigenen Repository festschreiben, gibt es keine Kollision. Es ist unwahrscheinlich, dass Sie sich für beide Repositorys verpflichten müssen. Aber wenn Sie müssen, können Sie es wahrscheinlich herausfinden. Suchbegriff: 'Kreditorenzweig'