Skip to content

Tracking Files

How to register files and directories as sync targets, and how they are mirrored in the repository.

Before devsync can sync a file, you need to track it. Tracking registers the path in manifest.json so devsync knows to include it during push and pull.


Terminal window
devsync track ~/.gitconfig
devsync track ~/.zshrc

After tracking, run devsync push to mirror the file into the sync repository.


You can track an entire directory. All files inside it, recursively, will be included during push and pull.

Terminal window
devsync track ~/.config/nvim
devsync track ~/.config/fish

Pass multiple paths in a single command:

Terminal window
devsync track ~/.gitconfig ~/.zshrc ~/.config/nvim

All entries are created with the same mode and profile options provided in that command.


By default, files are tracked in normal mode. To use a different mode:

Terminal window
devsync track ~/.ssh/config --mode secret
devsync track ~/.config/local-only --mode ignore

See Sync Modes for a full explanation of each mode.


To assign a file to one or more profiles, use --profile:

Terminal window
devsync track ~/.config/work-tool --profile work
devsync track ~/.config/nvim --profile work --profile personal

Entries with no profile are always included during push and pull, regardless of the active profile.

See Profiles for more details.


When you run devsync push, tracked files are copied into the sync directory using a path structure that mirrors their location relative to your home directory.

For example:

Local pathRepository artifact
~/.gitconfigsync/default/.gitconfig
~/.config/nvim/init.luasync/default/.config/nvim/init.lua
~/.ssh/config (secret)sync/default/.ssh/config.devsync.secret

The default segment is the profile namespace. Entries assigned to a profile named work would be stored under sync/work/.

  • Directory~/.config/devsync/sync/
    • manifest.json
    • Directorydefault/
      • .gitconfig
      • .zshrc
      • Directory.config/
        • Directorynvim/
          • init.lua
      • Directory.ssh/
        • config.devsync.secret
    • Directorywork/
      • Directory.config/
        • Directorywork-tool/
          • settings.json

To stop tracking a file, use devsync untrack:

Terminal window
devsync untrack ~/.gitconfig

This removes the entry from manifest.json. It does not delete the local file or the existing artifact in the sync repository. You can remove the artifact manually with devsync cd if needed.


Use devsync status to see the current state of all tracked entries — what has changed since the last push, what is new, and what has been deleted:

Terminal window
devsync status

Use --dry-run with push or pull to preview what would be written without actually applying anything:

Terminal window
devsync push --dry-run
devsync pull --dry-run