是否可以在不知道需要走多遠的情況下 cd 到目錄樹中的祖先?

是否可以在不知道需要走多遠的情況下 cd 到目錄樹中的祖先?

我正在編寫一個腳本來自動添加、提交和推送對我的子模組和存儲庫的更改。有些子模組比其他子模組嵌套得更遠,我需要 cd 回到儲存庫的根目錄。我沒有使用該git submodule foreach模式,因為其他子模組中可能存在我不想從我正在處理的分支提交給它們的更改(快速測試)。我在超級倉庫中為每個子模組設置了一個分支,方便地命名,以便使用 cd 與它一起移動到倉庫。

我發現這個問題其中包含與建立和/或別名函數以 cd 向上 n 層相關的答案。我可以做這樣的事情,因為我已經為其他操作提供了一些別名函數,但它需要為每個目錄或不同的腳本使用不同的函數,因此在不同級別的 Git 擴充中需要不同的熱鍵。

我正在使用 Git 擴充功能來管理我的儲存庫,它在其設定中提供了一個腳本介面。我目前在 .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"

相關內容