どのくらい上まで移動する必要があるかがわからなくても、ディレクトリ ツリー内の祖先に cd することは可能ですか?

どのくらい上まで移動する必要があるかがわからなくても、ディレクトリ ツリー内の祖先に cd することは可能ですか?

サブモジュールとリポジトリへの変更の追加、コミット、プッシュを自動化するスクリプトを作成しています。一部のサブモジュールは他のサブモジュールよりも深くネストされており、リポジトリのルートまで cd で戻る必要があります。git submodule foreachパターンを使用していないのは、作業中のブランチからコミットしたくない変更が他のサブモジュールにある可能性があるためです (簡単なテスト)。スーパーリポジトリにサブモジュールごとにブランチを設定しており、cd を使用するとリポジトリに移動するように便利な名前を付けています。

私は見つけたこの質問これには、n レベルを cd アップする関数の作成やエイリアス化に関連する回答があります。他のアクション用のエイリアス関数がすでにいくつかあるため、このような操作を実行できますが、異なるレベルの Git 拡張機能では、ディレクトリごとに異なる関数、または異なるスクリプト (したがって異なるホットキー) が必要になります。

私はリポジトリの管理に Git Extensions を使用しており、設定でスクリプト インターフェイスが提供されています。.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"

これは、次の引数で実行するホットキーを介して Git 拡張機能で実行されます。

applyupdate {cBrnach} {{UserInput}}

アクティブなブランチはどこに{cBranch}なりますか。グラフ内の同じコミットに複数のブランチがある場合は、ブランチを要求し
{{UserInput}}引用されたコミット メッセージを挿入するためのダイアログを表示します。

cd n-levels単一の関数で、何レベル上に行く必要があるかを入力する必要がない方法で実行できますか? {UserInput}Git 拡張機能のオプションは、複数の入力では機能しないと思います。

答え1

感謝アルカディウシュ・ドラブチク言及していただきありがとうございますgit rev-parse --show-toplevel
スクリプトを次のように変更するとうまくいきます:

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"

関連情報