2015-09-01 35 views
4

我在.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/srcsome_other_subdir/Base.cpp參數我得到以下結果跑我的別名
  • 注意pwd git的別名內將返回root_dir
+0

不太確定這一點。但是,你可以嘗試將'diff-between'別名改成這樣的東西嗎? (git merge-base $ 2 $ 1)$ 2 - $(git rev-parse --show-toplevel)\/$ 3;}; h「' –

+0

@ kucing_terbang'$(git rev-parse --show-toplevel)'這將顯示根目錄的絕對路徑,它很容易得到通過'$(pwd)',因爲這將是執行命令的目錄。 – Patryk

+0

aaa。好吧,我想我對你想要的東西感到困惑。 –

回答

5

Git別名通常在當前目錄中執行。除了在shell中執行的git別名(以!開頭)。如果啓動一個shell,那麼shell的工作目錄將是存儲庫的根目錄。

使用${GIT_PREFIX:-./}變量。它將解析爲當前目錄的絕對存儲庫路徑。

diff-between = "!h() { git diff $(git merge-base $2 $1) $2 -- ${GIT_PREFIX:-./}$3 ; }; h" 
+0

你的先生是一個真正的天才:)你從哪裏得到有關'變量'的信息? – Patryk

+1

從發行說明...;)請參閱https://github.com/git/git/blob/77bd3ea9f54f1584147b594abc04c26ca516d987/Documentation/RelNotes/1.7.6.txt#L29-L31 –

+0

但您也可以使用git命令' git rev-parse --show-prefix' –

相關問題