{"id":13714388,"url":"https://github.com/benjdewan/m3rger","last_synced_at":"2026-01-11T22:51:20.226Z","repository":{"id":64305919,"uuid":"104217731","full_name":"benjdewan/m3rger","owner":"benjdewan","description":"A 3-layer YAML configuration merging tool","archived":false,"fork":false,"pushed_at":"2019-01-10T22:11:01.000Z","size":18,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-03T23:30:35.937Z","etag":null,"topics":["go","golang","yaml","yaml-configuration"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benjdewan.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}},"created_at":"2017-09-20T13:16:10.000Z","updated_at":"2024-03-27T12:26:17.000Z","dependencies_parsed_at":"2023-01-15T10:30:55.419Z","dependency_job_id":null,"html_url":"https://github.com/benjdewan/m3rger","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjdewan%2Fm3rger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjdewan%2Fm3rger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjdewan%2Fm3rger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benjdewan%2Fm3rger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benjdewan","download_url":"https://codeload.github.com/benjdewan/m3rger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224551244,"owners_count":17330110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["go","golang","yaml","yaml-configuration"],"created_at":"2024-08-02T23:01:58.510Z","updated_at":"2026-01-11T22:51:20.220Z","avatar_url":"https://github.com/benjdewan.png","language":"Go","funding_links":[],"categories":["Repositories"],"sub_categories":[],"readme":"# m3rger\n[![Build Status](https://travis-ci.org/benjdewan/m3rger.svg?branch=master)](https://travis-ci.org/benjdewan/m3rger)\n[![Go Report Card](https://goreportcard.com/badge/github.com/benjdewan/m3rger)](https://goreportcard.com/report/github.com/benjdewan/m3rger)\n[![codebeat badge](https://codebeat.co/badges/38252ff8-f3e5-4c64-826d-7f4489d3b6b8)](https://codebeat.co/projects/github-com-benjdewan-m3rger-master)\n\nm3rger is a tool for merging up to 3 layers of YAML configuration files.\n\n## Usage\n\n```console\n$ ./m3rger-darwin --help\nusage: m3rger-darwin [\u003cflags\u003e] \u003cdefault\u003e [\u003clow\u003e] [\u003chigh\u003e]\n\nFlags:\n      --help     Show context-sensitive help (also try --help-long and --help-man).\n  -o, --out=OUT  Write the output to a file (by default m3rger prints to stdout)\n      --version  Show application version.\n\nArgs:\n  \u003cdefault\u003e  A YAML file with default values that may be overridden\n  [\u003clow\u003e]    A YAML file that will override any values in 'default', but not any in the 'high' file\n  [\u003chigh\u003e]   A YAML file whose keys will override anything from 'low' or 'default'\n```\n\n`m3rger` merges up to three files.\n*   `default`: A YAML file with default/generic values. If no other files are\n     provided `default` is returned as is.\n*   `low`: Scalar values and arrays in this file will overwrite those of\n    `default` whenever there is a collision. Maps are merged.\n*   `high`: Scalar values and arrays in this file will overwrite those of\n    `low` and/or `default` whenever there is a collision. Maps are merged.\n\n## Docker usage\nThe only trick with running `m3rger` in a container is remembering that the\nfiles to be merged have to exist *inside* the container for `m3rger` to be\nable to read them. The easiest way to do that is using `--volume` to mount\nthe directory the files are in:\n```console\n$ ls\ndefault.yml high.yml    low.yml\n$ docker run --rm --read-only --volume=$(pwd):/input:ro \\\n    benjdewan/m3rger /input/default.yml /input/low.yml /input/high.yml\nfoo: mumble\nkey: val\nmap:\n  baz: quux\n  key: val\n```\n\n## Examples\n\n### 1. Just a default file\n\ndefault.yml\n```yaml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\n```console\n$ ./m3rger ./default.yml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\n### 2. Two config files with no collision\n\ndefault.yml\n```yaml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\noverride.yml\n```yaml\nmumble: foobar\n```\n\n```console\n$ ./m3rger ./default.yml ./override.yml\nfoo: bar\nmap:\n  key: val\n  baz: qux\nmumble: foobar\n```\n\n### 3. Two config files with a scalar collision\n\ndefault.yml\n```yaml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\noverride.yml\n```yaml\nfoo: mumble\n```\n\n```console\n$ ./m3rger ./default.yml ./override.yml\nfoo: mumble\nmap:\n  key: val\n  baz: qux\n```\n\n### 4. Two conig files with a map merge\ndefault.yml\n```yaml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\noverride.yml\n```yaml\nmap:\n  key: mumble\n  foo: bar\n```\n\n```console\n$ ./m3rger ./default.yml ./override.yml\nfoo: bar\nmap:\n  key: mumble\n  baz: qux\n  foo: bar\n```\n\n### 5. Three way merge\ndefault.yml\n```yaml\nfoo: bar\nmap:\n  key: val\n  baz: qux\n```\n\nlow.yml\n```yaml\nfoo: baz\nkey: val\nmap:\n  baz: zab\n```\n\nhigh.yml\n```yaml\nfoo: mumble\nmap:\n  baz: quux\n```\n\n```console\n$ ./m3rger ./default.yml ./low.yml ./high.yml\nfoo: mumble\nkey: val\nmap:\n  baz: quux\n  key: val\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjdewan%2Fm3rger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenjdewan%2Fm3rger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjdewan%2Fm3rger/lists"}