diff --git a/.gitattributes b/.gitattributes index 074c5c10..04020ff1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,3 @@ doc/cli.markdown text eol=lf # crlf for the eol conversion test files tests/test-data/projects/docker-compose/basic/service2/file2-crlf.sh eol=crlf tests/test-data/projects/no-docker-compose/basic/src/windows-crlf.sh eol=crlf - -# Prevent auto merging of the npm-shrinkwrap.json file: see notes in CONTRIBUTING.md -/npm-shrinkwrap.json merge=binary diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8f1a2eb4..9cc60e8b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,27 +98,18 @@ Meanwhile, as a text (JSON) file, `git` is capable of merging the `npm-shrinkwra operations like `rebase`, `cherry-pick` and `pull`. But git's automated merge is not the recommended way of updating the `npm-shrinkwrap.json` file, because it does not take into account duplicates or conflicts in the dependency tree, or indeed the state of the `package.json` file -(which may have just been merged). In extreme cases, the automated merge may actually result in a -broken installation. For these reasons, automatic merging of the `npm-shrinkwrap.json` was disabled -through the `.gitattributes` file (the "binary merge driver" allows diff'ing but prevents automatic -merging). Operations like `git rebase` may then result in an error like: - -```text -$ git rebase master -warning: Cannot merge binary files: npm-shrinkwrap.json (HEAD vs. c34942b9... test) -Auto-merging npm-shrinkwrap.json -CONFLICT (content): Merge conflict in npm-shrinkwrap.json -error: Failed to merge in the changes. +(which may have just been merged). You can improve this by installing the npm merge driver with: +``` +npx npm-merge-driver install -g ``` Whether or not there is a merge error, the following commands are the recommended way of updating and committing the `npm-shrinkwrap.json` file: ```bash -$ rm -rf node_modules # Linux / Mac -$ rmdir /s node_modules # Windows Command Prompt -$ npm checkout master -- npm-shrinkwrap.json # revert it to the master branch state -$ npm install # "cleanly" update the npm-shrinkwrap.json file +$ npm install # fetch the latest modules update the npm-shrinkwrap.json file +$ npm dedupe # deduplicate dependencies from the npm-shrinkwrap.json file +$ npm install # re-add optional dependencies for other platforms that may have been removed by dedupe $ git add npm-shrinkwrap.json # add it for committing (solve merge errors) ```