{"_id":"@1-/gitsql","_rev":"6-0022fda6dceba61cf3fed6b9abaf2ff9","name":"@1-/gitsql","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@1-/gitsql","version":"0.1.0","keywords":["csv","git","sqlite","sync","version-control"],"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","_id":"@1-/gitsql@0.1.0","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","bugs":{"url":"https://github.com/webc-site/npm/issues"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"dist":{"shasum":"90cee369a89f573672620306bf9fda4a438f452f","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.0.tgz","fileCount":14,"integrity":"sha512-QxvIAD+OOXwLxEg3fZnsvHH79U1NPhYvdAaBUD0TIyyiIWlj2D9bpkxqnMR/Wzg8YLBX/zrrF7XBmaiReQtFNA==","signatures":[{"sig":"MEUCIQCempidBtvsOkzG+WHwDtz+G8s/R/5DTUxDbyrkwbO0OQIgfapCAZi2XsGapSBPEuEKD9N1q8PmchwzX0YUTqG3Z5o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19081},"type":"module","exports":{"./*":"./*"},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"repository":{"url":"git+https://github.com/webc-site/npm.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","directories":{},"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"peerDependencies":{"@3-/log":"^0.1.9","@1-/find":"^0.1.1","@1-/scan":"^0.1.7","@1-/upsert_gitignore":"^0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/gitsql_0.1.0_1780995976806_0.6541861599102685","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@1-/gitsql","version":"0.1.1","keywords":["csv","git","sqlite","sync","version-control"],"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","_id":"@1-/gitsql@0.1.1","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","bugs":{"url":"https://github.com/webc-site/npm/issues"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"dist":{"shasum":"2202e9a8e22dec0d61fe02f7a92ced6cfcf3709c","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.1.tgz","fileCount":14,"integrity":"sha512-ZJH/TeLzjQQI+QZMQKvrsNUlzw3swJr5knWI60MHeizN11xgQcxskwSgOp/qXFLqvefXIDQvy45LlLKwyAHPuw==","signatures":[{"sig":"MEUCIBaqoFTVZdDSQUUTzeuXGWkjn56/6TObY+7ywz+qb/HoAiEAl2iVkrJzsY0wdYJWZ0OM/cvJuhaFeq3brYrzNcNLG8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18809},"type":"module","exports":{"./*":"./*"},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"repository":{"url":"git+https://github.com/webc-site/npm.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","directories":{},"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"peerDependencies":{"@3-/log":"^0.1.9","@1-/find":"^0.1.1","@1-/scan":"^0.1.7","@1-/upsert_gitignore":"^0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/gitsql_0.1.1_1780996372301_0.9964345953141369","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@1-/gitsql","version":"0.1.2","keywords":["csv","git","sqlite","sync","version-control"],"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","_id":"@1-/gitsql@0.1.2","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","bugs":{"url":"https://github.com/webc-site/npm/issues"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"dist":{"shasum":"9aaec0c634d715f28400bd69ff0198fb89538240","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.2.tgz","fileCount":15,"integrity":"sha512-B7dop5UTBEJ1LKaS1lQh33iYuMaSLFlyBRebnvyPJgBsrQMPaseDXmNrEb62ad1pAMaz3wQVUyBOtPqQhzIB2A==","signatures":[{"sig":"MEQCIC28SHff50PWv0gdCkqILbVuwwMgdFFleKR5UtflWRuRAiA4o6+KASejEfIeQMvYWfPup3DKY6JwKhyWC7fggf7wJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20092},"type":"module","exports":{"./*":"./*"},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"repository":{"url":"git+https://github.com/webc-site/npm.git","type":"git"},"_npmVersion":"11.16.0","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","directories":{},"_nodeVersion":"26.2.0","dependencies":{"@3-/log":"^0.1.9","@1-/find":"^0.1.1","@1-/read":"^0.1.1","@1-/scan":"^0.1.10"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gitsql_0.1.2_1781158936175_0.42301456649345504","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@1-/gitsql","version":"0.1.3","keywords":["csv","git","sqlite","sync","version-control"],"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","_id":"@1-/gitsql@0.1.3","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","bugs":{"url":"https://github.com/webc-site/npm/issues"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"dist":{"shasum":"91ab9b460c63b5676500c253ebc5ec1f7383c721","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.3.tgz","fileCount":18,"integrity":"sha512-QRBEX/3F18F0P2ERIijaCpfZfpNyqx9hd6iI8aTK8nWqUqOLgzIZRi92GUmeDoZ4Nc6KuI9dGx7XARFzxY26NA==","signatures":[{"sig":"MEYCIQDf4lcTJ7JfHV7DwuX3olUayYI75ks8/0q2EWTUWxZS5QIhAK4UqQ9hyXg7UjY+2aUxCxl4/CSJEqof6qEgXYB6d7fN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21678},"type":"module","exports":{"./*":"./*"},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"repository":{"url":"git+https://github.com/webc-site/npm.git","type":"git"},"_npmVersion":"11.16.0","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","directories":{},"_nodeVersion":"26.2.0","dependencies":{"yargs":"^18.0.0","@3-/log":"^0.1.9","@1-/find":"^0.1.1","@1-/read":"^0.1.1","@1-/scan":"^0.1.10"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gitsql_0.1.3_1781160884803_0.32836649047544175","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@1-/gitsql","version":"0.1.4","keywords":["csv","git","sqlite","sync","version-control"],"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","_id":"@1-/gitsql@0.1.4","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","bugs":{"url":"https://github.com/webc-site/npm/issues"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"dist":{"shasum":"cc936e0fc7c4d0c64325d24cec08d9844087a045","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.4.tgz","fileCount":17,"integrity":"sha512-O/obyhGUQqItPoTleY6NifmlpouUuPJCDk84ox0dQAM9E16vR3s1evqThdASBw6iAbD7ZFd6Bqnp2NIr9aom6w==","signatures":[{"sig":"MEUCIFu9XqPmgZCL/TMAv0xgdplWQhUW/sGLoogUNRajZhIJAiEAmG7hRIOms3yO1bd3dD+RovExVpqiMwzXOwRzVqCts1M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19179},"type":"module","exports":{"./*":"./*"},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"repository":{"url":"git+https://github.com/webc-site/npm.git","type":"git"},"_npmVersion":"11.16.0","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","directories":{},"_nodeVersion":"26.2.0","dependencies":{"yargs":"^18.0.0","@1-/csv":"^0.1.0","@3-/log":"^0.1.9","@1-/find":"^0.1.1","@1-/read":"^0.1.1","@1-/scan":"^0.1.10"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gitsql_0.1.4_1781172868306_0.4757119532555989","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@1-/gitsql","version":"0.1.5","description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","keywords":["csv","git","sqlite","sync","version-control"],"homepage":"https://github.com/webc-site/npm/tree/main/gitsql","license":"MulanPSL-2.0","author":{"name":"x-at-01@googlegroups.com"},"repository":{"type":"git","url":"git+https://github.com/webc-site/npm.git"},"bin":{"gitsql":"cli.js","gitsql-install":"postinstall.js"},"type":"module","exports":{"./*":"./*"},"dependencies":{"@1-/csv":"^0.1.1","@1-/read":"^0.1.1","@1-/scan":"^0.1.10","yargs":"^18.0.0"},"_id":"@1-/gitsql@0.1.5","bugs":{"url":"https://github.com/webc-site/npm/issues"},"_nodeVersion":"26.2.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-aGzY2hjCqJosDSWe5saPAIwrD5fe2g7rlZdYvq8uGwA5J35J6rsN6njzu0aQg2JO25cwtlkk7LTM5dd5wpcD8A==","shasum":"d6fe72aae903bb0d019acb0d4f2537577ef4b1e6","tarball":"https://registry.npmjs.org/@1-/gitsql/-/gitsql-0.1.5.tgz","fileCount":16,"unpackedSize":23348,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3Ta2ad94oZ7RNasLKSEi1bHhN2DpAhnoPnsvRXmboRQIhAMQriu7wYMPh6M98fG4GM/AoC8R5IEzPcbrAwiZMHVXr"}]},"_npmUser":{"name":"i18n-now","email":"i18n.site@gmail.com"},"directories":{},"maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gitsql_0.1.5_1781187599277_0.11887109036498456"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-09T09:06:16.630Z","modified":"2026-06-11T14:19:59.559Z","0.1.0":"2026-06-09T09:06:16.941Z","0.1.1":"2026-06-09T09:12:52.436Z","0.1.2":"2026-06-11T06:22:16.321Z","0.1.3":"2026-06-11T06:54:44.969Z","0.1.4":"2026-06-11T10:14:28.431Z","0.1.5":"2026-06-11T14:19:59.428Z"},"bugs":{"url":"https://github.com/webc-site/npm/issues"},"author":{"name":"x-at-01@googlegroups.com"},"license":"MulanPSL-2.0","homepage":"https://github.com/webc-site/npm/tree/main/gitsql","keywords":["csv","git","sqlite","sync","version-control"],"repository":{"type":"git","url":"git+https://github.com/webc-site/npm.git"},"description":"SQLite 数据库 Git 双向同步与版本控制工具 / SQLite database Git bidirectional synchronization and version control tool","maintainers":[{"name":"i18n-now","email":"i18n.site@gmail.com"}],"readme":"[English](#en) | [中文](#zh)\n\n---\n\n<a id=\"en\"></a>\n# @1-/gitsql : SQLite database Git bidirectional synchronization and version control\n\n- [@1-/gitsql : SQLite database Git bidirectional synchronization and version control](#1-gitsql-sqlite-database-git-bidirectional-synchronization-and-version-control)\n  - [1. Introduction](#1-introduction)\n  - [2. Usage](#2-usage)\n    - [Installation & Initialization](#installation-initialization)\n    - [Manual Sync](#manual-sync)\n    - [Automated Hooks](#automated-hooks)\n  - [3. Design Philosophy](#3-design-philosophy)\n    - [Sync Flow](#sync-flow)\n    - [Key Design Decisions](#key-design-decisions)\n  - [4. Technology Stack](#4-technology-stack)\n  - [5. Code Structure](#5-code-structure)\n  - [6. History](#6-history)\n  - [About](#about)\n\n## 1. Introduction\n\nSolves the inherent limitation of Git when handling SQLite binary database files: inability to perform line-level diffing, merging, or collaborative workflows. Decomposes databases into semantically versionable plain-text assets.\n\nKey features:\n\n- **Data Export (dump)**: Extracts table schemas into `.sql` files and exports data rows into UTF-8 BOM CSV files (with base64url-encoded BLOB columns), then auto-stages with `git add`.\n- **Data Import (load)**: Executes `.sql` files to create tables, then streams and parses `.csv` files for batch insertion—supporting large files and full BLOB restoration.\n- **Incremental Scanning (scan)**: Determines database change status using file modification time and size, exporting only updated databases to minimize I/O.\n- **Git Hook Integration**: Provides the `gitsql-install` CLI command to automatically configure Git `pre-commit` and `post-merge` hooks, enabling an automated workflow: export before commit, import after merge.\n\n## 2. Usage\n\n### Installation & Initialization\n\nInstall the CLI globally:\n\n```bash\nbun add -g @1-/gitsql\n```\n\nCreate a `gitsql.js` configuration file in your project root to declare databases to synchronize:\n\n```javascript\n// gitsql.js\nexport default [\"db/dev.db\"];\n```\n\n### Manual Sync\n\n```bash\n# Export SQLite to SQL and CSV directories (e.g., db/dev.db → db/dev.db.dump/)\nbun gitsql dump db/dev.db\n\n# Restore SQLite from SQL and CSV directories\nbun gitsql load db/dev.db\n```\n\n### Automated Hooks\n\nRun this command to install Git hooks:\n\n```bash\nbun gitsql-install\n```\n\nThis command:\n\n- Adds `.cache/` to your project's `.gitignore`;\n- Writes `pre-commit` (triggers `dump`) and `post-merge` (triggers `load`) scripts to `.git/hooks/`.\n\n## 3. Design Philosophy\n\n### Sync Flow\n\n![](https://fastly.jsdelivr.net/gh/webc-fs/-@3p/44SDjjeLLR2re8FAv1rQ.svg)\n\n### Key Design Decisions\n\n- **Incrementality**: Leverages `@1-/scan` to maintain a lightweight SQLite state snapshot, avoiding full filesystem scans.\n- **Atomicity**: `load` deletes the old database before reconstruction; `dump` and `git add` are coupled to ensure all exported files are staged.\n- **BLOB Support**: Binary columns are base64url-encoded in CSV and decoded on import, preserving attachments, images, and other binary data losslessly.\n- **Zero-Dependency Deployment**: All logic runs natively on Bun via `bun:sqlite`; no external SQLite CLI or Python runtime required.\n- **Efficient Batch Processing**: Import process uses 10,000-row batching for optimal large file handling.\n- **SQL Compatibility**: Exported `.sql` files ensure semicolon termination, conforming to SQLite standards.\n- **CSV Processing**: Custom streaming CSV parser handles quoted fields and embedded newlines correctly.\n- **Resource Management**: Uses Bun's `using` statement for automatic database connection disposal.\n\n## 4. Technology Stack\n\n- **Bun**: High-performance JavaScript runtime with built-in `bun:sqlite` engine\n- **@1-/scan**: Incremental file-state scanner and SQLite-backed cache manager\n- **@1-/csv**: Lightweight CSV encoder/decoder (`csvE.js` / `csvD.js`), optimized for database round-trips\n- **bun:sqlite**: Built-in SQLite database driver\n- **@1-/read**: Asynchronous file reading utility\n\n## 5. Code Structure\n\n```text\nsrc/\n├── cli.js                 # CLI entry point, parses commands and arguments\n├── cli/dump.js            # dump subcommand logic: invokes scan + dump + git add\n├── cli/load.js            # load subcommand logic: invokes scan + load\n├── const/DB_PATH.js       # Cache database path constant (.cache/scan/gitsql)\n├── db.js                  # SQLite database connection factory (wraps bun:sqlite)\n├── dump.js                # Core export logic: schema → .sql, data → .csv\n├── load.js                # Core import logic: .sql → CREATE, .csv → INSERT\n├── scan.js                # Scanner wrapper, orchestrates @1-/scan module\n├── read.js                # Async file reader utility\n├── postinstall.js         # Initialization script: adds .cache/ to .gitignore\n└── encode/\n    ├── base64.js          # base64url encode/decode for BLOB columns\n    ├── buf.js             # BLOB field stringification\n    ├── str.js             # String SQL escaping\n    └── val.js             # Generic value type handling\n```\n\n## 6. History\n\nD. Richard Hipp, creator of SQLite, developed Fossil—a distributed version control system whose entire repository storage format is an SQLite database file.\n\nThis creates a famous self-referential loop: SQLite's source code is managed by Fossil, while Fossil stores all its metadata, history snapshots, and branch information inside SQLite database files.\n\nGit's design philosophy centers on text-based line-level diffing and three-way merging, making it fundamentally incompatible with binary blobs. Committing `.db` files directly bloats repositories and renders `git merge` entirely ineffective.\n\n`@1-/gitsql` breaks this impasse by semantic decomposition (schema + data), transforming non-mergeable binaries into Git-native textual assets. This SQL schema and CSV data representation enables line-level diffs, branch merging, and conflict resolution for SQLite within Git.\n\n\n## About\n\nThis library is developed by [WebC.site](https://webc.site).\n\n[WebC.site](https://webc.site): A new paradigm of web development for AI\n\n\n---\n\n<a id=\"zh\"></a>\n# @1-/gitsql : SQLite 数据库 Git 双向同步与版本控制\n\n- [@1-/gitsql : SQLite 数据库 Git 双向同步与版本控制](#1-gitsql-sqlite-数据库-git-双向同步与版本控制)\n  - [1. 功能介绍](#1-功能介绍)\n  - [2. 使用演示](#2-使用演示)\n    - [安装与初始化](#安装与初始化)\n    - [手动同步](#手动同步)\n    - [自动化钩子](#自动化钩子)\n  - [3. 设计思路](#3-设计思路)\n    - [同步流程](#同步流程)\n    - [关键设计考量](#关键设计考量)\n  - [4. 技术栈](#4-技术栈)\n  - [5. 代码结构](#5-代码结构)\n  - [6. 历史故事](#6-历史故事)\n  - [关于](#关于)\n\n## 1. 功能介绍\n\n解决 SQLite 二进制数据库文件无法被 Git 有效 diff、合并与协作的固有缺陷。将数据库语义解构为可版本化的纯文本资产。\n\n核心功能：\n\n- **数据导出 (dump)**：提取表结构为 `.sql` 文件，导出数据行为 UTF-8 BOM CSV 文件（含 base64url 编码 BLOB），并自动 `git add`。\n- **数据导入 (load)**：按目录执行 `.sql` 创建表，流式解析 `.csv` 并批量插入，支持大文件与 BLOB 字段还原。\n- **增量扫描 (scan)**：基于文件修改时间与大小判定变更，仅导出已更新的数据库，避免冗余 I/O。\n- **钩子集成**：提供 `gitsql-install` CLI 命令，自动配置 Git `pre-commit` 与 `post-merge` 钩子，实现提交前导出、合并后导入的自动化闭环。\n\n## 2. 使用演示\n\n### 安装与初始化\n\n全局安装 CLI 工具：\n\n```bash\nbun add -g @1-/gitsql\n```\n\n在项目根目录创建 `gitsql.js` 配置文件，声明需同步的数据库路径：\n\n```javascript\n// gitsql.js\nexport default [\"db/dev.db\"];\n```\n\n### 手动同步\n\n```bash\n# 导出 SQLite 至 SQL 与 CSV 目录（例如：db/dev.db → db/dev.db.dump/）\nbun gitsql dump db/dev.db\n\n# 从 SQL 与 CSV 目录还原 SQLite\nbun gitsql load db/dev.db\n```\n\n### 自动化钩子\n\n运行以下命令安装 Git 钩子：\n\n```bash\nbun gitsql-install\n```\n\n该命令会：\n\n- 将 `.cache/` 目录加入项目 `.gitignore`；\n- 在 `.git/hooks/` 下写入 `pre-commit`（触发 `dump`）与 `post-merge`（触发 `load`）脚本。\n\n## 3. 设计思路\n\n### 同步流程\n\n![](https://fastly.jsdelivr.net/gh/webc-fs/-@hQ/fvcaB2SsNBS8i5VUTokw.svg)\n\n### 关键设计考量\n\n- **增量性**：使用 `@1-/scan` 模块维护 SQLite 文件状态快照，避免全量扫描。\n- **原子性**：`load` 过程中先删除旧库再重建，确保数据库一致性；`dump` 与 `git add` 组合保证导出文件全部暂存。\n- **BLOB 支持**：CSV 中的二进制字段经 base64url 编码，导入时自动解码还原，无损处理附件、图片等数据。\n- **零依赖部署**：所有逻辑由 Bun 原生 `bun:sqlite` 驱动，不依赖外部 SQLite CLI 或 Python 环境。\n- **高效批量处理**：导入过程采用 10,000 行批量插入，优化大文件处理性能。\n- **SQL 兼容性**：导出的 `.sql` 文件确保以分号结尾，符合 SQLite 标准格式。\n- **CSV 处理**：使用自定义流式 CSV 解析器，正确处理带引号的字段和换行符。\n- **资源管理**：使用 Bun 的 `using` statement 确保数据库连接正确释放。\n\n## 4. 技术栈\n\n- **Bun**：高性能 JavaScript 运行时，内置 `bun:sqlite` 原生引擎\n- **@1-/scan**：增量文件状态扫描与 SQLite 缓存管理器\n- **@1-/csv**：轻量 CSV 编解码器（`csvE.js` / `csvD.js`），专为数据库场景优化\n- **bun:sqlite**：Bun 内置 SQLite 数据库驱动\n- **@1-/read**：异步文件读取工具\n\n## 5. 代码结构\n\n```text\nsrc/\n├── cli.js                 # CLI 入口，解析命令与参数\n├── cli/dump.js            # dump 子命令逻辑：调用 scan + dump + git add\n├── cli/load.js            # load 子命令逻辑：调用 scan + load\n├── const/DB_PATH.js       # 缓存数据库路径常量（.cache/scan/gitsql）\n├── db.js                  # SQLite 数据库连接工厂（封装 bun:sqlite）\n├── dump.js                # 核心导出逻辑：schema → .sql, data → .csv\n├── load.js                # 核心加载逻辑：.sql → CREATE, .csv → INSERT\n├── scan.js                # 扫描器封装，协调 @1-/scan 模块\n├── read.js                # 异步文件读取工具函数\n├── postinstall.js         # 初始化脚本：将 .cache/ 加入 .gitignore\n└── encode/\n    ├── base64.js          # BLOB 字段的 base64url 编解码\n    ├── buf.js             # BLOB 字段字符串化处理\n    ├── str.js             # 字符串 SQL 转义处理\n    └── val.js             # 通用值类型处理\n```\n\n## 6. 历史故事\n\nSQLite 的作者 D. Richard Hipp 选择不使用 Git，而是开发了 Fossil——一个以 SQLite 数据库文件为唯一存储后端的分布式版本控制系统。\n\n这形成了著名的“自指循环”：SQLite 的源码由 Fossil 管理，而 Fossil 的所有元数据、历史快照与分支信息均存储于 SQLite 数据库中。\n\nGit 的设计哲学是面向文本的行级 diff 与三路合并，天然排斥二进制 blob。直接提交 `.db` 文件不仅导致仓库臃肿，更使 `git merge` 完全失效。\n\n`@1-/gitsql` 通过语义解构（schema + data）打破这一僵局，将不可合并的二进制文件转化为 Git 原生友好的文本资产。本 SQL 模式与 CSV 数据，使 SQLite 支持 Git 行级差异对比、分支合并与冲突解决。\n\n\n## 关于\n\n本库由 [WebC.site](https://webc.site) 开发。\n\n[WebC.site](https://webc.site) : 面向人工智能的网站开发新范式\n\n","readmeFilename":"README.md"}