development

다른 포크에서 병합되지 않은 업스트림 풀 요청을 포크에 적용하는 방법은 무엇입니까?

big-blog 2020. 2. 17. 22:22
반응형

다른 포크에서 병합되지 않은 업스트림 풀 요청을 포크에 적용하는 방법은 무엇입니까?


포크가있는 GitHub의 프로젝트에는 작성자가 아직 가져 오지 않은 포크로 끌어 오기를 원하는 새 끌어 오기 요청이 있습니다.

다른 포크의 풀 요청을 내 포크에 적용하는 간단한 방법이 있습니까? 여기에 내가 놓친 다른 것이 있습니까?


수동으로 쉽게 할 수 있습니다.

  • 다른 포크를 리포지토리의 원격으로 추가하십시오.

    git remote add otherfork git://github.com/request-author/project.git
    
  • 그의 repo의 커밋을 가져옵니다

    git fetch otherfork
    
  • 풀 요청을 적용하는 두 가지 옵션이 있습니다 (선택 1을 선택하지 않으려는 경우).

    1. 오리진과 풀 요청 사이에 추가 된 최종 커밋을 적용하는 데 신경 쓰지 않는다면 풀 요청이 형성된 브랜치를 리베이스 할 수 있습니다.

      git rebase master otherfork/pullrequest-branch
      
    2. 풀 요청에서만 커밋을 원하면 해당 SHA1을 식별하고 수행하십시오.

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      

업데이트 : 웹 페이지를 통해

github 웹 페이지를 통해이 작업을 수행 할 수도 있습니다.

나는 당신이 이미 관심 있는 포크 ( ) 로부터 보류중인 풀 요청을 가지고있는 MyFork일반적인 repo ( BaseRepo) 의 포크 ( )를 가지고 있다고 가정합니다 OtherFork.

  1. 포크 ( OtherFork)로 가져 오려는 풀 요청을 시작한 포크 ( MyFork) 로 이동하십시오.
  2. 풀 요청 페이지로 이동 OtherFork
  3. 새 풀 요청을 클릭하십시오
  4. 보류중인 풀 요청이 제공되어야합니다. 적절한 OtherFork지점도 선택해야합니다 . 왼쪽에서 포크 ( MyFork) 의 기본 포크 ( )를 선택하십시오 ( 중요 ).
  5. 이제 옵션 View pull request이로 변경되어야합니다 Create pull request. 이것을 클릭하십시오.

이제 포크 ( MyFork) 에 보류중인 풀 요청이 있어야합니다 . 간단하게 수락 할 수 있습니다.


Tekkub가 이전에 말했듯이 지점을 직접 가져올 수 있습니다. GitHub를 사용하는 대부분의 경우 지점은 요청하는 사용자의 프로젝트 포크에서 단순히 "마스터"입니다.

예: git pull https://github.com/USER/PROJECT/ BRANCH

그리고 실제적인 예로서 :

safaribooks라는 github 프로젝트를 분기하고 원래 프로젝트에서 포크에 넣고 자하는 다음 풀 요청이 있다고 가정하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 포크의 복제 된 프로젝트 폴더에서 다음을 실행하십시오.

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

나를 위해 일한 더 자세한 정보.

분기 저장소에 대한 내 .git / config 파일은 다음과 같습니다.

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = git@github.com:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

그런 다음 "git fetch source"를 실행하십시오. 그러면 포크 리포지토리의 모든 풀 요청이 나열됩니다.

 * [new ref]         refs/pull/54/head -> origin/pr/54
 * [new ref]         refs/pull/67/head -> origin/pr/67
 * [new ref]         refs/pull/69/head -> origin/pr/69
 * [new ref]         refs/pull/71/head -> origin/pr/71

그런 다음 특정 풀 요청을 병합하려면 "git merge master origin / pr / 67"을 실행하십시오.


프로젝트에 대한 끌어 오기 요청은 많은 다른 작성자 (포크)로부터 올 수 있으며 각 포크마다 별도의 리모콘을 원하지 않을 것입니다. 또한 풀 요청을 제출할 때 작성자가 사용한 브랜치 또는 저자의 마스터 브랜치에있는 다른 항목에 대해서는 가정하지 않습니다. 따라서 다른 포크에 표시되는 것이 아니라 업스트림 저장소에 표시되는 풀 요청을 참조하는 것이 좋습니다.

1 단계:

git remote add upstream <url>

이미이 단계를 수행했을 수도 있지만 그렇지 않은 경우 업스트림 프로젝트에 대해 원격을 정의해야합니다. URL은 분기 한 프로젝트의 복제 URL입니다. 에서 더 많은 정보 포크에 대한 원격 구성포크를 동기화 . upstream리모컨에 부여한 이름이며, 다른 이름 일 수도 있지만 upstream일반적인 이름입니다.

2 단계:

git pull upstream refs/pull/{id}/head

... {id}끌어 오기 요청 번호는 어디에 있습니까 ? upstream1 단계를 정확하게 수행 한 경우 "upstream"과 같이 가져올 리모콘의 이름입니다. URL 일 수도 있습니다.이 경우 1 단계를 건너 뛸 수 있습니다.

3 단계 :

병합 커밋에 대한 커밋 메시지를 입력하십시오. 풀 요청 번호, 수정되는 문제 및 간단한 설명과 함께 멋진 한 줄 요약을 제공하는 것이 좋지만 기본값을 유지할 수 있습니다.

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions

내가 할 일은 다음과 같습니다.

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

이제 변경 사항을이라는 테스트 브랜치에 병합했습니다 test_fork. 따라서 변경 사항이 내 나무를 더럽 히지 않습니다.

선택적으로 위에서 설명한대로 체리 픽을 사용하여 특정 커밋을 더 선호하는 경우 선택할 수 있습니다.

행복한 여행 :)


나는 이것을 위해 편리한 멋쟁이 스크립트를 사용합니다. 다음을 입력하여 스크립트를 실행합니다.

git prfetch upstream

업스트림 포크에서 모든 풀 요청을 가져옵니다.

스크립트를 만들려면 파일을 만드십시오 ~/bin/git-prfetch.

파일에는 다음이 포함되어야합니다.

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

다음을 설정하여 경로에 스크립트가 포함되어 있는지 확인하십시오.

export PATH="$HOME/bin:$PATH"

이 파일을 추가 ~/.bashrc하여 변경 사항을 영구적으로 만들 수 있습니다.

이제 풀 요청을 받으려는 포크를 추가하십시오.

git remote add upstream https://github.com/user/repo.git

그리고

git prfetch upstream

참고 URL : https://stackoverflow.com/questions/6022302/how-to-apply-unmerged-upstream-pull-requests-from-other-forks-into-my-fork



도와주세요.
반응형