Programming

git : 한 리포지토리의 커밋에 의해 도입 된 변경 사항을 다른 리포지토리에 적용

procodes 2020. 8. 6. 21:13
반응형

git : 한 리포지토리의 커밋에 의해 도입 된 변경 사항을 다른 리포지토리에 적용


나는이 repo1repo2로컬 컴퓨터에. 그것들은 매우 유사하지만 후자는 다른 종류의 지점입니다 ( repo1더 이상 유지되지 않습니다).

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

어떻게 커밋에 의해 변경 적용 <some_sha>repo1에를 repo2?

패치를 준비해야합니까, 아니면 cherry-pickrepos 사이에 패치를 작성해야 합니까?

동일하지만 커밋 범위에 대해 어떻게합니까?


해킹 으로 GitTips 페이지 에서 서로 다른 두 저장소의 커밋을 비교하기 위해 레시피를 수정 해 볼 수 있습니다 .

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

../repo다른 저장소의 경로는 어디 입니까?

최신 Git을 사용하면 cherry-pick 과 함께 여러 개정 및 개정 범위를 사용할 수 있습니다 .

$(git --git-dir=../repo/.git rev-parse --verify <commit>)번역 여기 <commit>(예 HEAD, 또는 v0.2또는 master~2커밋의 SHA-1 식별자로는 복사해서 제 리포지토리 값인하는). 선택하려는 변경 사항에 대한 SHA-1을 알고 있으면 필요하지 않습니다.

참고 가 다른 객체 저장소가 하나 개의 작업을 위해, 일시적 것을 알고하지 않습니다하지만 힘내, 소스 저장소에서 개체를 복사 건너 뛸 수있다. 다음을 사용하여 두 번째 저장소에서 오브젝트를 복사해야 할 수도 있습니다.

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

이것은 두 번째 저장소에서 빌린 객체를 원래 저장소 저장소에 넣습니다.

검증되지 않은.


그렇게 해킹 되지 않은 해결책은 knittl 답변 을 따르는 것입니다 .

  • 커밋을 복사하려는 두 번째 저장소로 이동하여 원하는 커밋에서 패치를 생성하십시오. git format-patch
  • 선택적으로 패치 (0001- * 등)를 저장소에 복사하십시오.
  • git am --3way패치 적용에 사용

당신은 아마 사용하려면 git format-patch다음 git am저장소에 그 패치를 적용 할 수 있습니다.

/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

당신은 할 수 cherry-pick있습니다 (다음 첫 번째에 원격으로 두 번째의 repo를 추가하는 경우 fetch).


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

반응형