Ist es möglich, zu einem Vorgänger innerhalb eines Verzeichnisbaums zu wechseln, ohne zu wissen, wie weit ich nach oben gehen muss?

Ist es möglich, zu einem Vorgänger innerhalb eines Verzeichnisbaums zu wechseln, ohne zu wissen, wie weit ich nach oben gehen muss?

Ich schreibe ein Skript, um das Hinzufügen, Übernehmen und Übertragen von Änderungen an meinem Untermodul und meinem Repository zu automatisieren. Einige Untermodule sind weiter verschachtelt als andere, und ich muss per CD zurück zum Stamm des Repositorys wechseln. Ich verwende das git submodule foreachMuster nicht, da es in anderen Untermodulen möglicherweise Änderungen gibt, die ich aus dem Zweig, an dem ich arbeite, nicht an sie übertragen möchte (ein kurzer Test). Ich habe für jedes Untermodul einen Zweig im Super-Repository eingerichtet, der praktischerweise so benannt ist, dass man per CD zum Repository zurückwechseln kann.

ich fanddiese Fragedas Antworten enthält, die sich auf das Erstellen und/oder Aliasing einer Funktion zum CD-Up auf n Ebenen beziehen. Ich könnte so etwas tun, da ich bereits einige Aliasing-Funktionen für andere Aktionen habe, aber es würde für jedes Verzeichnis eine andere Funktion oder ein anderes Skript erfordern, also einen anderen Hotkey in Git Extensions, das sich auf einer anderen Ebene befindet.

Ich verwende Git Extensions zur Verwaltung meines Repos und es bietet in seinen Einstellungen eine Skriptschnittstelle. Meine aktuelle Funktion unter dem Alias ​​in der .git/config:

applyupdate = "!f() { \
                      cd \"$1\"/;\
                      git add .;\
                      git commit -m \"$2\";\
                      git push;\
                      cd ..;\ #####this needs to be n levels
                      git add \"$1\";\
                      git commit -m \"$2\";\
                      git push;\
                    }; f"

Dies wird in der Git-Erweiterung über einen Hotkey ausgeführt, der es mit den folgenden Argumenten ausführt:

applyupdate {cBrnach} {{UserInput}}

wo {cBranch}wird der aktive Zweig sein, oder es wird nach einem Zweig gefragt, wenn mehrere auf demselben Commit im Diagramm liegen,
und {{UserInput}}es wird ein Dialogfeld zum Einfügen einer zitierten Commit-Nachricht angezeigt.

Kann cd n-levelsdies mit einer einzigen Funktion und auf eine Weise erledigt werden, bei der ich nicht eingeben muss, wie viele Ebenen ich nach oben muss? Ich glaube nicht, dass die {UserInput}Option in Git Extensions mit mehreren Eingaben funktioniert.

Antwort1

Dank anArkadiusz Drabczykfür die Erwähnung git rev-parse --show-toplevel.
Das Ändern des Skripts wie folgt funktioniert bei mir:

applyupdate = "!f() { \
                      cd \"$1\"/;\
                      git add .;\
                      git commit -m \"$2\";\
                      git push;\
                      cd ..;\ #this gets me out of the submodule
                      cd \"$(git rev-parse --show-toplevel)\";\ #this return to super-repo's root
                      git add \"$1\";\
                      git commit -m \"$2\";\
                      git push;\
                    }; f"

verwandte Informationen