#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done
Tim Pease:我们在那里有两种文档类型:一个是源代码文件,另一个是存储库。git的工作方式是你有提交,每个提交都有一个分支。存储库文档跟踪已被索引的特定存储库的最近提交。当用户向Github推送一个新提交时,我们会从elasticsearch中提取该存储库文档。然后,我们看到最近索引的提交,然后我们得到在最近的推送和之前索引的文件之间被修改、添加或删除的所有文件的列表。然后我们可以继续,更新那些已经更改的文档。我们不需要每次有人推送时都重新索引整个源代码树。
Andrew Cholakian: 我假设,你们只索引主分支。
蒂姆·皮斯:正确。它只是主分支的头,你要进入那里,这仍然是很多数据,20亿份文档,30tb。
Andrew Cholakian:这是非常巨大的。
[...]
Tim Pease:在push上索引源代码,这是一个自我修复的过程。
我们有一个存储库文档,它跟踪最后一次索引提交。如果我们错过了三次作业失败的提交,下一个提交,我们仍然在看我们索引的上一个提交和我们在这个新推送中看到的提交之间的差异。
你执行git diff,就会得到所有已更新、删除或添加的文件。你可以说,“好的,我们需要删除这些文件。我们需要添加这些文件等等。”它是自我修复的,这是我们对几乎所有架构所采取的方法