我在.gitconfig
以下別名:如何通過參數獲取git別名中的文件相對路徑?
[alias]
lg = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
log-between = "!f() { git lgl `git merge-base $2 $1`..$2 -- $3 ; }; f"
log-between-p = "!g() { git lgl -p $(git merge-base $2 $1)..$2 -- $3 ; }; g"
diff-between = "!h() { echo $(pwd); git diff $(git merge-base $2 $1) $2 -- $3 ; }; h"
雖然在大多數問題出現時,我想獲得一個日誌文件(或路徑)的情況下工作正常傳遞第三參數($3
)之間的差異。
的問題是,該命令(h
在這個例子中)在這個倉庫的根目錄下執行(這就是爲什麼我添加pwd
打印檢查),我傳遞的文件名或路徑一個名字,但並不總是絕對路徑。
E.g.
當我運行這個別名(添加命令打印以便檢查什麼命令將擴大):
diff-between = "!h() { echo $(pwd); echo "git diff $(git merge-base $2 $1) $2 -- $3" ; }; h"
repo_root_dir/src/
下,像這樣:
git diff-between origin/master my_branch
我會得到:
git diff 66efa91ba8c74aa624d05d9ec0b13cc93cbfb6d3 my_branch --
這很好。但是,當我運行這個像這樣(與文件):
git diff-between origin/master my_branch some_other_subdir/src/Base.cpp
我會得到:
git diff 66efa91ba8c74aa624d05d9ec0b13cc93cbfb6d3 my_branch -- some_other_subdir/src/Base.cpp
無論在哪裏,這個命令已經從(注意運行:一定要記住這從該回購的ROOT_DIR)運行
如何正確地得到當前目錄使:
- 有文件
root_dir/src/some_other_subdir/Base.cpp
- 當我在
root_dir/src
與some_other_subdir/Base.cpp
參數我得到以下結果跑我的別名 - 注意:
pwd
git的別名內將返回root_dir
不太確定這一點。但是,你可以嘗試將'diff-between'別名改成這樣的東西嗎? (git merge-base $ 2 $ 1)$ 2 - $(git rev-parse --show-toplevel)\/$ 3;}; h「' –
@ kucing_terbang'$(git rev-parse --show-toplevel)'這將顯示根目錄的絕對路徑,它很容易得到通過'$(pwd)',因爲這將是執行命令的目錄。 – Patryk
aaa。好吧,我想我對你想要的東西感到困惑。 –