Step 0 - Initial project skeleton.

Basic project infrastructure plus tiny domain model to work with. Use Spring Boot to pull in dependencies in appropriate versions (parent pom sets dependencies, spring-boot-starter-data-jpa declares necessary dependencies for Spring Data JPA, Hibernate 4). Added HSQL as dependency.

Added readme.md to contain a detailed script of the upcoming steps.
Step 1 - Basic Spring configuration and bootstrapping test.

Adding a basic configuration file and test cases to easily run integration tests as well as a SQL file to let Spring boot populate the in-memory database on startup.
Step 2 - Enable Spring Data JPA repositories.

Add CustomerRepository, add query and save(…) methods as well as test cases executing them.
Step 3 - Move to CrudRepository.

Switch to CrudRepository as base interface and add appropriate test cases.
Step 4 - Moving on to PagingAndSortingRepository.

Moved to PagingAndSortingRepository and added according integration tests.
Step 5 - Redeclaring existing CRUD methods.

Overriding findAll() to show JpaRepository actually returns a List. Overriding save(…) to customize transaction configuration.
Step 6 - Introducing a read-only repository base interface.

Introduced ReadOnlyRepository to capture all read-only repository methods of CrudRepository and PagingAndSortingRepository. It also fixes the the type of the ID property to Long. Added Product domain class, sample data as well as an extension of ReadOnlyRepository to declare a query method to find Product instances containing a given description.
Step 7 - Adding a manually declared query method.

Introduced a method to lookup products by key and value using the @Query annotation.
Step 8 - Flexible predicate execution.

Added Querydsl as dependency as well as the appropriate setup of the APT processor and IDE integration. Let CustomerRepository extend QuerydslPredicateExecutor and use the API in the integration test to find customers.
Step 9 - Adding custom implementation method.
Step 10 - Added shell script to automatically build each step.

Added script that will iterate through the entire Git history and build the project for each commit to make sure that each commit itself is compileable and executable.