You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.7 KiB
4.7 KiB
.fossil-settings/
Purpose
Versioned fossil settings (one setting value or glob list per file) for this dual-VCS tree: git and fossil both track the same project. This file is also the canonical home of the git+fossil coexistence contract, including the rules for keeping .gitignore and ignore-glob in sync.
Ownership
.gitignoreis the canonical statement of ignore intent;ignore-globis hand-derived from it per the rules below - never the other direction..fossil-settings/and.fossil-custom/are git-tracked (versioned fossil config rides in git even at sites where fossil is unused).
Local Contracts
Commit warning suppression
binary-globis*: binary checkins are allowed by default with no fossil warnings/prompts (applies to punkshell and is the pattern for sub-projects like tomlish). The aim of an eventually binary-free tree (goals G-004/G-005/G-006) is agent/workflow policy (see rootAGENTS.mdUser Preferences) and is deliberately NOT enforced at the local VCS layer.
Files each system must not track
- Fossil-generated checkout artifacts: the
manifestsetting (valuerut) makes fossil regeneratemanifest,manifest.uuidandmanifest.tagsat the checkout root on every checkin/checkout. Fossil auto-manages them (they never appear in extras and cannot be added). Git must ignore them - root-anchored/manifest,/manifest.uuid,/manifest.tagsin.gitignore(anchored because nested manifest-named files elsewhere are real content) - and must never track them. - Fossil control files:
.fslckout/_FOSSIL_(checkout db),*.fossil(repository db) - git-ignored; fossil auto-ignores its own. - Git control tree:
.gitstays inignore-glob. Fossil skips dot-prefixed names by default, but anaddremove --dotfilesscan would otherwise descend into it. - Git meta files that are project content (
.gitignore,.gitkeepplaceholders) ARE fossil-tracked for mirror completeness - capture them with--dotfileson addremove/add scans.
ignore-glob derivation rules (verified against fossil 2.28)
- No negation exists in fossil globs. Git's
/bin/*+!exceptionpattern becomes: ignorebin/*wholesale and explicitlyfossil addthe tracked exceptions (ignore-glob never affects already-managed files, so they stay tracked). The exception set is whatever git tracks under an ignored tree - at the time of writing:bin/AGENTS.md,bin/*.cmd,bin/*.kit,bin/*.tcl,bin/*.sh,bin/*.bash, plus force-tracked one-offs (bin/libssp-0.dll,src/vfs/punk9magicsplat.vfs/lib/nmake/x86_64-w64-mingw32-nmakehlp.exe). Derive the current set with the verification comparison below rather than trusting this list. - A bare directory name prunes that whole tree;
*crosses/; git patterns intended to match at any depth need an additional*/variant;#comment lines are honoured. - Do not add the fossil-generated names (
manifest,manifest.uuid,manifest.tags) toignore-glob- fossil handles them itself. - Nested
.gitignorefiles are git-only: ignore files inside subtrees (e.g. the project-layout templates undersrc/project_layouts/) are honoured by git as nested ignores of the outer repo but invisible to fossil - template content they match is untracked in git yet managed by fossil. Treat such divergence as a signal to review the git side (usuallygit add -fof the affected template files). - Case sensitivity differs: git ignore matching is case-insensitive on Windows (
core.ignorecase), fossil glob matching is case-sensitive - e.g. atodo.txtpattern hits vendoredTODO.txtin git but not fossil.
Safe sync procedure (when asked to "sync the ignores")
- Edit
.gitignorefirst (canonical), then hand-translate toignore-globusing the rules above. Never translate a negation literally. - Verify from the checkout root:
fossil extras | git check-ignore --stdinmust output nothing (fossil is not under-ignoring relative to git).- Git-tracked files invisible to fossil must reduce to the documented exception set plus the fossil-generated manifests: compare
git ls-files | sortagainst(fossil ls; fossil extras) | sort(beware false diffs from case and non-ASCII path encoding).
- A fossil
addremoveafter a glob change should use--dotfilesand be reviewed before commit; pending adds captured under older globs are stale -fossil revertcancels uncommitted adds without touching file content when nothing is committed on top of them.
Work Guidance
Verification
fossil extras | git check-ignore --stdin→ emptygit ls-files | sortvs(fossil ls; fossil extras) | sort→ differences limited to the documented exception set + fossil-generated manifests
Child DOX Index
(none)