|Abstract or Summary
- The history of a software project plays a vital role in the software development process. Version control systems enable users of a software repository to look at the evolution of the source code, and see the changes that led to newer versions. Currently, version control systems provide commands that can be used to retrieve information about the history, such as, listing different versions, viewing the difference between two arbitrary versions, inspecting changes made in a specific version, and so on. These commands, in one way or the other, require users to first identify the version and then browse through the changes made in it. In this thesis, I present GitQL, a language for querying the history of files that are version-controlled by git. GitQL provides more general queries than git and enables users, for example, to look for specific changes in a file or just retrieve all the changes made to a specific text. GitQL is implemented based on vgrep, a generalization of grep that works on variational strings, which form the formal basis for version-controlled files. Finally, I evaluate the expressiveness of GitQL.