SovranCode
HomeCourses Git & GitHub Git Project: Learning Journal
This device
Course contentsGit Project: Learning Journal · 41 topics

1. Git Fundamentals

Git IntroductionGit Version ControlGit vs GitHubGit InstallationGit Working TreeGit RepositoryGit CommitGit .gitignoreGit Project: Learning Journal

2. Git History

Git LogGit DiffGit ResetGit RevertGit StashGit Project: Messy Repository

3. Branches & History

Git BranchGit MergeGit Merge ConflictsGit RebaseGit Cherry-PickGit TagsGit Project: Feature Branch

4. Remotes and GitHub

Git RemoteGitHub AuthenticationGitHub RepositoryGitHub ForkGitHub IssuesGitHub PagesGit Project: Two Clone Sync

5. GitHub Collaboration

GitHub Pull RequestsGitHub Code ReviewGit Branching WorkflowGitHub Branch ProtectionGitHub CollaborationGitHub ContributingGit Project: Reviewed Pull Request

6. Automation and Professional Git

GitHub ActionsGit InternalsGit RecoveryGitHub SecurityGit Project: Team Repository CIProject
Learn Git & GitHub40 complete · 1 planned

1. Git Fundamentals

Git IntroductionGit Version ControlGit vs GitHubGit InstallationGit Working TreeGit RepositoryGit CommitGit .gitignoreGit Project: Learning Journal

2. Git History

Git LogGit DiffGit ResetGit RevertGit StashGit Project: Messy Repository

3. Branches & History

Git BranchGit MergeGit Merge ConflictsGit RebaseGit Cherry-PickGit TagsGit Project: Feature Branch

4. Remotes and GitHub

Git RemoteGitHub AuthenticationGitHub RepositoryGitHub ForkGitHub IssuesGitHub PagesGit Project: Two Clone Sync

5. GitHub Collaboration

GitHub Pull RequestsGitHub Code ReviewGit Branching WorkflowGitHub Branch ProtectionGitHub CollaborationGitHub ContributingGit Project: Reviewed Pull Request

6. Automation and Professional Git

GitHub ActionsGit InternalsGit RecoveryGitHub SecurityGit Project: Team Repository CIProject
PREVIOUS LESSONGit .gitignore
NEXT LESSONGit Log
1. Git Fundamentals 90 min

Git Project: Learning Journal

Initialize a real journal repo with a README, ignore rules, two meaningful commits, and a status check you can explain.

UNIT 01 · BUILD90 MINLOCAL REPOSITORY

Design a repository another developer could trust: deliberate boundaries, two reviewable snapshots, ignored local work, and an evidence package that proves every claim.

MISSION PARAMETERS
CommitsExactly 2
Tracked filesExactly 4
Evidence gates6 checks
Remote requiredNo
THE PRODUCT

A journal system, not a folder of notes

The README explains the contract, the template makes entries repeatable, and each commit records one coherent capability.

THE PROOF

A repository you can audit

Status, ignore tracing, cached diffs, history, and tree inspection must agree. Completion is based on evidence—not appearance.

Project brief

Build a personal learning journal that records durable technical understanding. The repository is local in this project: do not create a remote or publish personal notes. Every committed path should help a future reader understand the journal or add a structured entry.

PlanDefine the repository root and committed structure before initialization.
ProtectKeep unfinished drafts and machine-specific files outside tracking.
RecordCreate two snapshots with distinct, defensible purposes.
ProveAudit status, ignored paths, commit count, messages, and final tree.
PROJECT WORKSPACE

Evidence tracker

Mark a gate complete only after the named command or review proves it. Progress is saved in this browser.

0%0/6 verified
  1. Open gate
  2. Open gate
  3. Open gate
  4. Open gate
  5. Open gate
  6. Open gate
Next evidence gate: Repository boundary

Constraints that make the project meaningful

Local repository only

No GitHub repository, remote, push, or pull request. This unit assesses local history and safe boundaries.

Exactly two commits

The first establishes the journal system. The second records one real learning entry.

Explicit staging

Name intended paths in each git add. Do not solve uncertainty with git add . or git commit -a.

Safe content only

Use invented examples. Do not include tokens, passwords, private keys, account details, or sensitive personal writing.

Ignored is not private

An ignored draft is merely untracked by this repository. It is not encrypted, access-controlled, or backed up. Keep genuinely sensitive content in an appropriate secure system.

Required repository structure

learning-journal/
├── .gitignore
├── README.md
├── entries/
│   └── YYYY-MM-DD-git-foundations.md
├── templates/
│   └── entry-template.md
└── drafts/
    └── rough-notes.md       ← local and ignored

The committed tree contains .gitignore, README.md, one dated entry, and one reusable template. The drafts directory exists only in the working tree and is proven ignored.

EMPTY
HISTORY
COMMIT 01 · SYSTEMCreate learning journal structure

.gitignore · README.md · templates/entry-template.md

COMMIT 02 · CONTENTRecord Git foundations reflection

entries/YYYY-MM-DD-git-foundations.md

WORKING TREE ONLYdrafts/rough-notes.md

Present locally · ignored · never tracked

README contract

Explain the repository

  • Journal purpose in two or three sentences.
  • Committed directory structure.
  • How to create an entry from the template.
  • What remains local and why.
  • A statement that examples contain no live credentials.
Entry contract

Demonstrate understanding

  • Use a date-and-topic filename.
  • Explain one Git model in your own words.
  • Include observed evidence from a command.
  • Name one uncertainty honestly.
  • Choose one concrete next action.

Acceptance criteria

  1. 01
    Repository root is intentional

    git rev-parse --show-toplevel resolves to learning-journal, not a parent or home directory.

  2. 02
    Ignore policy is tested

    The draft matches the root /drafts/ rule, appears with !! under ignored status, and never enters the index.

  3. 03
    Commit one establishes the system

    README, template, and ignore policy form one usable baseline with a message that names that outcome.

  4. 04
    Commit two records learning

    One dated entry is the only new committed path, and its message describes the learning artifact.

  5. 05
    Final evidence is reproducible

    Status, log, commit count, latest commit summary, and recursive tree agree with your written explanation.

BOUNDARY GATE

Right repository

The top-level path ends in learning-journal and the unborn/current branch is main.

git rev-parse --show-toplevel
SAFETY GATE

Draft stays local

The matching ignore source is visible and the draft has no index entry.

git check-ignore -v drafts/rough-notes.md
HISTORY GATE

Two intentional snapshots

The count is exactly two and both subjects describe outcomes rather than mechanics.

git rev-list --count HEAD

Milestone 1: plan before initializing

Create a short project plan outside the future repository or on paper. Record the intended root path, public files, local-only paths, two commit purposes, and the evidence commands you will run.

Repository root: .../learning-journal

Commit 1 purpose: establish a documented journal structure
Commit 2 purpose: record one Git foundations reflection

Committed: README, .gitignore, template, dated entry
Untracked by policy: drafts/

Risk check: no live credentials or sensitive personal content

Then create the folder, enter it, print the current location, list its contents, and initialize Git on main. Your earlier init.defaultBranch configuration should choose it; if you deliberately skipped that configuration, use git init -b main. Verify both git rev-parse --show-toplevel and git branch --show-current before creating history.

Milestone 2: establish the safety boundary

Create .gitignore before broad file creation so the rule becomes part of the project’s first design:

# Unfinished local writing
/drafts/
*.tmp

# Machine-specific files
.DS_Store
Thumbs.db

Create drafts/rough-notes.md with an obviously fictional sentence, then prove the rule rather than assuming it works:

git check-ignore -v drafts/rough-notes.md
git status --short --ignored
git ls-files --error-unmatch drafts/rough-notes.md

The first command should name /drafts/. Ignored status should show the directory with !!. The final command should fail because the draft is not tracked; that failure is expected evidence.

Milestone 3: prepare the journal system

Write the README from its contract and create templates/entry-template.md with this minimum structure:

# Topic

## What I learned
Explain the idea in your own words.

## Evidence
Record a command, output, or observation that proved it.

## What is still unclear
Name one precise question, or write "Nothing yet."

## Next action
Choose one small follow-up you can complete.

Do not create the final dated entry yet. Commit one must be a reusable empty journal system, not a mixture of setup and content.

Inspect both boundaries

Before staging, use status to verify the working tree. After staging exact paths, use git diff --cached to verify the proposed snapshot.

Milestone 4: create commit one

Stage exactly .gitignore, README.md, and templates/entry-template.md. Your commit subject should complete “This commit will…” and describe the system-level outcome.

Weak

add files

  • Names the mechanism, not the purpose.
  • Does not distinguish setup from journal content.
  • Will be ambiguous in a later log.
Meets the brief

Create learning journal structure

  • Names the completed project capability.
  • Matches the README, template, and policy.
  • Leaves the first dated entry for a separate intention.
git add .gitignore README.md templates/entry-template.md
git status
git diff --cached
git commit -m "Create learning journal structure"

After committing, run status. It should be clean under the normal view even though the intentionally ignored draft still exists.

Milestone 5: create commit two

Copy the template into entries/ using today’s date and a short lowercase topic. Replace every instruction with your own reflection on snapshots, the index, the first-commit workflow, or ignore rules.

Evidence must be observed

Include one command and summarize output you actually saw. Do not invent a commit ID or claim a clean state before checking it.

Stage only the dated entry. Review status and the cached diff. A suitable subject is Record Git foundations reflection, but improve it if your entry has a more precise focus.

git add entries/YYYY-MM-DD-git-foundations.md
git status
git diff --cached
git commit -m "Record Git foundations reflection"

Milestone 6: audit the finished repository

git status
git status --short --ignored
git branch --show-current
git log --oneline --decorate
git show --stat --oneline HEAD
git ls-tree -r --name-only HEAD
git rev-list --count HEAD

Normal status

Reports a clean working tree. The ignored draft does not count as an untracked change.

Ignored status

Shows !! drafts/, proving local material remains present but intentionally outside discovery.

History

Shows exactly two commits in the intended order with meaningful, distinct subjects.

Committed tree

Lists four intended files and excludes drafts/rough-notes.md, temporary files, and machine noise.

Write a short audit paragraph in your own notes: name what HEAD contains, what the index proposes, what status reports, why the ignored draft is absent from the tree, and why no remote is involved.

Failure drills before submission

Choose any two drills. Predict the result, run the safe check, and explain what prevented a bad snapshot.

Wrong root

Move to a child directory and prove Git still resolves the intended journal root.

Post-stage edit

Stage a harmless change, edit the same file again, and explain why status shows both staged and unstaged state. Restore manually before finishing.

Ignored draft

Try a normal git add drafts/rough-notes.md, read Git’s refusal, and do not override it with -f.

Unexpected temporary file

Create a .tmp file, prove which rule matches, then remove the disposable file.

Submission evidence

Keep a plain-text evidence note outside the repository, or submit terminal screenshots if your learning environment requires them. Include:

  • The repository root printed by Git.
  • The verbose ignore match for the draft.
  • Status immediately before each commit.
  • The cached diff reviewed for each commit.
  • The final one-line log and exact commit count.
  • The recursive HEAD tree and final normal/ignored status.
  • A two-sentence explanation of why the draft is not protected like an encrypted secret.
Review screenshots before sharing

Terminal captures can reveal usernames, home-directory paths, tokens, unrelated tabs, or notification content. Crop to relevant evidence and redact sensitive values without changing the technical result.

Self-assessment rubric: 20 points

NEEDS REVISION0–15 points

One or more repository claims lack evidence, or a required boundary is broken.

SHIP STANDARD16–19 points

The required product, history, safety contract, and audit all work and can be explained.

DISTINCTION20 points

Every result is precise, reproducible, original, and supported by minimal relevant evidence.

4 · Repository boundary

Intentional root, correct initial branch, no nested repository, and no secret or sensitive content.

4 · Ignore contract

Focused commented rules, verified draft match, ignored evidence, and no tracked draft.

4 · Snapshot design

Exactly two coherent commits; staged contents match each purpose and messages describe outcomes.

4 · Journal quality

README explains use, template is reusable, and the dated entry contains original explanation and observed evidence.

4 · Final proof

Clean normal status, expected ignored status, two-commit log, correct latest summary, and exact committed tree.

Passing standard

16/20 overall, with no zero in boundary, ignore contract, or snapshot design. A tracked secret is an automatic stop-and-repair.

Optional extension

Add a second entry only after the required audit is complete. That creates a third commit and therefore belongs outside the scored “exactly two commits” version. Before extending, save the required evidence so your assessed result remains reproducible.

Project checklist

  • The Git top-level path is the intended learning-journal directory.
  • The committed README, template, ignore policy, and dated entry satisfy their contracts.
  • The local draft is ignored, verified, untracked, and free of sensitive content.
  • Exactly two commits exist and each snapshot has one clear purpose.
  • The final status, history, commit summary, and tree provide consistent evidence.
  • I can explain every command used and did not rely on a remote or GitHub UI.

Related lessons

  • Git .gitignore — Drafts and secrets stay out of the committed tree.
  • Git Commit — Each journal snapshot needs a defensible message.
PREVIOUS LESSONGit .gitignore
NEXT LESSONGit Log
ON THIS PAGEGit Project: Learning JournalProject briefConstraints that make the project meaningfulRequired repository structureAcceptance criteriaMilestone 1: plan before initializingMilestone 2: establish the safety boundaryMilestone 3: prepare the journal systemMilestone 4: create commit oneMilestone 5: create commit twoMilestone 6: audit the finished repositoryFailure drills before submissionSubmission evidenceSelf-assessment rubric: 20 pointsOptional extensionProject checklistRelated lessons
Course contents