
Umstellung auf MQL5 Algo Forge (Teil 1): Erstellen des Haupt-Repositorys
Inhalt
- Einführung
- Derzeit verfügbare Tools
- Beginn des Übergangs
- Repository Management Tool
- Erstellen des Haupt-Repositorys
- Klonen des Repositorys
- Ignorierte Dateien konfigurieren
- Änderungen festschreiben
- Erstellen eines Archivzweigs
- Vorbereiten der Erstellung von Projektzweigen
- Schlussfolgerung
Einführung
Bei der Arbeit an einem mittelgroßen bis großen Projekt entsteht unweigerlich die Notwendigkeit, Änderungen am Code zu verfolgen, sie nach ihrer Bedeutung zu gruppieren und zu früheren Versionen zurückkehren zu können. Im Allgemeinen wird dies von Versionskontrollsystemen wie Git oder Subversion (SVN) übernommen.
Die meisten Entwicklungsumgebungen bieten integrierte Werkzeuge für die Arbeit mit Repositories eines Versionskontrollsystems. MetaEditor ist da keine Ausnahme - er unterstützt sein eigenes Repository MQL Storage auf der Basis von SVN. Wie auf Dokumentation zu lesen ist:
MQL5 Storage ist ein persönliches Online-Repository für MQL4/MQL5-Quellcodes. Er ist in den MetaEditor integriert: Sie können Daten aus dem Speicher direkt im Editor speichern und empfangen.
Der Speicher ist mit dem Versionskontrollsystem ausgestattet. Das bedeutet, dass Sie jederzeit herausfinden können, wann und wie die Dateien geändert wurden, sowie alle Änderungen rückgängig machen und zur vorherigen Version zurückkehren können.
Durch den MQL5 Storage bleiben Ihre Quellcodes immer sicher. Die Daten werden auf einem geschützten Server gespeichert, auf den nur Sie Zugriff haben. Wenn Ihre Festplatte ausfällt, können alle zuvor gespeicherten Codes einfach wiederhergestellt werden.
Die Speicherung ermöglicht Ihnen die einfache gemeinsame Nutzung und Synchronisierung von Charts Templates und Profilen, Parametersätzen zum Testen von MQL5-Programmen und Sets von Handelsinstrumenten zwischen verschiedenen Plattformen.
MQL5 Storage ermöglicht die Fernentwicklung von MQL5-Anwendungen in Teams unter Verwendung von geteilten Projekten.
Das Versionskontrollsystem Git ist jedoch weitaus beliebter geworden - und das unserer Meinung nach zu Recht. Vielleicht aus diesem Grund hat MetaQuotes bereits Mitte 2024 seine Pläne bekannt gegeben, Git als integriertes Versionskontrollsystem in MetaEditor einzuführen, zusammen mit der Einführung von MQL5 Algo Forge, einer internen Alternative zu GitHub.
Zum Zeitpunkt der Abfassung dieses Artikels steht das neue Repository bereits zur Verfügung, aber die Integration von MetaEditor ist noch nicht abgeschlossen. Während MetaEditor also die Hauptentwicklungsumgebung bleibt, sind die Entwickler weiterhin auf MQL Storage auf der Grundlage von SVN beschränkt.
Bei unserer Arbeit an verschiedenen Projekten haben wir das bestehende Versionskontrollsystem aktiv genutzt. Beim Schreiben der Artikelserie „Developing a Multi-Currency Expert Advisor“ fiel jedoch die fehlende Unterstützung für die parallele Codeentwicklung in Zweigen und deren anschließendes Zusammenführen besonders auf. Während SVN selbst Verzweigungen unterstützt, bietet MetaEditor keine Schnittstelle dafür. Externe SVN-Clients können verwendet werden, aber das würde eine Umstrukturierung des gewohnten Arbeitsablaufs erfordern.
Aus diesem Grund wurde die Ankündigung von MQL5 Algo Forge sehr positiv aufgenommen. Wir hatten gehofft, dass MetaEditor endlich Verzweigungen unterstützen würde. Doch sieben Monate später bleiben diese Erwartungen unerfüllt. Lassen Sie uns daher untersuchen, wie wir den Entwicklungsprozess mit den derzeit verfügbaren Tools verbessern können.
Zum besseren Verständnis sind zumindest Grundkenntnisse über Versionskontrollsysteme erforderlich. Falls erforderlich, empfehlen wir die Lektüre von Materialien auf der MQL5-Website oder an anderer Stelle, wie Getting started with Git.
Derzeit verfügbare Tools
Kurz nachdem MetaQuotes die Nachricht über den Start von MQL5 Algo Forge veröffentlicht hatte, wurde darin ein Repository mit dem Namen mql5 angelegt, das alle Dateien unseres aktuellen MQL-Speichers enthielt. Sie wurden jedoch alle in einem einzigen Commit unter dem Nutzer super.admin hinzugefügt, was bedeutet, dass kein Commit-Verlauf erhalten blieb. Das war zu erwarten. Die Migration vollständiger Historien zwischen verschiedenen Versionskontrollsystemen ist nahezu unmöglich.
Später begannen einige Oberflächenelemente in MetaEditor einen neuen Repository-Namen anzuzeigen. Zum Beispiel wurde der Titel des Dialogs Versionsgeschichte in „MQL5 Algo Forge“ geändert:
Das Wesentliche hat sich jedoch nicht geändert: Alle Änderungen gehen weiterhin in den MQL-Speicher und nicht in die Algo Forge. Die Dateien, die vor sieben Monaten in Algo Forge kopiert wurden, sind seitdem nicht mehr aktualisiert worden.
Was sich jedoch geändert hat, ist, dass wir jetzt mit mehreren Repositories arbeiten können. Zuvor gab es nur ein Repository. Wir mussten verschiedene Projekte in separaten Ordnern innerhalb des MQL5-Datenordners erstellen, der immer das Stammverzeichnis des Repositorys war. Das bedeutete, dass wir, wenn wir eine neue Terminalinstanz für ein neues Projekt erstellten und den Speicher aktivierten, alle Projekte aus dem Speicher herunterluden, auch die ohne Bezug. Als ihre Zahl wuchs, wurde dies unangenehm.
Das einfache Löschen irrelevanter Projekte aus dem Datenordner war keine Option, da bei jeder Übertragung die gelöschten Elemente manuell von der Speicherung ausgeschlossen werden mussten.
Mit einem geeigneten Git-Repository haben wir nun mehrere Möglichkeiten, die Speicherung zu strukturieren und verschiedene Projekte zu verwalten:
- Jedes Projekt existiert in seinem eigenen Repository.
- Jedes Projekt befindet sich in einem eigenen Zweig eines einzigen Repositorys.
- Ein hybrides Modell: Einige Projekte befinden sich in separaten Repositories, während andere als Zweige innerhalb eines Repositories koexistieren.
Jeder Ansatz hat Vor- und Nachteile. Wenn zum Beispiel mehrere Projekte dieselbe Bibliothek verwenden, ist es unpraktisch, die Bibliothek in einem separaten Repository zu speichern. Stattdessen ist es besser, sie in einem eigenen Zweig zu pflegen und Änderungen nach Bedarf in Projektzweige einzubringen. Andererseits ist für in sich geschlossene Projekte ein separates Repository vorzuziehen, da so die Speicherung von nicht verwandtem Code aus anderen Projekten vermieden wird.
Beginn des Übergangs
Bei Änderungen ist es ratsam, das Bestehende zu bewahren. Die Verwendung des automatisch erstellten mql5-Repositorys ist möglicherweise nicht die beste Idee, da MetaQuotes dort unter super.admin zusätzliche Aktionen durchführen kann. Daher erstellen wir zunächst ein neues Repository, in dem wir alle unsere aktuellen Projekte speichern. Zu diesem Zweck werden wir das Modell der Speicherung verschiedener Projekte in verschiedenen Zweigen übernehmen. Um diese Trennung umzusetzen, definieren wir die folgenden Konventionen:
- Der Hauptzweig wird entweder leer bleiben oder nur einen minimalen Satz gemeinsamen Codes enthalten, der von allen Projekten verwendet wird.
- In einem separaten Archivzweig wird der gesamte Code gespeichert, der zum Zeitpunkt der Migration verfügbar ist. Von hier aus können wir Code in einzelne Projektzweige kopieren.
- Andere Zweige werden sich auf einzelne Projekte beziehen und entsprechend benannt werden.
- Ein Projekt kann je nach gewählter Verzweigungsstrategie mehrere aktive Verzweigungen haben (z. B. der unter „A Successful Git Branching Model" beschriebene Ansatz).
Nehmen wir an, wir haben einen Ordner MetaTrader5 mit einem installierten Terminal und einem verbundenem MQL-Speicher. Das heißt, der Datenordner MetaTrader5/MQL5 des Terminals enthält neben den Standarddateien auch den Code unserer Projekte.
Erstellen Sie einen neuen Ordner namens MetaTrader5.forge und kopieren Sie zwei ausführbare Dateien dorthin:
Starten Sie das MetaTrader-Terminal von diesem Ordner aus im portablen Modus. Auf unserem System wurde es nach einem Doppelklick in diesem Modus gestartet. Andernfalls müssen Sie möglicherweise den Schlüssel /portable explizit angeben, wenn Sie die Anwendung von der Befehlszeile aus starten, oder eine Verknüpfung erstellen, indem Sie diesen Schlüssel zum Startbefehl der Anwendung hinzufügen. Es ist nicht erforderlich, ein Demo-Konto zu eröffnen oder sich bei MQL5.community anzumelden.
In dem neuen Ordner wird eine erste Ordnerstruktur erstellt, einschließlich des leeren Datenordners MQL5. Noch enthält er keine unserer Dateien.
Starten Sie MetaEditor vom Terminal aus, indem Sie F4 drücken.
Wenn Sie mit der rechten Maustaste auf einen Ordnernamen klicken, bietet das Kontextmenü die Option, den MQL5 Algo Forge-Speicher zu aktivieren (obwohl dies in Wirklichkeit den MQL-Speicher aktivieren wird). Aktivieren Sie ihn noch nicht, da beabsichtigt ist, auf den neuen Repository-Typ zu migrieren.
Dann schließen Sie sowohl den MetaTrader als auch den MetaEditor, da wir sie eine Zeit lang nicht benötigen und einige Aktionen direkt im Terminal-Ordner durchführen müssen.
Repository Management Tool
Der nächste Schritt besteht darin, ein Werkzeug für die Arbeit mit dem künftigen Repository auszuwählen. Später kann diese Rolle von MetaEditor selbst übernommen werden, aber im Moment müssen wir etwas anders machen. Sie können jedes beliebige Tool für die Arbeit mit einem Git-Repository verwenden, zum Beispiel Visual Studio Code (VSCode) in Kombination mit Git. Die Windows-Version von Git kann von gitforwindows.org. heruntergeladen werden.
Installieren Sie also Git und VSCode (oder stellen Sie sicher, dass sie bereits installiert sind). Installieren Sie in VSCode die Erweiterung MQL Tools für die Arbeit mit MQL5-Dateien:
Nach der Installation der Erweiterung geben Sie den Pfad zur ausführbaren MetaEditor-Datei im Parameter „Metaeditor5 Dir“ in den Einstellungen an. Da es keine Notwendigkeit gibt, mit MQL5-Quelldateien zu arbeiten, die sich außerhalb des Arbeitsordners einer Terminalinstanz befinden, können Sie der Empfehlung folgen und den Pfad relativ zum aktuell geöffneten Ordner in VSCode angeben:
Weiter unten in den Einstellungen der Erweiterung empfehlen wir dringend, die Option „Portable MT5“ zu aktivieren.
Für die Syntaxhervorhebung müssen Sie die C/C++-Erweiterung für Visual Studio Code installieren.
Obwohl MQL5 zu C++ sehr ähnlich ist, enthält es leider bestimmte Sprachkonstrukte, die in Standard-C++ nicht verwendet werden. Infolgedessen kann die Erweiterung gelegentlich Syntaxfehler anzeigen, die im Kontext von MQL5 irrelevant sind.
Öffnen Sie nun den Datenordner MetaTrader5.forge/MQL5 in VSCode:
Versuchen Sie, die beliebige Datei eines Expert Advisors zu öffnen:
Die Syntaxhervorhebung funktioniert korrekt, und in der oberen rechten Ecke des Editorfensters werden jetzt zusätzliche Schaltflächen für die MQL5-Syntaxprüfung und Kompilierung über MetaEditor angezeigt. Alle #include-Direktiven erzeugen jedoch Fehlermeldungen. Dies geschieht, weil MQL5 nicht C++ ist und der Ort der Standardbibliotheks-Include-Dateien unterschiedlich ist. Um dies zu beheben, folgen Sie dem Lösungsvorschlag: Fügen Sie in den Einstellungen für die C/C++-Erweiterung für VSCode den Pfad zu MetaTrader5.forge/MQL5/Include hinzu.
Sobald dies geschehen ist, verschwinden die Fehlermeldungen und der Expert Advisor wird erfolgreich kompiliert:
An dieser Stelle werden wir VSCode vorübergehend beiseite legen, da der Hauptakteur nun die Bühne betritt: MQL5 Algo Forge.
Erstellen des Haupt-Repositorys
Gehen Sie zu https://forge.mql5.io/ und registrieren Sie entweder ein neues Konto oder melden Sie sich mit Ihren bestehenden MQL5.community-Anmeldedaten an:
Wählen Sie im Menü oben rechts „Neues Repository“.
Wählen Sie einen Namen für das Repository (z. B. mql5-main). Wenn Sie das Repository lokal klonen, können Sie einen beliebigen Namen für den Stammordner angeben, sodass der Name des Repositorys selbst nicht entscheidend ist. Fügen Sie während der Initialisierung die beiden Dateien .gitignore und README.md hinzu.
Das Repository ist nun erstellt. Die erste Übertragung wird automatisch durchgeführt:
Für die nächsten Schritte kopieren Sie die Repository-URL. In unserem Fall lautet sie: https://forge.mql5.io/antekov/mql5-main.git. Wir können nun vom Browser zu VSCode, MetaEditor und dem MetaTrader 5 Terminal zurückkehren.
Klonen des Repositorys
Um das Repository lokal zu klonen, benötigen wir einen leeren MQL5-Ordner im Terminalverzeichnis. Derzeit ist er bereits mit Dateien gefüllt, sodass wir wie folgt vorgehen müssen:
- Schließen Sie VSCode, MetaEditor und MetaTrader 5.
- Benennen Sie den vorhandenen Ordner MQL5 um (z. B. in MQL6).
Jetzt gibt es im Verzeichnis MetaTrader5.forge keinen Ordner MQL5.
Öffnen Sie diesen Ordner in VSCode und starten Sie das VSCode-Terminal mit der Tastenkombination [Strg + `].
Kopieren Sie die URL des Repositorys und führen Sie den Klon-Befehl aus, wobei Sie den Namen des Stammordners des lokalen Repositorys nach der URL angeben (er sollte mit MQL5 übereinstimmen):
git clone https://forge.mql5.io/antekov/mql5-main.git MQL5
Wenn das Repository privat ist und Sie es zum ersten Mal klonen, werden Sie aufgefordert, Ihre Anmeldedaten einzugeben. Als Ergebnis wird ein neuer MQL5-Unterordner im Terminalverzeichnis erscheinen, der .gitignore und README.md enthält.
Verschieben Sie nun alle Dateien und Ordner von MetaTrader5.forge/MQL6 nach MetaTrader5.forge/MQL5 und löschen Sie dann den alten Ordner MetaTrader5.forge/MQL6.
Öffnen Sie den Ordner MetaTrader5.forge/MQL5 in VSCode. Im linken Bereich der Versionsverwaltung sehen Sie, dass der Repository-Ordner eine große Anzahl neuer Dateien enthält (in unserem Fall 581):
Die meisten dieser Dateien sollten sich jedoch nicht in unserem Repository befinden, da sie zur Standardinstallation von MetaTrader 5 gehören. In neuen Versionen können sich der Inhalt und die Struktur dieser Standardbibliotheken und Beispielprojekte ändern. Wir können sie nicht ändern, ohne Konflikte bei der nächsten Aktualisierung des MetaTrader-Terminals oder beim Wechsel zu einem neuen Arbeitsordner zu riskieren. Daher gibt es keinen Grund, sie in unser Repository aufzunehmen.
Ignorierte Dateien konfigurieren
Genau an dieser Stelle wird die Datei .gitignore nützlich. Hier können wir angeben, welche Dateien und Verzeichnisse Git ignorieren soll. Auf diese Weise sehen wir statt Hunderter irrelevanter Änderungen nur die Änderungen in unseren eigenen Dateien. Da wir dem Repository noch keine nutzerdefinierten Dateien hinzugefügt haben, sollten alle derzeit aufgeführten Dateien ignoriert werden.
Öffnen Sie also .gitignore und ersetzen Sie den Standardinhalt durch etwas wie dieses:
# ---> MQL5 # VSCode Preferences .vscode/* # Executables *.ex5 # MQL5 Standard Files /Experts/Advisors/ /Experts/Examples/ /Experts/Free Robots/ /Experts/Market/ /Files/ /Images/ /Include/Arrays/ /Include/Canvas/ /Include/ChartObjects/ /Include/Charts/ /Include/Controls/ /Include/Expert/ /Include/Files/ /Include/Generic/ /Include/Graphics/ /Include/Indicators/ /Include/Math/ /Include/OpenCL/ /Include/Strings/ /Include/Tools/ /Include/Trade/ /Include/WinAPI/ /Include/MovingAverages.mqh /Include/Object.mqh /Include/StdLibErr.mqh /Include/VirtualKeys.mqh /Indicators/Examples/ /Indicators/Free Indicators/ /Libraries/ /Logs/ /Profiles/ /Scripts/Examples/ /Scripts/UnitTests/ /Services/ /Shared Projects/ /experts.dat /mql5.*
Auf diese Weise weisen Sie das Versionskontrollsystem an, VSCode-Einstellungsdateien, kompilierte Expert Advisor- und Indikatordateien (das Repository speichert in der Regel nur den Quellcode) und Standarddateien des MetaTrader 5, die sich in den aufgeführten Ordnern befinden, auszuschließen. Es wird nur Ihr eigener Quellcode verfolgt.
Änderungen festschreiben
Nach dem Speichern von .gitignore zeigt VSCode nur eine einzige geänderte Datei an - die .gitignore selbst. Alle anderen Dateien im MQL5-Ordner, der nun der Stammordner unseres Repositorys mql5-main ist, werden nun ignoriert, obwohl sie physisch vorhanden sind:
Führen Sie eine Übergabe im lokalen Repository durch, indem Sie eine Nachricht wie diese hinzufügen: „Add standard files to .gitignore“, und klicken Sie auf „Commit“.
Zu diesem Zeitpunkt existiert die Änderung nur im lokalen Repository. Um sie in das entfernte Repository zu verschieben, führen Sie den Befehl „Push“ aus. Dies kann auf verschiedene Arten geschehen, z.B. durch Anklicken von „Sync Changes“ in VSCode, durch Auswahl von „Push“ aus dem Überlaufmenü (...) neben CHANGES oder durch manuelle Ausführung des Befehls „git push“.
Bevor Sie jedoch mit dem letzten Commit hochladen, sollten Sie die Commit-Historie im GRAPH überprüfen. Sie sollten zwei Übertragungen sehen: „Initial commit“ und „Add standard files to .gitignore“. Der Name des Zweigs wird rechts neben den Übertragungen in Farbe angezeigt. Die erste Übergabe ist gekennzeichnet als origin/main und die zweite einfach als main. Eigentlich handelt es sich um denselben Zweig main. Hier ist origin ein Alias des entfernten Repositorys, sodass das Präfix origin/ bedeutet, dass diese Übergabe die letzte im Zweig main des Upstream-Repositorys ist. Die zweite Übergabe erscheint ohne dieses Präfix, sie existiert also nur im lokalen Repository und ist die letzte.
Drücken Sie „Sync Changes“:
Die Änderungen wurden nun erfolgreich in das entfernte Repository übertragen, und das lilafarbene Etikett „origin“ wurde auf die zweite Übergabe verschoben. Sie können dies bestätigen, indem Sie das Repository in der Weboberfläche anzeigen:
In diesem Stadium haben wir ein fast leeres Repository für unsere Arbeit vorbereitet. Der einzige Zweig namens main enthält zwei Dateien, die wir hinzugefügt haben. Alle anderen Dateien, die sich im Datenordner dieser Terminalinstanz befinden, werden vom Versionskontrollsystem ignoriert.
Erstellen eines Archivzweigs
Wie bereits erwähnt, besteht der erste Schritt darin, alle vorhandenen Dateien in einem Zweig zusammenzufassen, damit sie unter Versionskontrolle stehen und in das entfernte Repository übertragen werden können. So ist sichergestellt, dass wir sie später bei Bedarf auf jedem anderen Computer abrufen können.
Wie alle anderen Operationen im Versionskontrollsystem können Zweige auf unterschiedliche Weise erstellt werden. Öffnen Sie in VSCode das Repository-Menü (...). Wählen Sie dann „Checkout to...“.
Wählen Sie dann in der Liste der Aktionen „Create new branch...“.
Wechseln Sie in der Weboberfläche des entfernten Repositorys auf die Registerkarte Zweige und klicken Sie auf die Schaltfläche zum Erstellen eines neuen Zweigs (unten durch ein grünes Rechteck hervorgehoben):
Es gibt einen Unterschied zwischen diesen beiden Methoden. Im ersten Fall wird ein neuer Zweig auf dem lokalen Computer angelegt, und bis Sie Änderungen einspielen, weiß das entfernte Repository nichts über diesen Zweig. Die zweite Methode legt einen neuen Zweig im entfernten Repository an, sodass das lokale Repository nichts von der Existenz dieses Zweigs weiß, bis Sie die Änderungen mit dem Pull-Befehl abrufen. In jedem Fall müssen Sie nur die Synchronisierung durchführen, indem Sie die Befehle pull oder push ausführen).
Die dritte Möglichkeit ist die Verwendung der Befehlszeile. Um einen neuen Zweig mit dem Namen „archive“ in Ihrem lokalen Repository zu erstellen, können Sie z. B. den folgenden Befehl aus dem Repository-Ordner ausführen:
git checkout -b archive
Wenn Sie dies im integrierten Terminal von VSCode tun, sehen Sie folgendes:
Dieses Terminal informiert Sie darüber, dass das Repository in einen neu erstellten Zweig „archive“ gewechselt wurde. In der Commit-Liste wurde Name des Zweigs main in archive geändert. Das Änderungsprotokoll wird Sie auffordern, einen neuen Zweig in das entfernte Repository zu verschieben. Wir werden jedoch zunächst unsere Dateien zu diesem Zweig hinzufügen.
Wir hatten einen Anfangsordner mit dem MetaTrader-Terminal, der den MQL5-Ordner mit allen unseren Dateien enthielt. Das Repository wurde in einem anderen Terminalordner erstellt. Kopieren Sie nun alle Dateien aus dem alten ursprünglichen MetaTrader5/MQL5-Ordner in den Ordner des neuen Repositorys:
Das Versionskontrollsystem erkannte sofort neue Dateien im Repository-Ordner, und bestimmte Aktionen wurden für sie verfügbar. Sie müssen alle neuen Dateien in den Index aufnehmen (um die Versionskontrolle zu ermöglichen). Dies kann entweder über die VSCode-Schnittstelle erfolgen, indem Sie in der Kopfzeile der Änderungsliste „+“ (Stage All Changes) wählen, oder indem Sie den Befehl
„git add“ erteilen.
Jetzt ist jede Datei in der Liste der Änderungen mit A gekennzeichnet, was bedeutet, dass sie indiziert wurde, statt mit U. Als Nächstes übergeben Sie die Änderungen an das entfernte Repository:
Wie wir sehen können, ist der letzte Commit im Zweig main nun der zweite Commit, während der dritte Commit im Zweig archive gemacht wurde. Überprüfen wir, ob der neue Zweig in das entfernte Repository übertragen wurde:
Die letzte Übertragung ist im entfernten Repository sichtbar und gehört zum neuen Zweig archive. Klicken Sie darauf, um die spezifischen Änderungen zu sehen, die in diesem Commit enthalten sind.
Zu diesem Zeitpunkt sind alle Dateien erfolgreich zum Zweig archive hinzugefügt worden. Wechseln wir nun zurück zum Zweig main in unserem lokalen Repository.
Vorbereiten der Erstellung von Projektzweigen
Um zum Zweig main zu wechseln, führen Sie in der Konsole den folgenden Befehl aus
git checkout main
Das lokale Repository sollte in den Zustand zurückkehren, in dem es sich befand, bevor wir alle Dateien kopiert haben. Wenn Sie jedoch den Inhalt des Ordners MQL5 nach dem Wechsel untersuchen, werden Sie feststellen, dass viele unserer Ordner Expert Advisor erhalten bleiben.
Diese Ordner enthalten immer noch kompilierte .ex5-Dateien. Dies geschieht, weil Git diese Dateien nicht aus der Versionskontrolle ausschließt, wenn man vom Archivzweig zurück zum Hauptzweig wechselt. Nur die Quelldateien, die bereitgestellt und an das Repository übergeben wurden, wurden aus dem Ordner entfernt.
Das ist nicht sehr praktisch, also müssen wir die kompilierten Dateien und alle leeren Verzeichnisse, die nach dem Löschen übrig bleiben, entfernen. Dies manuell zu tun, wäre sehr zeitaufwändig, zumal wir es in Zukunft vielleicht wiederholen müssen. Daher ist es praktischer, ein einfaches Skript zu schreiben, das diese Aufgabe automatisch erledigt.
Bei der Entwicklung des Skripts wurde deutlich, dass das Löschen von Dateien allein nicht ausreicht, um den ursprünglichen Zustand des Stammordners nach dem Wechsel der Zweige wiederherzustellen. Es ist auch notwendig, Verzeichnisse zu entfernen, die nach dem Löschen von .ex5-Dateien leer geworden sind. Einige Ordner sind möglicherweise absichtlich leer und sollten nicht entfernt werden. Diese werden in eine Ausschlussliste aufgenommen. Diese Liste enthält alle Ordner, die zuvor in .gitignore aufgeführt waren, sowie den Ordner .git, der die Metadaten der Versionskontrolle enthält.
Hier ist ein Beispiel für ein solches Skript:
import os def delete_ex5_files_and_empty_dirs(path, excluded=['.git', '.vscode']): # Exceptions excluded = {os.path.join(path, dir) for dir in excluded} # Check all folders and files in the directory tree for root, dirs, files in os.walk(path, topdown=False): is_excluded = False for ex in excluded: if root.startswith(ex): is_excluded = True break if is_excluded: continue # Delete all files with extension .ex5 for file in files: if file.endswith('.ex5'): file_path = os.path.join(root, file) os.remove(file_path) print(f'File removed: {file_path}') # Delete all folders that have become empty after deleting files for dir in dirs: dir_path = os.path.join(root, dir) # IF the directory is empty after deleting files if dir_path not in excluded and not os.listdir(dir_path): try: os.rmdir(dir_path) print(f'Empty folder removed: {dir_path}') except OSError: pass # If error occurred, ignore excluded = [ '.git', '.vscode', 'Experts\\Advisors', 'Experts\\Examples', 'Experts\\Free Robots', 'Experts\\Market' 'Files', 'Images', 'Include\\Arrays', 'Include\\Canvas', 'Include\\ChartObjects', 'Include\\Charts', 'Include\\Controls', 'Include\\Expert', 'Include\\Files', 'Include\\Generic', 'Include\\Graphics', 'Include\\Indicators', 'Include\\Math', 'Include\\OpenCL', 'Include\\Strings', 'Include\\Tools', 'Include\\Trade', 'Include\\WinAPI', 'Indicators\\Examples', 'Indicators\\Free Indicators', 'Libraries', 'Logs', 'Presets', 'Profiles', 'Scripts\\Examples', 'Scripts\\UnitTests', 'Services', 'Shared Projects', ] if __name__ == '__main__': current_dir = os.getcwd() # Current working directory delete_ex5_files_and_empty_dirs(current_dir, excluded)
Speichern Sie dieses Skript als clean.py im Stammverzeichnis des Repositorys und fügen Sie es der Versionskontrolle im Hauptzweig hinzu. Von nun an führen Sie dieses Skript einfach aus, wenn Sie vom Archiv zurück zum Hauptverzeichnis wechseln, um automatisch kompilierte Dateien und leere Ordner zu bereinigen.
Schlussfolgerung
Hier schließen wir unsere ersten Versuche mit dem neuen Repository-System ab. Alle unsere Dateien wurden erfolgreich dorthin übertragen. Wir haben die Grundlagen für die Schaffung neuer Projektzweige für neue Projekte geschaffen. Da der Code sicher im Archivzweig gespeichert ist, können wir die Projekte bei Bedarf nach und nach in separate Zweige migrieren.
Ein interessanter nächster Schritt wird sein, ein öffentliches Repository für den Quellcode unserer Artikelserie „Developing a Multi-Currency Expert Advisor“ zu erstellen. Es ist noch unklar, wie der Code in den verschiedenen Teilen der Serie strukturiert werden soll, aber wir werden uns in naher Zukunft damit befassen.
Vielen Dank für Ihre Aufmerksamkeit! Bis bald!
Inhalt des Archivs
# | Name | Version | Beschreibung |
---|---|---|---|
MQL5 | Stammordner des Repositorys (Terminal-Datenordner) | ||
1 | .gitignore | 1.00. | Auflistung von Ordnern und Dateien, die vom Git-Versionskontrollsystem ignoriert werden sollen |
2 | clean.py | 1.00. | Skript zum Löschen von kompilierten Dateien und leeren Verzeichnissen beim Wechsel in den Hauptzweig des Repositorys |
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/17646
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Um ehrlich zu sein, wurde dieses Szenario nicht wirklich in Betracht gezogen. Ich weiß nicht, ob die Sperrung eines Benutzers im Forum jetzt den Zugang zum aktuellen MQL-Storage-Repository einschränkt und ob dies auch den Zugang zum neuen Repository einschränken wird. Wenn ja, ist dieser Risikofaktor sicherlich eine Überlegung wert.
Es ist schwierig, dies zu überprüfen - die Risikobewertung ist also theoretisch ;-), aber es besteht ein Risiko als solches
MQLStorage erfordert eine Anmeldung bei der Community. Die technische Möglichkeit des Logins liegt in den Händen der Admins. Theoretisch kann man bei schwerwiegenden Verstößen gegen die Regeln (oder jemandem, der das ernst meint) einen Hard Ban bekommen. Bei einem temporären Ban krode als nur "Niederlage in Rechten", das heißt es werden einfach Komponenten der Seite und einzelne Dienste gesperrt.
Aber es gibt auch virtuelle, Server, Rechenzentren, Netzwerke, die ban-po-ip verdient haben. MQLStorage ist dort höchstwahrscheinlich nicht verfügbar. Sie können es ohne persönliche Bemühungen und sogar nur durch dynamische ip bekommen :-)
Um solche Risiken zu minimieren - halten Sie vollständige Backups und einen unabhängigen Spiegel des Repositorys. Das ist ein weiteres Vergnügen...
Erstens: https: //forge.mql5.io/ hat zwei Autorisierungsmöglichkeiten. Sie können ein Konto völlig unabhängig von MQL5.com erstellen
Zweitens bedeutet ein Verbot im Forum nur ein Verbot des Postings und hat keine Auswirkungen auf andere Dienste.
Und drittens, was haben Verbote damit zu tun? Beteiligen Sie sich an der Entwicklung von Robotern, nicht an den Foren.
Erstens hat https://forge.mql5.io/ zwei Autorisierungsmöglichkeiten. Sie können ein Konto völlig unabhängig von MQL5.com erstellen
Aber wie kann man auf ME-Projekte zugreifen, wenn keine Abhängigkeit von mql5.com besteht? Es scheint obligatorisch zu sein, sich dort bei der Community anzumelden.
Und wie kann man dann von ME aus auf Projekte zugreifen, wenn es keine Abhängigkeit von mql5.com gibt? Es scheint notwendig zu sein, sich dort bei der Community anzumelden.
Oh, richtig. Das Konto wird sowieso in MQL5.com erstellt werden.
Und wie kann man dann von ME aus auf Projekte zugreifen, wenn es keine Abhängigkeit von mql5.com gibt? Es scheint notwendig zu sein, sich dort bei der Community anzumelden.
Sie müssen sich noch nicht bei der Community anmelden. Wenn Sie ein Repository aus einem beliebigen Repository, wie z.B. Algo Forge oder GitHub, in einen Ordner innerhalb des MQL5-Datenordners klonen, wird es nur als ein Ordner mit Dateien sichtbar sein. Dies ist ausreichend für die Bearbeitung, den Start und das Debugging, aber alle Operationen mit dem Repository müssen mit Tools von Drittanbietern durchgeführt werden. Ich habe diese Option für einige Zeit verwendet, während ME noch nicht mit Algo Forge arbeiten konnte. Aber im Allgemeinen ist es mit dem mql5.com-Konto einfacher.