Recording changes
You work in a Synck repository’s folder the way you work in any folder: open, edit, create and delete files with whatever applications you like. Synck does not watch over your shoulder or record anything automatically. A change becomes part of the history only when you commit it.
The cycle is always the same:
- Make some changes.
- Look at them with
synck statusandsynck diff. - Record them with
synck commit -m "why".
Checking the status of your files
synck status compares every file in the folder with the latest commit
and lists every difference, one per line:
$ synck status
A assets
A assets/logo.txt
A proposal
A proposal/draft.txt
A todo.txt
When nothing has changed, it says so:
$ synck status
nothing to commit, working tree clean
Each line starts with a marker:
| Marker | Meaning |
|---|---|
A |
Added: a new file or folder |
M |
Modified: the file’s content changed |
D |
Deleted |
RN |
Renamed in the same folder |
MV |
Moved to another folder |
MV+RN |
Moved and renamed |
M+RN, M+MV, M+MV+RN |
Moved or renamed, and its content changed too |
Folders appear as items in their own right. Adding proposal/draft.txt also
adds the proposal folder.
For scripts, synck --json status prints the same information as JSON. See
Output, JSON and exit codes.
Seeing what changed inside files
synck diff shows the line-by-line changes in text files:
$ synck diff
--- a/notes.txt
+++ b/notes.txt
@@ -1 +1 @@
-Meet at 10.
+Meet at 11.
Synck shows a text diff when both versions are valid UTF-8 without NUL characters and no larger than 8 MiB. For anything else, it just says the file changed:
$ synck diff
Binary files image.bin and image.bin differ
diff does not understand document formats. A Word document, a spreadsheet or
a PDF is a binary file to it, even though it may contain text. Open the
versions side by side in their applications instead, using
synck export to get the old one.
Committing
synck commit records every change that status shows as one commit:
$ synck commit -m "Record the meeting time"
committed sha256:750db9d14bdb7b2b00e40849345a2cc6ee18be176ad842774219615a009819d0
A commit is atomic. Either everything in it is recorded or nothing is. Synck reads each changed file, hashes it and checks that the file did not change while it was being read. If an application is still writing a file, the whole commit is abandoned, your history is unchanged, and you can try again once the file is saved.
If there is nothing to commit, Synck says so and records nothing:
$ synck commit -m "Anything?"
nothing to commit
Committing only some changes
Often your folder contains several unrelated changes. Name the paths you want, and only those are committed:
$ synck commit -m "Draft the proposal" proposal
committed sha256:b76bfdedcfb578758c525f71c9d342326a733047d91d794f199bdb9eee60e631
$ synck status
A assets
A assets/logo.txt
A todo.txt
Naming a folder includes everything inside it. The selection applies to this one commit only. There is no staging area that remembers it, and the remaining changes simply stay in your folder until you commit them.
Writing good commit messages
The message is what people (including you, next year) will read in
synck log. Synck lets you omit it, but you should not. A good message says
what changed and why, in a line:
Move the launch to 1 March after the landlord's delay
A useful rule of thumb is to commit when a piece of work is complete and makes sense on its own: a section is drafted, figures are reconciled, a folder is reorganized. Do not commit every save, and do not bundle unrelated changes together. One coherent change per commit makes history easy to read and undo.
Who is the author?
Each commit records the author you chose with synck init --author. You can
check or change it for future commits:
$ synck config author
author Alex
$ synck config set-author "Alex Morgan"
author Alex Morgan
Changing it never alters commits already made. The author is a label for attribution and is not checked against any account. That is fine on your own computer, but remember it when you read a repository that came from elsewhere.
Telling Synck what to ignore
Some files should never be recorded: temporary files, build output, exports,
caches. List them in .synckignore at the root of the repository’s folder. It uses
the same pattern syntax as Git’s .gitignore:
# Build output and temporary files
build/
*.tmp
.synckignore is an ordinary tracked file, so a change to it is itself a
change you commit:
$ printf 'build/\n*.tmp\n' >> .synckignore
$ synck status
M .synckignore
$ synck commit -m "Ignore build output" .synckignore
Two rules are worth knowing:
- Ignore rules only affect untracked files. If a file is already tracked, adding a matching rule does not hide its changes. Delete the file and commit that deletion first if you want Synck to stop tracking it.
- Set up ignore rules before you bring in a large folder. It is much easier than cleaning up afterwards. See Committing large folders.
Hidden files
Files and folders whose names start with a dot, along with files your
operating system marks as hidden, are not tracked by default. That keeps
things like .DS_Store and editor settings out of your history. The setting
belongs to the repository:
$ synck config hidden-files
hidden-files ignore
$ synck config set-hidden-files track
hidden-files track
With track, untracked hidden files show up in status like any other file,
and .synckignore still applies to them. The .synck directory itself is
never tracked, whatever the setting.
Inspecting the repository itself
Two commands summarize a repository at a glance. synck info shows its
identity:
$ synck info
root /tmp/b2
format_version 6
repo_id 01a17498-6f04-7d82-8d5b-d91939706deb
author Alex
head_repo_seq 3
head_commit_id sha256:b2946d15f95e2e04ac7b0df8f6b0edad8d0e335a8e3ec6593e4cef8c420ff12e
synck context adds the current changes and the most recent commits, which
makes it a good first command when you come back to a folder after a while:
$ synck context
root /tmp/b2
format_version 6
...
working_tree dirty
A assets
A assets/logo.txt
A todo.txt
changes_total 3
changes_shown 3
changes_truncated false
recent_commits 3
3 | 2026-10-25 20:45 +01:00 | Alex | Ignore build output
2 | 2026-10-25 20:45 +01:00 | Alex | Draft the proposal
1 | 2026-10-25 20:45 +01:00 | Alex | Initialize Synck repository
Rules of the road
A few habits keep a repository healthy:
- Never touch
.synck. Don’t edit it, copy pieces of it, or put it in a cloud-synced folder that might change it behind Synck’s back. To back up, usesynck archive. - Run one Synck command at a time per repository. Synck takes a lock for
each operation. A second command that starts while the first is running
fails immediately with
repository busyinstead of waiting. - If a command is interrupted, leave
.synckalone and run the next one. Synck records its intent before it changes anything. The next command completes the interrupted operation first, or stops and reports exactly what is inconsistent. See When an operation is interrupted.