composer.lock을 버전 제어에 커밋하시겠습니까?
좀 헷갈리네요composer.lock저장소가 있는 응용 프로그램에서 사용됩니다.
이 '안'고 걸 봤어요..gitignore composer.lock저장소에서 가져옵니다.
하면 새 됩니다.composer.lock 저는 할 수
이 파일에서 충돌이 발생하지 않을까요?
libs를 업데이트하면 잠금 파일도 커밋해야 합니다.기본적으로 사용하고 있는 lib의 특정 버전에 프로젝트가 잠겨 있다고 명시되어 있습니다.
변경을 커밋했을 때 다른 사용자가 코드를 꺼내 의존관계를 갱신했을 경우 잠금파일은 변경되지 않습니다.수정이 되면 새로운 버전의 무언가를 가지고 있다는 것을 의미합니다.
저장소에 저장소가 있으면 각 개발자가 동일한 버전을 사용하고 있음을 확인할 수 있습니다.
응용 프로그램/프로젝트의 경우:확실히 그렇습니다.
컴포저 문서에는 다음과 같은 내용이 기재되어 있습니다(중요하게 기재되어 있습니다.
응용 프로그램의 composer.lock(composer.json과 함께)을 버전 관리로 커밋합니다.
@meza가 말한 것처럼:잠금 파일을 커밋하여 사용자와 공동작업자가 동일한 버전의 작업을 수행하도록 하고 "하지만 내 컴퓨터에서 작동했습니다."와 같은 말을 하지 않도록 해야 합니다. ;-)
라이브러리의 경우: 아마 아닐 겁니다.
이 문제에 대해서는 컴포저 매뉴얼에 기재되어 있습니다.
주의: 라이브러리의 경우 잠금 파일(...)을 반드시 커밋하는 것은 권장되지 않습니다.
그리고 다음과 같습니다.
라이브러리의 composer.lock 파일을 커밋할 수 있습니다.이를 통해 팀은 항상 동일한 종속성 버전과 비교하여 테스트할 수 있습니다.그러나 이 잠금 파일은 이 파일에 종속된 다른 프로젝트에는 영향을 미치지 않습니다.그것은 본 프로젝트에만 영향을 미칩니다.
도서관에 대해서는 @Josh Johnson의 답변에 동의합니다.
두 가지 , 제은 '두 가지 다'입니다.composer.lock프로젝트의 일부로 커밋해서는 안 됩니다.
composer.lock프로젝트의 일부가 아닌 빌드 메타데이터입니다.의존관계 상태는 버전 관리 방법(수동 또는 자동 빌드 프로세스의 일부)을 통해 제어해야 하며 마지막으로 업데이트하고 잠금 파일을 커밋한 개발자가 임의로 제어해서는 안 됩니다.
Composer 업데이트 간의 종속성 변경이 우려되는 경우 버전 관리 방식을 신뢰할 수 없습니다.버전(1.0, 1.1, 1.2 등)은 불변해야 하며 "dev-" 및 "X"는 피해야 합니다.*" 와일드카드는 초기 기능 개발 외입니다.
이제 종속성 버전이 암묵적으로 정의되어 있으므로 잠금 파일을 커밋하는 것은 종속성 관리 시스템에 대한 회귀입니다.
또한 프로젝트를 재구축하거나 의존관계를 각 환경에서 재취득할 필요가 없습니다.특히 Prod.성과물(tar, zip, par, 디렉토리 등)은 변하지 않고 환경 전체에서 승격되어야 합니다.
- 운영 환경에 직접 종속성을 업데이트해서는 안 됩니다.
- composer.lock 파일의 버전을 관리해야 합니다.
- 실제 의존관계를 버전 관리하지 마십시오.
1. 코드 안정성에 어떤 영향을 미칠지 모르기 때문에 프로덕션에서 직접 종속성을 업데이트해서는 안 됩니다.새로운 의존관계로 인한 버그가 있을 수 있습니다.코드가 자신의 의존관계에 영향을 주는 동작방식이 바뀌거나 다른 의존관계와 호환되지 않을 수 있습니다.적절한 QA 및 회귀 테스트 등을 거쳐 개발 환경에서 이를 수행해야 합니다.
2. composer.lock 파일을 버전 관리해야 합니다.이것은, 코드의 현재 상태를 복제할 수 있는 의존 관계와 의존 관계에 관한 정보를 보존하기 때문입니다.테스트 및 개발은 모두 특정 코드에 따라 이루어졌기 때문에 이것은 중요합니다.사용하고 있는 코드의 실제 버전에 신경쓰지 않는 것은, 코드의 변경을 애플리케이션에 업 로드해 테스트하지 않는 것과 같습니다.종속성 버전을 업그레이드하는 경우 이는 자발적으로 수행해야 하며 모든 기능이 계속 작동하는지 확인하기 위해 필요한 주의를 기울여야 합니다.이전 릴리스 버전으로 되돌리는 데 걸리는 업타임을 1~2시간 단축하면 비용이 많이 들 수 있습니다.
composer.lock이 필요하지 않은 이유 중 하나는 composer.json 파일에 필요한 버전을 설정할 수 있다는 것입니다.이 방법으로 누군가가 실행할 때마다composer install 됩니다.의존관계는 독자적인 의존관계가 있기 때문에 그렇지 않습니다.또한 이러한 의존관계는 서브버전 또는 전체 버전에 대한 갱신을 허용하는 형식으로 지정될 수 있습니다.
즉, composer.json에 Larabel 4.1.31을 지정하더라도 composer.json 파일에 있는 Larabel은 Symfony event-dispatcher: 2.*. 이러한 구성에서는 Symfony event-dispatcher 2.11을 사용할 수 있습니다.팀원 중 누군가가 Larabel 4.1.31과 event-dispatchher 2.6.5를 함께 사용할 수 있습니다.이 모든 것은 작곡가 설치를 언제 마지막으로 실행했는지에 따라 달라집니다.
따라서 버전 시스템에 composer.lock 파일이 있으면 이 하위 종속성의 정확한 버전이 저장되므로 사용자와 팀원이 composer를 설치할 때(이 방법은 composer.lock을 기반으로 종속성을 설치하는 방법) 두 가지 버전이 모두 동일합니다.
데이면면면면면면면면? 개발 을 실행합니다.composer update새로운 composer.lock 파일(새로운 파일이 있는 경우)이 생성되고 테스트 후 QA 테스트 및 회귀 테스트 등이 이루어집니다.업그레이드해도 안전하므로 다른 모든 사용자가 새 composer.lock을 다운로드할 수 있습니다.
3. 실제 의존관계를 버전 관리하지 마십시오. 이는 말이 안 됩니다.composer.lock을 사용하면 정확한 버전의 종속성을 설치할 수 있으며 종속성을 커밋할 필요가 없습니다.종속성이 있는 파일을 업데이트해서는 안 되는데 왜 repo 10000 파일에 추가합니까?이 중 하나를 변경해야 할 경우 포크로 이동하여 변경해야 합니다.빌드 또는 릴리스 시마다 실제 종속성을 가져와야 하는 경우, composer는 이 문제를 완화하는 다양한 방법, 캐시, zip 파일 등을 사용할 수 있습니다.
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,
composer.json프로젝트와 팀의 다른 모든 사용자가 Composer 설치를 실행하여 프로젝트 종속성을 설치할 수 있습니다.잠금 파일의 요점은 설치된 버전을 정확하게 기록하여 다시 설치할 수 있도록 하는 것입니다.즉, 버전 사양이 1.*이고 동료가 1.2.4를 설치하는 Composer 업데이트를 실행한 후 Composer.lock 파일을 커밋하면 1.3.0이 출시되어도 1.2.4가 됩니다.그러면 프로젝트에서 작업하는 모든 사람이 동일한 버전을 가질 수 있습니다.
즉, 마지막으로 컴포저 설치를 수행한 이후 커밋된 것이 있으면 잠금 파일이 없으면 새로운 서드파티 코드가 풀다운됩니다.
다시 말씀드리지만, 코드 해독이 우려되는 경우 이 문제가 발생합니다.Composer를 composer.lock 파일 중심으로 생각하는 것이 중요한 이유 중 하나입니다.
출처: Composer: 잠금 파일에 관한 모든 것입니다.
응용 프로그램의 composer.lock(composer.json과 함께)을 버전 관리로 커밋합니다.install 명령어는 잠금파일이 존재하는지 여부를 확인하고 존재하면 지정된 버전을 다운로드하기 때문에 이 작업은 중요합니다(composer.json의 설명에 관계없이).즉, 프로젝트를 설정하는 모든 사용자가 동일한 버전의 종속성을 다운로드하게 됩니다.CI 서버, 프로덕션 머신, 팀의 다른 개발자 등 모든 사람이 동일한 의존관계로 실행되므로 배포의 일부에만 영향을 미치는 버그가 발생할 가능성을 줄일 수 있습니다.독자적으로 개발하더라도 프로젝트를 재설치할 때 6개월 이내에 설치된 의존관계는 그 이후 많은 새로운 버전이 출시되어도 여전히 기능하고 있음을 확신할 수 있습니다.
해체가 「코드의 파괴」를 해 .composer.lock모든 프로젝트 공동작업자가 동일한 버전의 코드를 사용할 수 있도록 버전 관리 시스템에 문의하십시오.잠금 파일이 없으면 매번 새로운 서드파티 코드가 풀다운됩니다.
설치 시 종속성을 업데이트해야 하는 라이브러리인 메타 앱을 사용하는 경우는 예외입니다(Zend Framework 2 Strone App 등).따라서 개발을 시작할 때마다 최신 종속성을 파악하는 것이 목표입니다.
출처: Composer: 중요한 것은 잠금 파일
다음 항목도 참조하십시오.Composer 업데이트와 Composer 설치의 차이점은 무엇입니까?
네, 물론입니다.
이는 로컬에 설치된 작곡가가 composer.json보다 composer.lock 파일을 우선하기 때문입니다.
VCS에서 잠금 파일을 사용할 수 없는 경우 컴포저는 composer.json 파일을 가리키며 최신 종속성 또는 버전을 설치합니다.
composer.lock 파일은 의존관계를 보다 상세하게 유지합니다.즉, 소프트웨어에 포함되어 있는 패키지 버전의 실제 커밋을 나타냅니다.따라서 이 파일은 의존관계를 보다 상세하게 처리하는 가장 중요한 파일 중 하나입니다.
이에 대한 정확한 답은 없습니다.
일반적으로 Composer는 빌드 시스템의 기능을 수행해서는 안 되며 VCS에 composer.lock을 배치해서는 안 됩니다.작곡가가 이상하게 거꾸로 생각할 수도 있어요.최종사용자는생산이아닌잠금파일을사용해서는안됩니다.일반적으로 빌드 시스템은 매번 빈 dir가 아니라 스냅샷, 재사용 가능한 dir 등을 보관합니다.composer에서 lib를 체크아웃하는 사람들은 lib가 로드하는 종속성이 테스트되도록 해당 lib에서 잠금을 사용할 수 있습니다.
한편, 버전 관리의 부담이 큰 것은 의존관계가 엄격히 잠겨 있기 때문에 모든 라이브러리의 여러 버전을 필요로 하는 것이 거의 확실하기 때문입니다.모든 라이브러리의 버전이 약간 다를 경우 여러 라이브러리 버전 지원이 필요합니다.또한 필요한 의존관계 크기를 빠르게 파악할 수 있으므로 리프에서 유지하도록 권장합니다.
이 점을 고려해 볼 때, 잠금 파일이 라이브러리나 자신의 작업 환경에 유용하다고는 생각하지 않습니다.외부에서 취득한 자산을 요청 시에만 갱신하여 테스트, 구축 및 도입에 반복 가능한 빌드를 제공하는 빌드/테스트 플랫폼에서만 사용할 수 있습니다.이 트리는 VCS에서 항상 소스 트리와 함께 유지되지는 않지만 빌드 트리는 VCS 구조의 다른 위치에 있거나 다른 시스템에 의해 관리됩니다.VCS에 저장된 경우 소스 트리와 동일한 리포에 유지할지 여부가 논란이 됩니다. 그렇지 않으면 풀 때마다 빌드 자산이 대량으로 발생할 수 있기 때문입니다.저는 생산/민감한 자격 증명과 부풀어 오른 것을 제외하고 모든 것을 잘 정돈된 레포에 넣는 것을 매우 좋아합니다.
SVN은 전체 repo를 강제로 취득하지 않기 때문에 git보다 더 잘 할 수 있습니다(그러나 실제로 git에 대해서도 반드시 필요한 것은 아니지만, 그 지원은 한정되어 있어 일반적으로 사용되고 있지 않습니다).단순 빌드 저장소는 일반적으로 빌드 트리를 병합/내보내는 오버레이 분기일 뿐입니다.어떤 사람들은 소스 트리에서 엄청난 자원을 결합하거나 더 나아가 외부, 빌드 및 소스 트리를 분리한다.일반적으로 빌드 캐싱과 반복 가능한 빌드라는 두 가지 목적을 제공하지만, 때로는 적어도 어느 수준에서는 분리하여 새로운/빈 빌드 및 여러 빌드를 쉽게 수행할 수도 있습니다.
여기에는 여러 가지 전략이 있으며 소스 트리에 외부 소스를 보관하지 않는 한 소스 목록을 유지하는 데 특히 적합한 전략은 없습니다.
파일에 해시 같은 것도 있는데, 두 사람이 패키지를 업데이트 할 때 어떻게 결합하나요?그것만으로도 당신은 이것이 잘못 이해된 것이라고 생각하게 될 것이다.
잠금 파일에 대해 사람들이 제기하는 주장은 문제에 대해 매우 구체적이고 제한적인 견해를 가진 경우입니다.반복 가능한 빌드와 일관된 빌드를 원하십니까?VCS에 벤더 폴더를 포함합니다.또한 빌드 중에 손상된 외부 리소스에 의존할 필요 없이 자산을 빠르게 가져올 수 있습니다.반드시 필요한 경우를 제외하고 구축 및 도입 파이프라인은 외부 접근이 필요하지 않습니다.외부 리소스를 업데이트해야 하는 경우 한 번만 업데이트해야 합니다.컴포저가 달성하려고 하는 것은, 이전에 설명한 것을 제외하고, 분산형 시스템에서는 의미가 없습니다.이는 일반적인 충돌과 업데이트 속도가 패키지 업데이트 속도만큼 느려지는 라이브러리 업데이트의 의존성이 저하되기 때문입니다.
그리고 맹렬하게 업데이트를 합니다.개발할 때마다 모든 것을 업데이트하고 테스트합니다.중요한 버전 표류가 몰래 들어갈 수 있는 아주 작은 창이 있습니다.현실적으로도 시멘틱 버전 관리가 유지되고 있는 경우(작곡가용) 호환성 문제나 파손은 그다지 많지 않습니다.
composer.json에 필요한 패키지와 해당 버전을 입력합니다.거기서 버전을 잠글 수 있습니다.그러나 이러한 패키지는 composer.json에 의해 잠기지 않는 동적 버전과도 관계가 있기 때문에(버전을 잠그고 싶은 경우 직접 패키지에 넣을 수 없는 이유를 알 수 없습니다).따라서 다른 사용자가 composer install을 실행하고 있는 경우 잠금 없이 뭔가 다른 것을 얻을 수 있습니다.별로 신경 안 쓸 수도 있고 신경 쓸 수도 있어요신경써야 하나요?어떠한 상황이나 잠재적인 영향에 대해서도 충분히 인지할 수 있을 것입니다만, 우선 DRY를 실행해, 갱신한 것을 수정하는 것만으로 충분한 시간이 있는 경우에서도 문제가 되지 않을 수 있습니다.
이 번거로운 작곡가는 때때로 존재하지 않는 것을 피하기 위해 노력하고 있으며, 작곡가 잠금 파일이 있어야 하는 번거로움이 매우 큽니다.고객은 빌드 자산과 소스 자산(VCS에 별도로 가입할지 여부)에 대해 사용자에게 무엇을 해야 하는지 또는 하지 말아야 하는지 말할 권리가 전혀 없습니다. 이러한 작업은 고객이나 제 보스가 아닙니다."작곡가"는 권위도 아니고, 당신의 상관도 아니며, 이 주제에 대해 어느 누구에게도 우월감을 주지 않습니다.오직 당신만이 당신의 실제 상황과 그것에 대한 최선책을 알고 있습니다.단, 어떤 경우에 어떻게 동작하는지 이해하지 못하는 사용자에게 기본 행동 방침을 조언할 수도 있지만, 개인적으로는 이것이 어떻게 동작하는지 알고 요건을 적절하게 조정할 수 있는 진정한 대안이라고 생각하지 않습니다.궁극적으로, 그 질문에 대한 그들의 대답은 최선의 추측이다.작곡가를 만드는 사람들은 당신이 어디에 당신의 composer.lock을 보관해야 하는지 알지 못한다.그들의 유일한 책임은 그것이 무엇이고 무엇을 하는지 당신에게 말하는 것입니다.그 외에는 무엇이 당신에게 최선인지 결정해야 합니다.
컴포넌트는 잠금과 JSON 중 어느 쪽을 사용하는지에 대해 매우 비밀스럽고 두 가지 파일을 함께 사용하는 것이 항상 좋은 것은 아니기 때문에 잠금 파일을 보관하는 것은 사용에 문제가 있습니다.install을 실행하면 lock 파일만 사용되므로 composer.json에 무언가를 추가하면 잠금이 아니기 때문에 설치가 되지 않습니다.json/lock 파일에 대해 실제로 어떤 작업을 수행하고 있는지 전혀 직관적이지 않으며, 때로는 이치에 맞지 않을 수도 있습니다(도움말에서 패키지 이름을 사용하려고 하면 no라고 합니다).
잠금을 업데이트하거나 기본적으로 json에서 변경된 내용을 적용하려면 업데이트를 사용해야 하며 모든 내용을 업데이트하지 않을 수도 있습니다.잠금은 설치할 대상을 선택하는 데 우선합니다.자물쇠 파일이 있으면 그걸 사용하는 거야업데이트를 다소 제한할 수 있지만 시스템은 여전히 엉망입니다.
업데이트에는 1년, RAM 용량(GB)이 소요됩니다.한동안 손대지 않은 프로젝트를 보면 시간이 더 오래 걸리고 효율적으로 진행되지 않아 목이 졸릴 수도 있습니다.
컴포지트 명령어를 조합할 수 없는 비밀 컴포지트 명령어는 매우 교활합니다.기본적으로 composer remove 명령은 composer 업데이트 및 composer 제거에 매핑됩니다.
정말로 필요한 것은, 소스 트리의 잠금을 유지할 것인지, 또는 어떤 형태로든 잠금을 유지할 것인지를 묻는 것이 아니라, 실제로 무엇을 하고 있는지, 그리고 언제 어디에서 잠금을 유지할 것인지를 스스로 결정할 수 있는 것입니다.
견고한 외부 의존관계 지속전략을 가지고 있을 때 잠금기능을 갖는 것은 매우 편리하다는 것을 지적합니다.이는 발신기지 추적 및 갱신에 도움이 되는 정보를 추적하기 위한 것입니다만, 그렇지 않은 경우는, 그 어느 쪽도 존재하지 않습니다.소스 트리를 오염시키는 필수 선택사항으로 강제로 목구멍에 집어넣을 때는 유용하지 않습니다.composer.json에 많은 변경을 가한 레거시 코드베이스를 볼 수 있습니다.이 변경은 실제로 적용되지 않아 작곡가를 사용하려고 하면 고장납니다.composer.lock, desync 문제 없음.
이 질문에 대한 답은 여기 발판에서 충분히 나와 있습니다.
TL;DR
확실히, vc는composer.lock
하지만 제가 지금 말하려는 것은 왜
composer.json 역할
composer.json은 php 패키지의 의존관계 매니페스트의 엔트리 포인트입니다.
패키지 개발자가 시멘틱 버전 관리를 따르도록 규정해 왔다.
따라서 x.y.z의 api 버전(x)이 변경된 경우 주의해야 할 사항이 있거나 버전을 일부에 잠글 수 있습니다."~x"버전입니다.
semversion 뒤에 있는 일부 패키지
단, 규칙을 따르지 않는 패키지가 다수 있었습니다(5.3 및 5.4 api 레벨이 변경 또는 파손되었습니다).
- 이 semversion 원리를 따르지 않음(api 수준 변경)
- 새로운 패키지는 오래된 api와 호환되지 않습니다(테스트가 잘 되어 있지 않고 파손되어 있지 않습니다.
솔루션 composer.lock
작곡가가 해결책을 생각해 냈습니다.패키지 버전을 잠그는 다른 파일.(param.
패키지 버전이 정확하게 저장되어 있기 때문에 동일한 종속 버전을 원하는 경우 패키지의 이점을 누릴 수 있습니다.
모든 배치 간에 매니페스토를 동일하게 유지하다
최신 웹 개발 원칙의 12가지 요소 중 하나는 의존성을 모든 배치에서 동일하게 유지하여 모든 배치에서 테스트할 수 있도록 하는 것입니다.또한 이들 사이에 위축이 발생하지 않습니다.
이 경우:
composer.lock을 버전 관리 하에 두어야 합니다.
제작에는 다음과 같은 이점이 있습니다.
composer install --no-dev
VC 제어 잠금 파일에서 모든 것을 설치합니다.전에 완전히 테스트를 받은 적이 있는 병실입니다.
composer.json 및 composer.lock 최종 사용자
composer.json개발자가 디폴트 및 버전에 대해 결론을 내릴 수 있는 최소 파일입니다.
그 사이에composer.lock는, 전개(머신)가 전개에 정확한 버전 번호를 인스톨 하기 위해서 사용하는 것을 목적으로 하고 있습니다.
유추
ip와 domains의 유추와 같습니다.
기계에서 사용하기 위한 ip(잠금 파일)
인간이 사용하도록 의도된 도메인(json)
그러나 인간(개발자)과 기계(개발자)는 모두 읽을 수 있고 둘 다에서 이익을 얻을 수 있지만, 각각에 대해 더 바람직한 버전이 있습니다.
Heroku에 있는 모든 사람에게 답은 "그렇다, 그것은 커밋되어야 한다"입니다.
if
composer.json모든 종류의 의존관계를 지정합니다.require,하는 「」, 「」.composer.lockthat that 。composer update이치노그렇지 않으면 푸시가 거부됩니다.
출처: Heroku PHP 지원: 액티베이션
언급URL : https://stackoverflow.com/questions/12896780/should-composer-lock-be-committed-to-version-control
'programing' 카테고리의 다른 글
| MAC 주소 가져오기 (0) | 2023.04.14 |
|---|---|
| IValueConverter 인터페이스에서 ConvertBack 메서드는 어떤 용도로 사용됩니까? (0) | 2023.04.14 |
| 사용 중인 Swift 버전을 확인하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
| iOS에서 프로그램 방식으로 자체 전화 번호 가져오기 (0) | 2023.04.14 |
| 언와인드 세그를 프로그래밍 방식으로 실행하는 방법 (0) | 2023.04.14 |