2016-09-02 1 views
-1

Also, im Grunde habe ich 2 Versionen eines Projekts, und für einige Benutzer möchte ich die neueste Version verwenden, während für andere ich ältere Version verwenden möchte . Beide haben die gleichen Dateinamen und mehrere Benutzer verwenden sie gleichzeitig. Um dies zu erreichen, möchte ich die Funktion von einem anderen Git-Zweig aufrufen, ohne tatsächlich den Zweig zu wechseln. Gibt es einen Weg, dies zu tun?Call-Python-Code von anderen Git-Zweig als das aktuelle Repository ohne Switch-Zweig

für zB, wenn mein aktueller Zweig ist v1 und der andere Zweig ist v2; je nach Wert der Variablen flag, rufen Sie die Funktion

if flag == 1: 
    # import function f1() from branch v2 
    return f1() 
else: 
    # use current branch v1 
+2

Es kann hilfreich sein, wenn Sie erklären können, warum Sie dies z. warum Sie nicht den gesamten Code haben können, den Sie für einen Zweig benötigen. Dies scheint ein XY-Problem zu sein. http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

+0

@TomDalton Ich habe die Frage aktualisiert, um die Details zu erklären – proprius

+0

Warum ist diese Frage downvoted? – proprius

Antwort

1

Ohne auf zu kommentieren, warum Sie tun müssen, dass Sie einfach Ihre Repo zweimal Prüfung können: einmal für branch1 und eine für branch2 (ohne zweimal Klonen).
Siehe "git working on two branches simultaneously".

Anschließend können Sie Ihr Skript sich seiner Strompfad (/path/to/branch1) und relativen Pfad zu dem anderen Zweig (../branch2/...)

+0

Ich kann das nicht tun, weil der Code parallel von mehreren Benutzern verwendet wird. Wenn ich den Zweig wechsle, könnten Benutzer, für die Flag nicht 1 ist, auch das Ergebnis von v2-Zweig bekommen – proprius

+1

@proprius meine Antwort ist bout * not * den Zweig wechseln.Die zwei Zweige sind schon da. Wenn Ihr Code es kennt, ist keine Verzweigung erforderlich. – VonC

0

Sie Muss machen beide Versionen des Codes vorhanden/zugänglich, um aufzurufen beide Versionen des Codes dynamisch.

Der bei weitem einfachste Weg, dies zu erreichen, ist, beide Versionen des Codes an verschiedenen Orten zu haben, wie in VonC's answer.

Da Python ist, was es ist, aber Sie könnte dynamisch bestimmte Versionen von bestimmten Quelldateien extrahieren, kompilieren sie on the fly (dynamische Importe und temporäre Dateien verwenden oder exec und interne Strings) und damit Code ausführen das zeigt sich nicht in zufälliger Durchsicht der Programmquelle. I nicht ermutigen diesen Ansatz: es ist schwierig (wenn auch nicht sehr schwierig) und fehleranfällig, neigt zu Sicherheitslücken, und ist insgesamt eine schreckliche Art zu arbeiten, es sei denn, Sie schreiben etwas wie ein Python-Debugger oder IDE. Aber wenn das ist, was Sie tun wollen, zerlegen Sie einfach das Problem in:

  • untersuchen und/oder extrahieren, bestimmte Dateien von bestimmten Commits (git show, git cat-file -p, etc.), und
  • dynamisch laden oder ausführen Code aus der Datei im Dateisystem oder aus der Zeichenfolge im Speicher.

Das erste ist ein Git-Programmierung Übung (und ist ziemlich trivial, git show 1234567:foo.py oder git show branch:foo.py: Sie können die Ausgabe in eine Datei umleiten kann entweder Shell-Umleitung oder Python subprocess-Modul), und wenn sie mit Dateien gemacht, der zweite eine Python-Programmierübung mittlerer Schwierigkeit: siehe the documentation, wobei besonders auf importlib zu achten ist.

Verwandte Themen