2015-06-04 70 views
1

我需要在master~2myfile版本和存儲庫本身之外存在的myfile副本(比如D:\folder\myfile)之間做差異。git可以在回購文件和外部(非回購)文件之間做一個差異?

--no-indexgit-diff的措辭說:

git的差異--no指數[--options] [ - ] [...]

這種形式是給定的兩條路徑比較在文件系統上。運行命令時處於工作 樹由Git的控制,則可以省略--no索引選項和路徑至少一個外點 工作樹

的措辭「至少一個」似乎暗示比較可以一個回購文件和一個非回購文件之間進行,但在實踐中:

$ git diff master~2:myfile D:/folder/myfile 
error: Could not access: 'master~2:myfile' 

$ git diff master~2:myfile -- D:/folder/myfile 
fatal: D:/folder/myfile: 'D:/folder/myfile' is outside repository 

$ git diff --no-index master~2:myfile -- D:/folder/myfile 
usage: git diff --no-index <path> <path> 

什麼是實現這種比較最簡單的方法?

+0

你'高手〜2:myfile'不符合給定的「規定的標準*文件系統上的兩條路徑*「。我相信這是想說明你可以做'git diff myfile/path/to/otherfile',其中一個文件在你的工作目錄中,一個不在,不是它們中的一個可以是需要的一般blob refspec從你的對象存儲中拉出來...... – twalberg

+0

啊,這很有道理,謝謝@twalberg。仔細閱讀課程。 – sundar

回答

0

不使用git-diff,我找到了實現這一目標的一種間接的方式 - 在this blog post給出的方法,只是用外部文件作爲最初的「當前文件」,並確保有回購目錄前做當前目錄git show

涉及的步驟是:

  1. 打開Vim的外部非回購文件通常的方式
  2. 做一個:vsp new垂直分割出一個新(空白)窗口
  3. :cd工作目錄的git倉庫
  4. :read !git show master~2:myfile閱讀myfile的內容,因爲它是2提交以前
  5. setf yourfiletypehere for syntax highl ighting(可選)
  6. 在一個窗口:diffthis,然後切換到另一個窗口,然後再次運行:diffthis,你有你的差異