2011-12-08 29 views
29

我有一個資料庫,其中:當「hg diff -g」沒有時,爲什麼「hg status」顯示更改的文件? (一位家長)

> hg st 

表明,我的工作目錄中有一些未提交的更改,而

> hg diff 


> hg diff -g 


> hg diff --git 

就什麼都不顯示。

我讀到這裏:4.10. hg status shows changed files but hg diff doesn't!如下:

汞柱狀態報告時,文件的內容或標誌已經相對於父母任何一方改變。 hg diff只報告相對於第一個父母的已更改內容。您可以通過--git選項查看標誌信息,以便使用-r選項相對於另一個父項的hg diff和delta。

但是,如果我運行hg parents它只顯示一個父(提示)。正如我上面提到的,我也嘗試過hg diff --git,它仍然不顯示任何內容。

注:以上

  • 的Mercurial 2.0.1版
  • hg status只顯示旁邊的一個普通文件M
  • hg diffhg diff -g什麼也沒有打印
  • 文件系統是NFS。
  • hg parents打印只有一個父
+1

hg狀態的輸出是什麼? – pyfunc

+1

您是否曾嘗試在發佈的文檔中運行'hg diff --git'? – krtek

+0

hg狀態顯示的不僅僅是未提交的更改,它顯示了未更改的文件,屬性,未被Mercurial跟蹤的文件的存在等.hg diff將顯示已更改的內容。 – pyfunc

回答

17

Mercurial in daily use (Mercurial: the definitive guide)一些摘錄(在這裏複製,因爲似乎沒有辦法給出一個方便易鏈接到頁面的結尾):

默認輸出的hg diff命令是向後兼容與常規diff命令,但這有一些缺點。

上面的hg diff的輸出掩蓋了一個事實,即我們只是簡單地將文件重命名爲。 hg diff命令接受選項--git-g,以使用更新的diff格式,以更易讀的形式顯示此類信息。

這個選項也有助於解決一個可能會令人困惑的情況:一個文件似乎根據hg status修改,但是其中hg diff什麼也不打印。如果我們更改文件的執行權限,則會出現這種情況。

正常diff命令不關注文件權限,這就是爲什麼hg diff默認情況下不打印任何東西。如果我們提供-g選項,它會告訴我們究竟發生了什麼。

總而言之,hg diff命令缺少關於更改的幾種信息:屬性,權限,文件名等。即使您有單個父母,這些更改也可能存在。並且hg status正確考慮了所有更改。要查看發生了什麼,請使用hg diff -g。這是「發生了什麼」問題的答案。

似乎向後兼容性是'爲什麼'。我不確定,但我認爲'普通差異'是一些普遍的或內置的Unix/Linux工具(從hg和git都來自這個世界的事實來判斷)。

+0

我只是再次遇到這個錯誤。 'hg diff'和'hg diff -g'什麼也不打印。 'hg st'顯示一個修改後的文件(它旁邊的「M」)。 –

+1

@intrpc「hg parents」是否只打印一個父母?如果打印2,則表示已合併,並且文件可能已在兩個分支中進行了修改,但在合併時相同。或者,您可能只是相對於第二個父級發生了更改,而「diff」只能相對於第一個父級發揮作用。 –

+0

「父母」只能打印一位家長。我也升級到了最新的Hg版本(並相應地更新了操作系統)。 –

3

如果你有ignorewsignoreblanklines.hgrc組則hg status將顯示它作爲改變,但hg diff不會(假設的變化當然是只有空白)。

+0

@intrpc你檢查過了嗎? –

+0

是的。在OS 10.6上通過自制軟件安裝mercurial 1.8。 'hg diff'甚至有返回狀態0. –

+0

對不起,伊萬,我不是說你沒有。我問@intrpc(OP)是否檢查過這種情況。 :) –

3

在我的情況下,有些事情是與HG打破。 (相同的權限和hg diff -g不顯示任何內容)。 我旁邊的方式固定的問題:

  1. 我在單獨的文件夾再次克隆庫
  2. 我刪除了一切,從這個文件夾中,除了.hg
  3. 我從移動舊(壞)把一切的除了.hg新地方

所以在這一步後,我有存儲庫克隆與當前版本的mercurial +完全相同的文件。

後這個步驟我收到相同的(空的)結果命令:hg sthg diff -g

+0

事實上,[RPM](https://stackoverflow.com/users/327386/rpm)的建議已經可行 - 刪除有問題的文件並恢復更改,不需要新的克隆。 –

2

我只是刪除了部分呈修改(make如果需要備份)由此引起的一切文件,以顯示與文件一個!在它旁邊,當我跑

hg st 

之後,我運行以下命令來恢復文件(這已經簽入):

hg revert --all --no-backup 

,並且解決了這一問題

+1

這對我來說很有用,比再次克隆整個回購更容易。 –

0

在這些我發現這個命令可以解決任何問題:

hg debugrebuilddirstate 

hg debugrebuilddirstate -r tip 

它輕輕地記錄在help documentation,但基本上我相信,它會清除了「dirstate」文件,該文件緩存有關工作,目錄中的文件信息。下次你hg stat它會從頭開始刷新它。

一個忠告:如果你添加或刪除文件,當dirstate重建的信息將會丟失。

相關問題