我正在Github上托管一个OSS项目,它有几个不同的开发人员。此项目是一个使用AppCache通知浏览器哪些文件应脱机可用的Web应用程序。
一旦缓存中的文件更改为使缓存失效并强制浏览器重新加载所有文件,则需要更新AppCache文件的性质(例如,我们在注释中使用时间戳)。
当人们现在在不同的开发分支上工作时,他们正在用每个提交更新appcache中的时间戳。
现在的问题是,这将导致阻止自动合并的冲突。
如何解决这一问题,使未来不再发生冲突?
其他开发团队在相同的情况下做什么?
使用cvs,我可以用$id$替换时间戳,让程序自动处理它…
最佳答案
我有大量使用由Rails堆栈提供的AppCache支持的应用程序的经验。
我发现到目前为止最简单的事情是不要将您的版本硬编码到AppCache中。您应该动态生成文件,并通过编程为版本生成唯一的值。理想情况下,没有人应该对清单本身进行更改,他们应该对编程生成文件的输入进行更改。
这对AppCache来说不是唯一的。如果您发现实际上每次提交都需要修改某一行,那么您可能不应该对该行进行硬编码。它应该以某种方式生成,基于回购中的任何变化都会导致该行发生变化。
回到AppCache,我发现最简单的事情是:
在开发中,包括AppCache中所有文件的上次修改时间
在生产中,包括已部署的git commit的commit id
我不知道您使用的是什么语言,但是在Rails世界中,我的AppCache清单看起来像下面这样。任何人都不必更改此文件,他们只会在提供此清单的控制器中管理的@files
数组中添加或删除文件:
CACHE MANIFEST
<% if Rails.env.development? %>
<% @cached_files.each do |file| %>
# <%= File.mtime(file) %>
<% end %>
<% else %>
# <%= `git rev-parse HEAD` %>
<% end %>
CACHE:
<% @cached_files.each do |file| %>
<%= file %>
<% end %>
NETWORK:
*
第一部分,包装在
Rails.env.development?
中,输出一系列注释行,包含清单中包含的每个文件的最后修改时间。这意味着,在开发期间,只要修改其中包含的任何文件,AppCache就会自动过期。在生产中,部署新提交时AppCache已过期。这对您来说可能是杀伤力过大;如果您想避免不必要地使用户的appcache过期,您应该做一些更聪明的事情,比如散列所涉及的文件,以便缓存在其内容更改时过期。
最后,我编写了一个小库来帮助消除生成清单的重复部分。如果您不太可能使用Rails,您可能会发现它很有用:https://github.com/meagar/rails_appcache
关于git - Git:处理appcache?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29880529/