# merge-trees

> Incrementally merge directories.

Latest version **2.0.0** (published 2018-02-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install merge-trees
pnpm add merge-trees
yarn add merge-trees
bun add merge-trees
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2018-02-20 |
| First published | 2017-03-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 11.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Jo Liss |
| Maintainers | joliss, rwjblue, stefanpenner |
| Keywords | merge, copy |

## Links

- npm: https://www.npmjs.com/package/merge-trees
- Repository: https://github.com/broccolijs/node-merge-trees
- Homepage: https://github.com/broccolijs/node-merge-trees#readme
- Issues: https://github.com/broccolijs/node-merge-trees/issues
- npm.io page: https://npm.io/package/merge-trees

## Dependencies (2)

- [fs-updater](https://npm.io/package/fs-updater.md) ^1.0.4
- [heimdalljs](https://npm.io/package/heimdalljs.md) ^0.2.5

## Recent versions

- 2.0.0 (latest) — 2018-02-20
- 1.0.1 — 2017-03-02
- 1.0.0 — 2017-03-02

## README

# node-merge-trees

[![Build Status](https://travis-ci.org/broccolijs/node-merge-trees.svg?branch=master)](https://travis-ci.org/broccolijs/node-merge-trees)
[![Build status](https://ci.appveyor.com/api/projects/status/6c47hp9omebk09tq/branch/master?svg=true)](https://ci.appveyor.com/project/joliss/node-merge-trees/branch/master)

Symlink or copy multiple trees of files on top of each other, resulting in a single merged tree.

Optimized for repeated (incremental) merging.

## Installation

```bash
npm install --save merge-trees
```

## Usage

* `new MergeTrees(inputPaths, outputPath, options)`:

    * **`inputPaths`**: An array of paths to the input directories

    * **`outputPath`**: The path to the output directory. Must exist and be empty.

    * **`options`**: A hash of options

* `mergeTrees.merge()`: Merge the input directories into the output directory.
  Can be called repeatedly for efficient incremental merging.

### Options

* `overwrite`: By default, node-merge-trees throws an error when a file
  exists in multiple nodes. If you pass `{ overwrite: true }`, the output
  will contain the version of the file as it exists in the last input
  directory that contains it.

* `annotation`: A note to help with logging.

### Example

```js
var MergeTrees = require('merge-trees');

var mergeTrees = new MergeTrees(
  ['public', 'scripts'],
  'output-dir',
  { overwrite: true });

// Recursively symlink all files from the "public" and "scripts"
// directories into the "output-dir" directory.
mergeTrees.merge()

// ... add or remove files or directories in some input directories ...

// Incrementally update the output directory (efficient).
mergeTrees.merge()
```

Say the directory structure is as follows:

    .
    ├─ public
    │  ├─ index.html
    │  └─ images
    │     └─ logo.png
    ├─ scripts
    │  └─ app.js
    ├─ output-dir
    …

Running `mergeTrees.merge()` will generate this folder:

    .
    ├─ …
    └─ output-dir
       ├─ app.js
       ├─ index.html
       └─ images
          └─ logo.png

The parent folders, `public` and `scripts` in this case, are not included in the output. The output tree contains only the files *within* each folder, all mixed together.

## Contributing

Clone this repo and run the tests like so:

```
npm install
npm test
```

Issues and pull requests are welcome. If you change code, be sure to re-run
`npm test`. Oftentimes it's useful to add or update tests as well.

---
_Source: https://npm.io/package/merge-trees · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
