This repository was archived by the owner on Nov 11, 2026. It is now read-only.
Repository navigation
Releases
Releases · juju35/ha-git-sync
v1.8.0
Deprecated
- Git Sync is now a module of System Hub, and this repository is archived: no more updates here. Turned on in System Hub, the module takes over the settings of Git Sync. While both are set up, Git Sync raises a repair in Settings → Repairs, as it would otherwise run twice and register its cards twice: remove Git Sync and its card resource once the module is on. See Migrating (juju35/ha-system-hub#49, thanks @FredM67).
v1.7.1
Maintenance
- No code change: released again to check the installation from the Marketplace.
v1.7.0
Features
- Commit before updates (option, off by default): when the
update.installaction runs — Home Assistant, an add-on, an integration, from its update entity, the Settings page, an automation or Update all — the configuration is committed and pushed first (chore: snapshot before updating Home Assistant Core to 2026.12.0), so there is a commit to go back to if the update breaks something. Updates installed together get one snapshot, from before the first. A failed snapshot is logged and never stops the update.
v1.6.1
Security
- The dashboard export only writes inside the configuration folder or a folder of
allowlist_external_dirs, outside hidden folders such as.storage(symlinks followed). Any other folder is refused in the options, and an entry saved earlier with such a folder gets an error instead of an export: a folder such as/mediawould have handed the dashboards to every user of the media browser.
Changes
- The default export folder is
dashboards_export, read from the configuration folder (still/config/dashboards_exporton Home Assistant OS); a relative folder is read from there instead of the process's working directory.
v1.6.0
Performance
- Translations load on demand: in the release zip, the frontend files keep English only (
git-sync-card.js118 KB → 68 KB) and each other language is its own<file>.i18n.<lang>.jsfile next to them, fetched the first time a card or the panel needs it. Home Assistant loads the card on every dashboard, so each page used to download and parse all 22 languages to use one. The cards and panel are defined once the page's language has arrived (a few milliseconds), so they render translated from the start.
Maintenance
- The repository keeps every language in the sources: the release runs
scripts/split-frontend.mjsbefore building the zip, and the Validate workflow checks the split on a copy (every table is rebuilt from the split files and compared).
Fixes
- Setup and reconfiguration check the target branch with
git check-ref-format --branch: a name git refuses (main.., a space, a leading-) is reported on the form instead of making the first push fail after a successful setup.
v1.5.1
Security
- The diff sent to the AI task also hides the values of
authorization,bearer,api-key/apikey/x-api-key,private_key,passwdandpinkeys, of YAML list items (- password: …), and anyBearertoken. - The card and the mini card show the actions (commit, pull, export, diff, AI message) to administrators only; other users see the status.
Fixes
- The Pull button is shown whenever the remote has new commits (also with local changes or after an error, and on a clean diverged branch), except with local changes on top of unpushed commits.
- An automatic commit that fails to push or fetch is logged as one warning per distinct error, without a traceback, and is still retried at every interval.
v1.4.0
What's new
- Diagnostics: Download diagnostics now gives the entry settings and the last status, with the SSH key path, the commit author name and email and the credentials of an HTTPS remote URL redacted.
v1.3.0
What's new
- Behind and diverged: the remote is now fetched during the status refresh (every 15 minutes by default, new Remote check interval option, 0 to disable) and before each commit, so the
behindcount is current. The status sensor and the card's status pill gain thebehindanddivergedstates. - Pull before push (new option, on by default): when the remote has new commits, the commit is rebased on them (
git pull --rebase --autostash) before the push. A diverged branch is neither committed nor pushed, and a rebase conflict is aborted (git rebase --abort) without pushing; both raise a clear error and a repair explaining how to resolve it, removed by the next successful push. - Secret guard: a commit, and the AI message generation, are refused when the changes include
secrets.yaml,.storage/,.ssh/,*.pem,*.key,id_rsa*,known_devices.yaml,home-assistant_v2.db*or*.log(new Allow tracked sensitive files option for the ones already tracked). The values ofpassword,token,api_key,secretandclient_secretkeys are hidden from the diff sent to the AI task. - New repair when
.gitignoredoes not excludesecrets.yamland.storage/: its fix shows the lines to add and appends them once an administrator confirms.
v1.2.1
Security
- The
git_syncactions (commit_push,export_dashboards,generate_message,get_diff,generate_ssh_key) now require an administrator: a non-admin user could read the diff,secrets.yamlincluded, or commit, push and create the SSH key. Automations, scripts and the card used by an administrator work as before.
v1.2.0
What's new
- Diff viewer in the card: the View changes button (beside Commit & push and Export dashboards, in the mini card's footer, and as a link in the commit confirmation) opens a full-screen view of what the next commit would include, file by file like an editor's source control view. The files on the left with their status letter (added, modified, deleted, renamed, mode) and their added and removed lines; the selected file on the right hunk by hunk, with the line numbers of both sides, additions in green and deletions in red, renames with their old path, binary files and cut patches flagged. Full screen on a phone, with the files as a row of chips above the diff. ↑ ↓ walk the files, Escape or a click outside closes, Commit & push goes straight to the commit confirmation. Translated in every language of the card.
- New action
git_sync.get_diff: the same changes, file by file (status, old path, binary, added and removed lines, hunks with both line numbers), computed on a copy of the Git index so nothing is staged or committed. At most 2000 lines per file and 200 files per response, the rest counted.