diff --git a/diff-advance/README.md b/diff-advance/README.md new file mode 100644 index 0000000..fe2fa8d --- /dev/null +++ b/diff-advance/README.md @@ -0,0 +1,31 @@ +# Git Kata: Git Diff Advance + +## Setup + +Run `source setup.sh` or `bash setup.sh` or `./setup.sh` (or `.\setup.ps1` in PowerShell) + +## Tasks + +### Objectives: We will explore how git diff looks from different directions, `word-diff`, `name-only`, and a practical use case other than just to see diff. + +1. Current branch is `pipeline-improvement`. Use `git diff` to see how it is different from master. +2. Compare `git diff master` and `git diff master pipeline-improvement`. +3. Compare `git diff master pipeline-improvement` and `git diff pipeline-improvement master`. Notice what is being removed and added. +4. Include `--word-diff` with `git diff`. In addition to the default, word diff can also be used in different modes, i.e. `--word-diff=color`. See how it is different from normal diff. +5. Include `--name-only` option with `git diff` and see the result. +6. With `--name-only`, we get a list of changed files. This can be useful for example when we want to do selective compile/test of changed files instead of a full re-build, given that steps can be compiled/tested independently. In our exercise, there are 3 steps in a pipeline and an utilities file. Let's say we only want to test the pipelines because we're confident enough with the utils to not test them (naughty-list programmer). We can do something like this: + + `git diff --name-only master | grep '.pipeline' | xargs cat` + + This will: + 1. Get a list of the changed files + 2. Filter for only `.pipeline` files + 3. `cat`/test these files + +## Relevant commands and options + +- `git diff` +- `--word-diff` +- `--name-only` +- `grep` +- `xargs` diff --git a/diff-advance/setup.ps1 b/diff-advance/setup.ps1 new file mode 100644 index 0000000..928f78c --- /dev/null +++ b/diff-advance/setup.ps1 @@ -0,0 +1,17 @@ +# Source utils +. ..\utils\make-exercise-repo.ps1 + +# Prep branches +Set-Content -Value "Step 1 before changes" -Path step1.pipeline +Set-Content -Value "Step 2 will remain unchanged" -Path step2.pipeline +Set-Content -Value "Step 3 before changes" -Path step3.pipeline +Set-Content -Value "Utilities before changes" -Path stepx.utils +git add . +git commit -m "Initial commit" + +git checkout -b pipeline-improvement +Set-Content -Value "Step 1 after improvement" -Path step1.pipeline +Set-Content -Value "Step 3 after changes" -Path step3.pipeline +Set-Content -Value "Utilities after changes" -Path stepx.utils +git add . +git commit -m "Improve pipeline - name change" \ No newline at end of file diff --git a/diff-advance/setup.sh b/diff-advance/setup.sh new file mode 100755 index 0000000..4bbcd06 --- /dev/null +++ b/diff-advance/setup.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Source utils +source ../utils/utils.sh + +# Prep repo +kata="git-diff-advance" +make-exercise-repo + +# Prep branches +echo "Step 1 before changes" > step1.pipeline +echo "Step 2 will remain unchanged" > step2.pipeline +echo "Step 3 before changes" > step3.pipeline +echo "Utilities before changes" > stepx.utils +git add . +git commit -m "Initial commit" + +git checkout -b pipeline-improvement +echo "Step 1 after improvement" > step1.pipeline +echo "Step 3 after changes" > step3.pipeline +echo "Utilities after changes" > stepx.utils +git add . +git commit -m "Improve pipeline - name change" \ No newline at end of file