
quartz-publish-guard
by sushantvema
SKILL.md
name: quartz-publish-guard
description: |
Manage unpublished content in Quartz static site repos. Use when:
(1) User wants to prevent files without publish: true from being committed
(2) User asks about gitignoring based on frontmatter content
(3) User wants to unpublish a note or remove it from git
(4) User wants to purge files from git history
(5) User asks about the publish workflow with npx quartz sync
Triggers: "publish", "unpublish", "gitignore frontmatter", "purge from history", "quartz sync"
Quartz Publish Guard
Protects unpublished Quartz content from being committed to git.
Core Concept
Files with publish: true in YAML frontmatter → tracked and synced to remote
Files without publish: true → local only, never committed
Scripts in Quartz Repo
| Script | Purpose |
|---|---|
find-unpublished.sh | Lists all .md files without publish: true |
update-gitignore.sh --apply | Adds unpublished files to .git/info/exclude (local only) |
unpublish.sh --apply | Removes tracked files that became unpublished |
purge-unpublished-from-history.sh --apply | Removes files from all git history |
hooks/pre-commit | Auto-unstages unpublished files during commits |
Workflows
Normal Sync
npx quartz sync
Pre-commit hook auto-unstages unpublished files and updates .git/info/exclude.
Unpublish a Note (change publish: true → publish: false)
- Edit frontmatter to
publish: false - Run
./unpublish.sh --apply - Run
npx quartz sync
Publish a Note (change publish: false → publish: true)
- Edit frontmatter to
publish: true - Run
./update-gitignore.sh --apply(removes from exclude list) - Run
npx quartz sync
Purge from Git History
Only needed if sensitive data was accidentally committed.
./purge-unpublished-from-history.sh --apply
git remote add origin <url> # filter-repo removes remotes
git push origin v4 --force
Warning: Creates backup at ../quartz-backup automatically. Restore local files from backup after purge if needed.
Purge Specific File from History
git filter-repo --invert-paths --path <file-path> --force
git remote add origin <url>
git push origin v4 --force
Key Implementation Details
Why .git/info/exclude not .gitignore
.gitignoreis tracked → exposes filenames publicly.git/info/excludeis local-only → filenames stay private
Pre-commit Hook Behavior
- Auto-updates
date:field for modified markdown files to current ISO timestamp - Detects staged
.mdfiles incontent/withoutpublish: true - Auto-unstages unpublished files
- Runs
update-gitignore.sh --apply - Allows commit to proceed with remaining files
The hook keeps date_created: unchanged while updating date: to reflect the last modification time.
git filter-repo Gotchas
- Removes
originremote (must re-add after) - Deletes local files that are tracked AND being removed from history
- Files already untracked survive the purge
- Always use
./unpublish.sh --apply+npx quartz syncBEFOREgit filter-repoto preserve local files
Frontmatter Format
---
title: "Note Title"
publish: true # Must be exactly "publish: true" to be published
---
Files with publish: false or missing publish field are treated as unpublished.
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です