2016-10-22 90 views
1

我有一個項目中的更改日誌文本文件。我想從兩個標籤之間的文件中獲得更改列表。我製備此命令:如何使用git diff找到添加的行(未更改)?

git diff tag1..tag2 file | grep -v -e "+++ b/file" -e "@@" | grep "+" 

作爲輸出I接收標記爲添加(與+開始)的所有行。但是他們之間可能存在一些早些時候存在的線條,但是在所提及的標籤之間進行了修改(例如糾正拼寫錯誤)。是否有任何選項只允許過濾新行或僅修改行?或者,也許有任何選項可以控制輸出中打印行修改的百分比條件?

+0

據我所知,git將行標記爲已刪除的舊行並將其添加爲新行。沒有「改變」線指示器。雖然,你可以看到哪些刪除和添加的行在同一行號上。 – Imaginaroom

+0

聽起來很棘手。對於在文件中移動但未更改的行,您希望發生什麼? – melpomene

+0

該行將在文件中的不同位置,所以我會將它們視爲新行。 – Yama

回答

0

不幸的是我找不到任何令人滿意的答案(這裏也沒有其他地方),所以我不得不自己編寫必要的腳本。

0

Git本身並沒有這樣做,如果你關心語義而不是簡單的語法,它總的來說是一個難題。不過,Git會附帶一個名爲diff-highlight的後期處理過濾器。這個Perl腳本中的代碼可以進行你感興趣的語法分析,所以可以修改它來產生你想要的。

請參閱https://github.com/git/git/tree/master/contrib/diff-highlight來源diff diff-highlight。閱讀README以查看他們關於這種分析涉及的語義問題的筆記。請注意,as of Git version 2.9,突出顯示腳本與Git的其餘部分一起安裝,因此您不必將其從貢獻源區域中撈出。

相關問題