source

git: 한 레포에서 커밋에 의해 도입된 변경 사항을 다른 레포에 적용합니다.

manycodes 2023. 9. 3. 16:24
반응형

git: 한 레포에서 커밋에 의해 도입된 변경 사항을 다른 레포에 적용합니다.

나는 있습니다repo1그리고.repo2로컬 기계에서.그들은 매우 비슷하지만, 후자는 다른 종류의 가지입니다.repo1더 이상 유지 관리되지 않음).

/path/to/repo1 $ git log HEAD~5..HEAD~4
<some_sha> Add: Introduce feature X

커밋에 의해 변경된 내용을 적용하는 방법<some_sha>repo1로.repo2?

패치를 준비해야 합니까, 아니면 가능합니까?cherry-pick저장소 사이에?

커밋 범위를 제외하고 동일하게 하는 것은 어떻습니까?

를 사용하여 해당 패치를 리포지토리에 적용할 수 있습니다.

/path/to/1 $ git format-patch sha1^..sha1
/path/to/1 $ cd /path/to/2
/path/to/2 $ git am -3 /path/to/1/0001-…-….patch

또는 한 줄로:

/path/to/2 $ git --git-dir=/path/to/1/.git format-patch --stdout sha1^..sha1 | git am -3

두 번째 레포를 첫 번째 레포에 원격으로 추가하면 할 수 있습니다.fetch).

Hack은 GitTips 페이지에서 두 개의 서로 다른 저장소에 있는 커밋을 비교하기 위한 레시피를 수정할 수 있습니다. 예를 들어, 다음과 같습니다.

GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)

어디에../repo다른 리포지토리의 경로입니다.

최신 Git에서는 체리 과 함께 여러 개의 수정 및 수정 범위를 사용할 수 있습니다.

$(git --git-dir=../repo/.git rev-parse --verify <commit>)번역하러 왔습니다.<commit>(예:HEAD또는v0.2또는master~2SHA-1 커밋 식별자로 복사하는 두 번째 저장소의 값입니다.선택하고자 하는 변경사항의 SHA-1을 알고 있는 경우에는 필요하지 않습니다.

그러나 Git는 대체 개체 저장소가 한 번의 작업에 대해 일시적이라는 것을 알지 못하기 때문에 소스 저장소에서 개체를 복사하는 작업을 건너뛸 수 있습니다.다음을 사용하여 두 번째 저장소에서 개체를 복사해야 할 수 있습니다.

GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f

그러면 두 번째 리포지토리에서 빌린 개체가 원래 리포지토리 스토리지에 저장됩니다.

테스트되지 않았습니다.


그렇게 촌스럽지 않은 해결책은 간결한 답변을 따르는 것입니다.

  • 커밋을 복사할 두 번째 저장소로 이동하고 원하는 커밋에서 패치를 생성합니다.git format-patch
  • 필요한 경우 패치(0001-* 등)를 저장소에 복사합니다.
  • 사용하다git am --3way패치를 적용하다

repo diff https://github.com/raghakh/android-dev-scripts/commit/a57dcba727d271bf2116f981392b0dcbb22734d0 의 diff 출력을 적용하기 위한 작은 스크립트를 작성했습니다.

언급URL : https://stackoverflow.com/questions/3816040/git-apply-changes-introduced-by-commit-in-one-repo-to-another-repo

반응형