몇 년 전에 간단한 CMS를 작성 했으므로이 CMS에 대해 여러 개의 분기가 있고 모든 분기에서 사용 된 파일을 업데이트하려고합니다. 이후 버전 1부터는 변경되지 않습니다.git 버전 제어의 모든 브랜치에서 파일을 업데이트 할 수 있습니까?
이 파일을 어떻게 업데이트 할 수 있습니까? 모든 가지에게 그렇게하라고 말합니까?
몇 년 전에 간단한 CMS를 작성 했으므로이 CMS에 대해 여러 개의 분기가 있고 모든 분기에서 사용 된 파일을 업데이트하려고합니다. 이후 버전 1부터는 변경되지 않습니다.git 버전 제어의 모든 브랜치에서 파일을 업데이트 할 수 있습니까?
이 파일을 어떻게 업데이트 할 수 있습니까? 모든 가지에게 그렇게하라고 말합니까?
귀하의 우선 순위에 따라 다릅니다.
파일이 이전에 변경된 적이 없기 때문에 처음에 추가 된 커밋은 변경 사항을 적용 할 새 분기를 만들 수있는 적절한 "공통 루트"여야합니다. 그것을 모든 지점에 병합하십시오. 이 접근법은 프로젝트의 실제 역사를 가장 잘 반영합니다.
물론 아래쪽은 많은 병합 작업입니다. 가지가 많으면 모든 병합을 적용하는 것이 지루할 수 있습니다 (변경하지 않은 파일을 수정한다는 생각으로 계산하면 자동화 할 수 있지만 충돌이 없어야합니다). 또한 이러한 병합은 각 지점의 기록에 추가됩니다. 제게 그것은 나쁜 것이 아닙니다. 다시 정확한 역사입니다. 그러나 어떤 사람들은 "복잡한"커밋 토폴로지를 싫어합니다. 그래서 그것은 당신이 고려하기로 마음 먹을만한 것입니다.
다른 옵션은 기록을 다시 쓰는 것입니다. 여기에는 몇 가지 단점이 있습니다. 모든 커밋 ID 값이 변경됩니다. 어떤 종류의 도구 나 문서에서 커밋 ID를 사용하면 문제가 될 수 있습니다. 그리고 repo의 클론을 가진 다른 사용자가있는 경우 본질적으로 대량의 "업스트림 리베이스"와 같은 조건을 복구해야합니다. 또한 다시 작성된 기록은 코드가 실제로 보였던 것을 반영하지 않습니다. 그러나 당신이 그런 것들에 관심이 없다면, 이것은하기가 더 쉽고 커밋 토폴로지를 변경하지 않아도됩니다.
그래서 가장 쉬운 방법은 filter-branch
입니다.
git filter-branch tree-filter='cp /some/path/to/new/version worktree/path/to/old/version' -- --all
당신은 아마 더 빠를 것 대신 tree-filter
의 index-filter
을 사용하는 방법을 일할 수있는 -하지만 확실히 쉬운 일이 아니다.
파일을 변경하려면 새 분기를 만들어야합니다. 그런 다음 해당 분기를 다른 모든 분기로 병합 할 수 있습니다. 이렇게하면 새 분기의 모든 변경 사항을 병합 한 각 분기에 추가합니다.
이 분기는 가장 오래된 공통 커밋부터 시작해야합니다. – Philippe