Allow rebasing of npm-shrinkwrap

Change-type: patch
This commit is contained in:
Pagan Gazzard 2020-08-05 09:46:57 +01:00
parent 4496bc88f5
commit 3691ae148e
2 changed files with 6 additions and 18 deletions

3
.gitattributes vendored
View File

@ -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

View File

@ -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)
```