2013-04-09 31 views
1

這是很常見的,當建設網站/應用到在構建過程中添加修訂標記某些文件胸圍緩存。例如,文件有什麼用哈希過的版本或日期轉速文件的優勢是什麼?

style.css
script.js

可能通過構建腳本被重新命名爲

58198123.style.css
87012174.script.js

通常應用程序使用的文件內容的MD5哈希修訂標記(例如:Ant構建腳本,Yeoman,Drupal)。我想知道是什麼使用哈希過的版本號,序列修訂,或日期字符串的好處是什麼?每個市場都要增添了些許人類可讀的信息保存到文件,我覺得愉快。我敢肯定,有很好的理由這樣做的散列方式,我只是還沒有看到任何明確描述。

+1

如果文件被修改,則更改將被撤消,散列將返回到先前的值,並且現有緩存將會有效。文件版本和日期沒有此屬性。哈希的另一個不錯的屬性是可以在不提交的情況下生成,這在測試本地更改時非常方便。 – 2013-04-09 04:32:26

回答

2

與@Raymond陳同意(評論你的問題上面),其中散列「還原」時變「恢復」,並且可以在不觸犯生成散列。然而,恕我直言,對於「版本」或「日期」的散列最重要的原因是爲了避免衝突,其中多個開發人員可能正在工作,但不共享「集中式服務器」來協調修訂版本號,更新或解決意外時間衝突。

例如:

  • 如果兩個開發商想使在同一時間的變化,更新「時間戳」是不明確的(但散列是不是)。

  • 如果兩個開發人員正在工作但不共享中央「版本號服務器」(例如,其中一個是「脫機」),則更新版本號是不明確的(因爲兩者都會聲稱下一個-version-number),但是散列不是不明確的。

的「分佈式」模式就是爲什麼GIT中/善變移到「哈希」,放棄了中央版本號服務器的需求。

在您的具體情況中,如果您是只有開發人員,您可能會認爲您不需要此「從分佈式更改調整」功能。然而,版本號會造成混亂/模糊的,當你叉/分支,然後合併。

Subversion通過單一遞增整個存儲庫來處理這個問題,但在您的用例中,您正在討論每個文件的版本號。以前的版本控制系統(如cvsrcssccs等)通過「加入」一個「計數」爲每個分支/合併處理的版本數上的每個文件。這些數字變得複雜,並且仍然使含糊不清。例如,在倉庫的一個文件可以像2.3.27一個版本,另一個可能有3.2,另一個可能在同一時間26,同時每個版本可能是「有效的」在不同的單個文件該文件的不同分支上的歷史部分(它得到了混亂)。例如,2.4.12.37.2如果MyFileA.txt被分支/合併了很多,並且它意味着什麼,如果兩個文件意外地具有相同的版本26(對於一個文件,它是多年前20個分支/合併之前和另一個文件,這是當前版本)。

+0

完美的解釋。我完全錯過了多個開發人員的觀點(這很奇怪,因爲我使用git並貢獻了大量的開源項目)。 <3堆棧溢出。 – RobW 2013-04-09 18:51:56