2016-12-16 54 views
1

這似乎是一個非常簡單的問題,與an answer here,但它不是相當我正在尋找的答案。如何使用相對路徑查看兩次提交之間的所有更改文件?

這裏的故事:

我做了我的大部分發展在其上合併develop當工作完成功能分支。合併之前&刪除功能分支,我喜歡查看我所做的。爲了得到我需要閱讀的文件列表,我這樣做:

git --no-pager diff --name-only develop..HEAD 

所以,舉例來說,我可能會看到這樣的事情:

file1.js 
path1/file2.js 
path1/file3.js 

這告訴我,我已對這些文件進行了更改,我需要在&中查看它們。

問題是這些文件路徑都是相對於存儲庫的根目錄的。我喜歡做以下我的編輯器中打開所有相關的文件:

git --no-pager diff --name-only develop..HEAD | xargs atom 

如果我在庫的根目前是,這將打開的所有文件在原子不同的標籤,準備好我審查他們。但是,如果我碰巧在不同的目錄中(例如,如果我cd編輯成path1做某事),我得到一堆空白選項卡,因爲​​嘗試打開不存在的文件。在開始審查之前,我必須記住cd回到存儲庫的根目錄。

今天早上太激怒了我一次,所以我去尋找解決方案。我發現the answer cited above這表明添加--relative選項命令,就像這樣:

git --no-pager diff --relative --name-only develop..HEAD 

這種類型的作品,但它只是給我的文件,在或者我在庫的目錄下。因此,在上面的例子,如果我cd編入path1,我會看到:

file2.js 
file3.js 

我真的很想看到的是:

../file1.js 
file2.js 
file3.js 

這將讓我管它到​​並打開所有文件。

我看過了diff命令git help文檔和--relative標誌確實允許你指定一個路徑,但它也排除了路徑之外的文件。

短寫一個很長的命令行這樣的:

pushd "$(git rev-parse --show-toplevel)" >/dev/null \ 
    && git --no-pager diff --name-only develop..HEAD | xargs atom \ 
    && popd > /dev/null 

是否有一種方式來獲得兩次提交之間改變與相對於當前目錄的路徑中的所有文件的清單?

回答

0

沒有什麼內置Git來做到這一點,但編寫腳本或別名很容易。

請注意,git rev-parse --show-cdup顯示爲../ -es的字符串,將添加到目前的目錄中以達到頂層。如果您已經在頂層,結果是空的。因此:

git diff --name-only "[email protected]" | sed -e "s,^,$(git rev-parse --show-cdup)," 

讓你足夠接近,如果你不介意../sub/file.js產生時,它可能只是說file.js。如果你記住,多一個-e表達式可以修復:替換../../$whereIam/什麼也沒有,填寫git rev-parse --show-toplevelpwd之間的差異$whereIam變量。

+0

謝謝!這比我正在做的混亂的'pushd' /'popd'洗牌要好得多。 – Kryten

相關問題