{"id":28314419,"url":"https://github.com/das-kaesebrot/git-sync","last_synced_at":"2026-05-03T18:32:12.254Z","repository":{"id":62736415,"uuid":"562093618","full_name":"das-kaesebrot/git-sync","owner":"das-kaesebrot","description":"Auto-mirroring of git repositories","archived":false,"fork":false,"pushed_at":"2026-04-13T07:21:11.000Z","size":132,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T09:56:18.013Z","etag":null,"topics":["docker","docker-image","git","repository-management"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/daskaesebrot/git-sync","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/das-kaesebrot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-05T09:41:28.000Z","updated_at":"2026-04-13T07:21:13.000Z","dependencies_parsed_at":"2025-12-16T19:05:03.231Z","dependency_job_id":null,"html_url":"https://github.com/das-kaesebrot/git-sync","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/das-kaesebrot/git-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgit-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgit-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgit-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgit-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/das-kaesebrot","download_url":"https://codeload.github.com/das-kaesebrot/git-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/das-kaesebrot%2Fgit-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32579734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-image","git","repository-management"],"created_at":"2025-05-24T19:09:58.817Z","updated_at":"2026-05-03T18:32:12.249Z","avatar_url":"https://github.com/das-kaesebrot.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-sync\n\nThis docker image allows you to synchronize a single source repository with one or more target repositories. It supports a cron-style run type as well as a single run.\n\n## Pulling the image\nDocker hub: https://hub.docker.com/r/daskaesebrot/git-sync\n```bash\ndocker pull daskaesebrot/git-sync\n```\n\n## Configuration\nThe image can be partly configured using environment variables, but the main configuration has to be defined in the yaml- or json-based configuration file.\n\n### Supported environment variables\nEnvironment variables always take precedence over variables from the config file!\n\n- `GITSYNC_RUN_TYPE`: Can be either `once` or `cron`. Defaults to `once`.\n- `GITSYNC_CRON_INTERVAL`: Cron interval. Defaults to an empty value.\n- `GITSYNC_KEYFILE`: Path to a keyfile to be used as the root file, unless it's overriden in a repository or remote config. Defaults to an empty value.\n- `GITSYNC_CACHE_ROOT_DIR`: Directory inside the container to use for caching repositories. Defaults to `/var/opt/gitsync/cache`\n- `GITSYNC_CONFIG_FILE`: Config file to use when starting the image. Defaults to `/var/opt/gitsync/config/config.yml`\n\n### Configuration file\n\nFor each entry in `repos`, you may give a simple human-readable name.\nAfter that define your remotes, also using a human-readable name with the required key `url`. Only SSH-based Git URLs are supported for now. To define a source to be replicated across all other remotes for repository, add the key/value-pair `source: true`. If the source key is not defined for a remote, it will default to `false`.\n\n#### YAML-based\n```yml\n# section can be omitted if environment variables are given instead\nconfig:  \n  # supported values: cron | once\n  run_type: cron\n  \n  # ignored when run_type = once\n  # allows you to define a cron-based interval\n  cron_interval: \"0 5 * * *\"\n\n  # container path to the ssh keyfile to use when pulling/pushing a remote\n  keyfile: \"/var/opt/gitsync/keys/id_rsa\"\n\n  # cache directory for synced repositories\n  cache_root_dir: \"/var/opt/gitsync/cache\"\n\nrepos:\n  my_repo_1:\n    # optional keyfile override for repositories. If this key isn't defined, config.keyfile will be used.\n    keyfile: \"/var/opt/gitsync/keys/repository_key\"\n    github:\n      url: \"git@github.com:torvalds/linux\"\n      # repos.[repo].[remote].source defaults to false if omitted, all other remotes are treated as sync targets\n      # only a single source can be defined\n      source: true\n\n      # optional keyfile override for remotes. If this key isn't defined, repos.[repo].keyfile will be used.\n      keyfile: \"/var/opt/gitsync/keys/custom_remote_key\"\n\n    gitlab: \n      url: \"ssh://git@gitlab.example.com:54321/torvalds/linux.git\"\n```\n\n#### JSON-based\n```json\n{\n    \"config\": {\n        \"run_type\": \"cron\",\n        \"cron_interval\": \"0 5 * * *\",\n        \"keyfile\": \"/var/opt/gitsync/keys/id_rsa\"\n    },\n    \"repos\": {\n        \"my_repo_1\": {\n            \"keyfile\": \"/var/opt/gitsync/keys/repository_key\",\n            \"github\": {\n                \"url\": \"git@github.com:torvalds/linux\",\n                \"source\": true,\n                \"keyfile\": \"/var/opt/gitsync/keys/custom_remote_key\"\n            },\n            \"gitlab\": {\n                \"url\": \"ssh://git@gitlab.example.com:54321/torvalds/linux.git\"\n            }\n        }\n    }\n}\n```\n\n### Running the image\n\nEither by using `docker run` directly:\n```bash\ndocker run \\\n    -v /path/to/your/config/config.yml:/var/opt/gitsync/config/config.yml:ro \\\n    -v /path/to/your/keyfile/git_key_ed25519:/var/opt/gitsync/keys/git_key_ed25519:ro \\\n    -v myvolume:/var/opt/gitsync/cache \\\n    -e GITSYNC_KEYFILE=\"/var/opt/gitsync/keys/git_key_ed25519\" \\\n    -e GITSYNC_RUN_TYPE=\"cron\" \\\n    -e GITSYNC_CRON_INTERVAL=\"0 5 * * *\" \\\n    daskaesebrot/git-sync\n```\n\n...or using a `docker-compose.yml`:\n```yaml\nversion: '2'\n\nservices:\n  gitsync:\n    image: daskaesebrot/git-sync\n    restart: always\n    volumes:\n      - /path/to/your/config/config.yml:/var/opt/gitsync/config/config.yml:ro\n      - /path/to/your/keyfile/git_key_ed25519:/var/opt/gitsync/keys/git_key_ed25519:ro\n      - myvolume:/var/opt/gitsync/cache\n    environment:\n      - GITSYNC_KEYFILE=\"/var/opt/gitsync/keys/git_key_ed25519\"\n      - GITSYNC_RUN_TYPE=\"cron\"\n      - GITSYNC_CRON_INTERVAL=\"0 5 * * *\"\n\nvolumes:\n  myvolume:\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdas-kaesebrot%2Fgit-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdas-kaesebrot%2Fgit-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdas-kaesebrot%2Fgit-sync/lists"}