Skip to main content

Shift git commit timestamps out of work hours so your side project stays secret

Project description

secretside

Shift git commit timestamps out of work hours so your side project stays secret.

If you committed at 10:47 on a Wednesday, secretside moves it to 17:47 (or later). It also catches identity leaks — commits made with your real name or work email when you meant to use a pseudonym.

Install

pip install secretside

Or with uv:

uv tool install secretside

Note: libgit2 1.9 headers are required.

Quick start

secretside init
secretside clean --dry-run
secretside check # quick validate for use in a git hook

Commands

secretside init [repo] [--country XX] [--force] — Generate secretside.toml with jittered defaults so every project's config looks slightly different.

secretside clean [repo] [--dry-run] — Preview and apply timestamp shifts. Only touches your most recent contiguous commits. With local_only = true in your config (the default), only unpushed commits are considered/modified.

secretside inspect [repo] — Show commit time distribution and list all work-hour commits.

secretside check [repo] — Validate that no commits fall in work hours and no banned identities appear. Designed for CI or pre-push hooks.

Config

secretside init creates a secretside.toml in your repo:

holidays = "CA"
work_days = "mon-fri"
work_hours = "08:47..17:52"
night_hours = "23:12..05:44"
local_only = true
banned = [
    # ["Your Real Name", "real@email.com"],
    # ["Your Real Name", "work@company.com"],
]
pto = [
    # "2025-02-07",
    # "2025-12-24..2025-12-31",
]
Key Description
holidays Country code for public holidays ("CA", "US", "GB", etc.)
work_days Which days are work days ("mon-fri", "mon-thu", "mon-wed,fri")
work_hours Commits in this range on work days get shifted past work_end
night_hours Shifted commits avoid landing here (organic night commits are left alone)
local_only Only shift commits that haven't been pushed to any remote
banned Name/email pairs to flag in check — keep your real identity out of the repo
pto Dates (or start..end ranges) to treat as days off

How it works

  • Only the contiguous tail of your commits is touched — other people's commits are never modified
  • Weekend, holiday, and PTO commits are left alone — already safe - unless they need shifting due to overflow from a work day
  • Organic night commits (you actually coded at 1am) stay put
  • Chronological order is always preserved, with original time gaps maintained where possible
  • History rewriting uses git-filter-repo under the hood

Development

Requires Python 3.11+ and uv.

uv sync
bin/test
uv run secretside <command>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

secretside-0.2.2.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

secretside-0.2.2-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file secretside-0.2.2.tar.gz.

File metadata

  • Download URL: secretside-0.2.2.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for secretside-0.2.2.tar.gz
Algorithm Hash digest
SHA256 85013443d03ced55920a2dee57d244863af1c70a62bd11f1e9508b9abe8da432
MD5 980ed1ae56ff2bd1e4f7c16c12861963
BLAKE2b-256 09e4bc68d0476077de0ae8a241091b83c0ac81d4cbf29946dc21c2850b3d6d9c

See more details on using hashes here.

File details

Details for the file secretside-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: secretside-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for secretside-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4c2f08a8a49417b5e362183be610c9d7aebbf746d0167a632c2a14af9cfcecc7
MD5 bde85a1940b6fc0557621578fb1f2c22
BLAKE2b-256 587c11dfc9a83497966f90f9e51161002ef7a1c02e58105f7a9e7bcfb122a120

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page