2014-09-24 20 views
0

我正在嘗試編寫一個git鉤子,它在推送到服務器時對文件運行語法檢查。如何過濾git日誌以僅顯示已修改但未刪除的不同文件名?

我已經成功示出了使用

git的日誌--name-僅--pretty =格式的日誌與文件名: '%H' --diff濾波器= AM

這使我在日誌中的格式如下:

\ < \ SHA-1>

路徑/到/文件

路徑/到/文件2

...

這會給我只已添加或修改的文件。

我想更進一步藉此,並具有滿足以下每個條件的日誌:

  1. 可見,未被刪除在以後提交所有修改過的文件。例如,我修改一個文件並在稍後提交它,然後我將該文件提交給該文件並進行提交。日誌輸出不應該顯示該文件,因爲它在稍後的提交中被刪除
  2. 顯示所有尚未刪除的已創建文件。例如)我添加一個文件並提交它,然後在以後提交我gm rm該文件。日誌輸出不應顯示該文件,因爲它在稍後的提交中被刪除。
  3. 僅在最新的提交中顯示已修改的文件。例如)我修改一個文件並提交它。我再次修改文件並提交。日誌輸出應該只顯示最近提交的文件。

我該如何在沒有代碼的情況下做到這一點?即)使用git或git和常用unix命令的組合的命令行解決方案。

回答

0

如果你想因爲給定的修訂rev添加或修改的文件列表,

git diff --name-only --diff-filter=AM $rev.. 

應該足夠了。

如果您確實需要知道導入每個文件更改的最新非合併提交,則類似於以下內容的某些操作可能會起作用,但速度會非常慢。

for rev in $(git rev-list --min-parents=1 --max-parents=1 HEAD); do 
    echo $rev 
    for file in $(git diff --name-only $rev^..$rev); do 
     [ -z "$(git log -1 $rev.. -- $file)" ] && echo "$file" 
    done 
    echo 
done 
相關問題