diff --git a/README.md b/README.md index 6eea2fc..2c49eda 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1563 TILs and counting..._ +_1564 TILs and counting..._ See some of the other learning resources I work on: - [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators) @@ -334,6 +334,7 @@ See some of the other learning resources I work on: - [Interactively Unstage Changes](git/interactively-unstage-changes.md) - [Keep File Locally With `git rm`](git/keep-file-locally-with-git-rm.md) - [Last Commit A File Appeared In](git/last-commit-a-file-appeared-in.md) +- [List All Files Added During Span Of Time](git/list-all-files-added-during-span-of-time.md) - [List All Files Changed Between Two Branches](git/list-all-files-changed-between-two-branches.md) - [List Branches That Contain A Commit](git/list-branches-that-contain-a-commit.md) - [List Commits On A Branch](git/list-commits-on-a-branch.md) diff --git a/git/list-all-files-added-during-span-of-time.md b/git/list-all-files-added-during-span-of-time.md new file mode 100644 index 0000000..ec5d171 --- /dev/null +++ b/git/list-all-files-added-during-span-of-time.md @@ -0,0 +1,49 @@ +# List All Files Added During Span Of Time + +I wanted to get an idea of all the TIL posts I wrote during 2024. Every TIL I +write is under version control in a [git repo on +github](https://github.com/jbranchaud/til). That means git has all the info I +need to figure that out. + +The `git diff` command is a good way at this problem. With the +`--diff-filter=A` flag I can restrict the results to just files that were +_Added_. And with `--name-only` I can cut all the other diff details out and +get just filenames. + +But filenames added to which commits? We need to specify a ref range. There is +a ton of flexibility in how you define a ref, including [a date specification +suffix](https://git-scm.com/docs/gitrevisions#Documentation/gitrevisions.txt-emltrefnamegtltdategtemegemmasteryesterdayememHEAD5minutesagoem) +that points to the value of the ref at an earlier point in time. + +So, how about from the beginning of 2024 to the beginning of 2025: + +``` +HEAD@{2024-01-01}..HEAD@{2025-01-01} +``` + +Putting that all together, we this command and potentially a big list of files. + +```bash +$ git diff --diff-filter=A --name-only HEAD@{2024-01-01}..HEAD@{2025-01-01} +``` + +I wanted to restrict the results to just markdown files, so I added a filename +pattern. + +```bash +$ git diff --diff-filter=A --name-only HEAD@{2024-01-01}..HEAD@{2025-01-01} -- "*.md" +``` + +I could even go a step further to see only the files added to a specific +directory. + +```bash +$ git diff --diff-filter=A --name-only HEAD@{2024-01-01}..HEAD@{2025-01-01} -- "postgres/*.md" +``` + +As a final bonus, I can spit out the github URLs for all those files with a bit of `awk`. + +```bash +$ git diff --diff-filter=A --name-only HEAD@{2024-01-01}..HEAD@{2025-01-01} -- "postgres/*.md" | +awk '{print "https://github.com/jbranchaud/til/blob/master/" $0}' +```