2015-05-19 76 views
1

我正在嘗試構建文件的逐行歷史記錄,並且在使用--word-diff模式時我得到了奇怪的行爲git diff/git log ...命令。它有時會合並一些行。獲取有關git word-diff合併行的信息

例如,如果舊版本文件的是:

r = ioctl(hdev->control, VHOST_SET_LOG_BASE, 
    (uint64_t)(unsigned long)hdev->log); 

其轉換爲:

r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE, hdev->log); 

(這些線是從this項目,GPL許可證下發布)

簡單git diff給我正常輸出(刪除了2行,添加了1行),但是git diff --word-diff給了我這個:

r = [-ioctl(hdev->control,-]{+hdev->vhost_ops->vhost_call(hdev,+} 
    VHOST_SET_LOG_BASE, [-(uint64_t)(unsigned long)hdev->log);-]{hdev->log);} 

相同的輸出將在--word-diff=porcelain模式下發出,它不是文本模式的錯誤。

由於我試圖獲得文件的在線歷史記錄,我的方法在這段git log上失敗。我看到git實際上向我展示了最好的人類可讀的差異,因爲編輯後的兩行成爲一行,但對於腳本來說並不明顯。所以,

  • 這是行爲的目的? (git 1.9.1)
  • 如果是這樣,是否有辦法獲得關於這些合併的一些額外輸出(以及如果存在,unmerges)?它不是,如何以其他方式找到它們?

回答

0

這看起來像--word-diff應該做的。 Git將文件分割爲單詞(用「」作爲分隔符)並顯示最小的塊。你可以看到你的線條總是在空間上分割。

嘗試使用帶末端字符的--word-diff-regex=<regex>

關於合併信息:git blame可能是有用的。

+0

http://www.git-scm.com/docs/git-diff –

+0

你的意思是把「[:space:] + \ n」當成一個單詞嗎?據我所知,\ n被忽略作爲一個單詞的一部分。 –

+0

我的意思是將「[:space:] + \ n」作爲單詞分隔符。所以你的文件的字符串將成爲git的「單詞」。 –