To start using it right away:
$ npx npm-merge-driver install --global
Or install it locally, per-project:
$ cd /path/to/git/repository
$ npx npm-merge-driver install
...And you're good to go!
Next time your lockfile has a conflict, it will be automatically fixed. You don't need to do anything else.
$ npx npm-merge-driver install
$ git merge my-conflicting-branch
npm WARN conflict A git conflict was detected in package-lock.json. Attempting to auto-resolve.
added 1 package in 0.077s
Auto-merging package-lock.json
Merge made by the 'recursive' strategy.
package-lock.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
$ git status
<clean>
The following section is only for advanced configuration of the driver if you have specific needs.
npm-merge-driver install
supports a couple of config options:
--driver
- string to install as the driver in the git configuration
--driver-name
- string to use as the merge driver name in your configuration
--files
- list of files that will trigger this driver
--no-legacy
- disables retrying legacy commands on error
npm-merge-driver merge
can also be configured:
-c, --command
- command to execute when a lockfile is conflicted
--no-legacy
- disables retrying legacy commands on error
To avoid regular npx
installs, consider installing the driver:
$ npm install [-g|--save-dev] npm-merge-driver
npm-merge-driver
requires two git configurations to work: a git configuration
to add the driver to git, which is by default your local .git/config
file, and
a gitattributes(5)
configuration, which is by default your local
.git/info/attributes
.
If you do not want npm-merge-driver
to install itself for you:
Add the driver to .git/config
:
$ git config merge."npm-merge-driver".name \
"Automatically merge npm lockfiles"
$ git config merge."npm-merge-driver".driver \
"npx npm-merge-driver merge %A %O %B %P"
Add the relevant attributes to .gitattributes
or .git/info/attributes
:
package-lock.json merge=npm-merge-driver
npm-shrinkwrap.json merge=npm-merge-driver
npm-merge-driver
can be used with package managers other than npm! It's a bit
more verbose, but works just as well, assuming the package manager has a command
that can automatically resolve merge conflicts in its lockfile:
$ npx npm-merge-driver install \
--driver-name yarn-merge-driver \
--driver "npx npm-merge-driver merge %A %O %B %P -c yarn" \
--files yarn.lock
...and now, any time yarn.lock
has a conflict, it will be automatically
resolved without you having to manually run yarn
.
To remove an installed merge driver, use npm-merge-driver uninstall
:
$ npx npm-merge-driver uninstall [--global] [--driver-name=npm-merge-driver]
Written by Kat Marchan
Please file any relevant issues on Github.
This work is released under the terms of the ISC license. See LICENSE.md
for details.
git-config(1)
gitattributes(5)