不,不应该。 该文件是纯文本文件,文件中可能存在您可能需要解决的合并冲突。
文档中写着不应该触及yarn.lock 文件以避免出现问题,只有yarn 本身应该处理它。 那么我如何解决合并冲突?
@kittens当存在冲突以
@dbashford把它吹走并重新运行纱线的问题是你会得到比你想要的更多的变化。 例如,波浪号版本将升级,即使您没有运行yarn upgrade
。
@dbashford然后更容易放置纱线。 在 gitignore 中锁定文件
到目前为止对我有用的方法是这样的:
git rebase origin/master
当第一个冲突出现时,我检出yarn.lock
然后重新执行安装
git checkout origin/master -- yarn.lock
yarn install
这会根据yarn.lock
的原始/主版本生成一个新的yarn.lock
,但包括我对package.json
所做的更改。 那么这只是一个问题:
git add yarn.lock
git rebase --continue
我又回来做生意了。
请注意,即使您没有手动解决合并冲突,将其设为非二进制文件也意味着您可以看到合并冲突,这仍然是有价值的信息。
相关的,即使有 _no_ 合并冲突,我们是否总是可以假设 git 已经以导致有效/正确文件的方式合并了一个 yarn.lock 文件的两个版本? 如果 yarn 是唯一应该管理其内容的工具,那么让 git 更新文件的内容似乎是错误的。
我不确定自动合并 YAML 总是会产生一个有效的文件,尤其是在以下情况下:
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
readable-stream@~2.1.4:
version "2.1.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
@IanVS感谢您的演练! 但@idris的担忧仍然适用于这个解决方案。 您最终会以这种方式升级很多依赖项,这可能出乎意料。
@danny-andrews 你能解释一下吗?
当您清除yarn.lock
并重新运行yarn install
,整个yarn.lock
将使用满足package.json
指定的版本范围的最新版本的依赖项重新构建,有效地升级自上次运行yarn install
以来发生变化的任何依赖项。
这就是为什么我建议git checkout origin/master -- yarn.lock
而不是删除yarn.lock
。 这会将您的yarn.lock
重置yarn install
仅更新您的package.json
(当然还有它们的子部门)中已更改的包.
@IanVS是的,这是正确的做法。
虽然我推荐git checkout -- yarn.lock
,它更通用,只是将其重置为您当前分支上提交的任何内容。
好点,@idris。 我通常会变基到 master,这是我上面使用的示例,但情况并非总是如此。
@IanVS我不明白那个命令做了什么。 这比我一直在做的手动复制和粘贴yarn.lock
好得多。 感谢分享!
这是相关的:#3544
@IanVS的方法与将yarn.lock
之上重放你的yarn install
。
这是我的方法,添加一个 bash 脚本
#!/usr/bin/env bash
export GIT_TRACE=1
git checkout origin/master -- Pipfile.lock Pipfile
git commit -m "fetch to branch Pipfile.lock, Pipfile from origin/master" -- Pipfile.lock Pipfile
read -n 1 -p "Do your changes in Pipfile and press Enter ..."
pipenv lock --clear
git commit -m "re-apply changes to Pipfile.lock, Pipfile" -- Pipfile.lock Pipfile
echo "Done"
最有用的评论
到目前为止对我有用的方法是这样的:
当第一个冲突出现时,我检出
yarn.lock
然后重新执行安装这会根据
yarn.lock
的原始/主版本生成一个新的yarn.lock
,但包括我对package.json
所做的更改。 那么这只是一个问题:我又回来做生意了。