2016-08-19 103 views
0

我使用hg forget <files>來解開一些文件,而不會像使用hg rm <files>那樣從我的文件系統中刪除它們。我承諾進行更改並運行hg status按預期將這些文件列爲未跟蹤? <files>。然後我將變更集推送到我們的遠程存儲庫,其他人將其拉出並更新,mercurial從文件系統中刪除這些文件!未刪除文件而不刪除文件和其他文件系統?

爲什麼Mercurial不會將這些文件識別爲與其他人的存儲庫副本上的hg forget未跟蹤,就像它在更改產生的副本中所做的一樣?

他們的另一種方法是在未從任何人的文件系統中刪除文件的情況下解除對文件的跟蹤?

回答

0

雙方Git和水銀有同樣的問題在這裏:你有一些承諾Ø(舊的),其中有一個文件˚F。現在您從O更新爲新承諾N,其中顯示「沒有文件F」。

版本控制系統應該做什麼?那麼,這取決於爲什麼F被刪除,不是嗎?如果我們刪除F因爲之前使用過,但現在無用的混亂,它應該刪除應該

那麼,爲什麼要刪除no-longer-used正確,但保持accidentally-committed也正確?又應該如何在VCS知道這兩個的意思,因爲所有能看到的是,提交Ø既有no-longer-usedaccidentally-committed,同時提交ň既沒有文件?

(無論是Git的水銀,也有很好的答案,因爲據我所知)。

+0

是不具有'汞rm'和'汞forget'告訴它你需要它的點做既然不知道?在我的情況下,我正在追蹤那些我認爲是每個人本地開發環境都獨一無二的文件。 – Kevin

+0

不幸的是,'hg rm'和'hg forget'之間的唯一區別在於後者只在工作樹中保留文件。我已經嘗試過(關閉,不要太認真)爲Git提供一個語義定義,以便在'.gitignore'(與.hgignore相同的想法)中標記文件爲「不是版本化的,而是珍貴的「(所以不要刪除它),但沒有提出我喜歡的語義,更不用說真正的實現。 – torek

+0

我是編程和VCS的新手,所以這個討論可能有點超出我的理解,但我想我不明白他們爲什麼不能跟蹤使用什麼命令來解析文件,並且至少警告人們他們拉改變。當您拉動並嘗試更新未在本地跟蹤的更改時會出現警告;我認爲你必須在更新之前開始跟蹤這些文件,所以爲什麼不提醒你現在跟蹤的文件未被跟蹤,並提供選項以便在更新之前在本地解除它們,以便它們不會被刪除或強制更新,因爲知道這些文件會被刪除? – Kevin