병합 드라이버를 사용하여 package-lock.json에서 Git 충돌 해결
package-lock.json
, yarn.lock
, Gemfile.lock
와 같은 자동 생성 파일 또는 Git 리포지토리 내에서 XML 형식으로 코드 커버리지 보고서(또는 테스트 결과)를 저장하는 파일을 사용하는 모든 사람은 이러한 파일에서 Git 충돌을 경험했습니다.이러한 종류의 충돌을 보다 원활하게 해결하는 방법을 살펴보겠습니다.
package-lock.json
파일을 삭제하고 npm install
를 다시 실행하거나 Yarn과 유사하게 실행할 수 있다는 것을 알고 계실 것입니다.rm package-lock.json
npm install
git add package-lock.json
그러나 Git은 이 문제를 자동으로 해결할 수 있습니다(또한 이 솔루션은 다른 자동 생성 파일 및 바이너리 파일(예: 이미지)에 대해 작동합니다).
힘내 속성
Git이 파일을 처리하는 방법을 수동으로 구성할 수 있는 Git 리포지토리의 루트에 배치된
.gitattributes
이라는 특수 파일을 생성할 수 있습니다. 예를 보자:# Auto detect text files and perform LF normalization
* text=auto
# JS and TS files must always use LF for tools to work
*.js eol=lf
*.ts eol=lf
# Use UTF-16 instead of UTF-8 for C source files.
*.c working-tree-encoding=UTF-16LE-BOM
# Mark all JPEG files as binary.
*.jpg binary
# Handle as a text file but merge as binary.
package-lock.json merge=binary
기본 제공 바이너리 병합 드라이버는 바이너리 파일을 병합할 수 없으므로 충돌이 발생하는 경우 Git은 사용자
package-lock.json
를 그대로 두지만 충돌 상태로 표시됩니다.💡 Git 리포지토리의 모든 사용자에게 적용하는 대신 이 속성을 유지하려면 동일한 구조의
.git/info/attributes
파일을 사용할 수 있습니다.업스트림 브랜치의 변경 사항이 필요한 경우 해당 버전을 확인하십시오.
git checkout --theirs package-lock.json
이는 사용자 지정 병합 드라이버를 사용하여 수행할 수도 있습니다. 👐
Git 병합 드라이버
병합 드라이버는 Git 충돌을 해결하려고 시도하며 사용자가 해결할 수 있습니다create your own. 우리 버전(
theirs
)보다 업스트림 버전( %B
)을 사용할 %A
라는 드라이버를 정의해 보겠습니다.git config --global merge.theirs.name "Keep upstream changes"
git config --global merge.theirs.driver "cp -f '%B' '%A'"
💡
--global
를 사용하여 컴퓨터의 모든 리포지토리에서 이 드라이버를 사용할 수 있도록 합니다.그런 다음
.gitattributes
(또는 .git/info/attributes
또는 ~/.config/git/attributes
) 파일에 다음을 추가합니다.package-lock.json merge=theirs
이제 모든 충돌은 업스트림 버전을 수락하는 드라이버에 의해 해결됩니다.
npm install
에 변경 사항을 다시 추가하려면 package-lock.json
를 실행해야 합니다. 이 드라이버는 충분히 똑똑하지 않기 때문에 잠금 파일에 대한 변경 사항을 무시합니다. package.json
에 대한 변경 사항과 파일을 동기화 상태로 유지해야 합니다.npm 병합 드라이버
npm 팀은 이전 드라이버보다 더 스마트하게 병합하는 npm-merge-drive을 만들었습니다. 이 드라이버는 덮어쓰기 😁를 수행하여 잠금 파일을
package.json
의 변경 사항과 동기화 상태로 유지합니다. 복제된 모든 리포지토리에 ~/.config/git/attributes
가 사용되기 때문에 동료에게 영향을 주지 않고 시스템에 전역적으로 설치할 수 있습니다.npx npm-merge-driver install --global
나쁜 부분은 이 리포지토리가 보관되어 있으며 어떤 업데이트도 수신하지 않는다는 것입니다. 🐛
git-json-merge 과 같은 다른 유형의 파일에 대해서도 npm 레지스트리에서 다른 병합 드라이버를 찾을 수 있습니다.
결론
이제
.gitattributes
를 사용하여 줄 끝과 fix encodings on Windows 을 처리하는 방법을 배웠습니다.자동 생성된 파일을
binary
또는 텍스트로 처리할 수 있지만 merge=binary
를 사용하거나 내장되지 않은 드라이버를 사용하여 자동으로 병합합니다.이러한 대용량 파일을 바이너리로 처리하는 long discussions about이 있습니다. Git은 모든 변경 사항을 압축하므로 저장소 크기가 바이너리
package-lock.json
파일로 손상되지 않습니다. 그것은 당신에게 달려 있습니다.의견에서 이러한 유형의 Git 충돌을 관리하는 방법을 알려주십시오.
Reference
이 문제에 관하여(병합 드라이버를 사용하여 package-lock.json에서 Git 충돌 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cloudx/resolving-git-conflicts-in-package-lockjson-using-a-merge-driver-2ipk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)