별도의 리모컨을 추가하지 않고 어떻게 포크를 동기화 상태로 유지할 수 있습니까?


302

someone/foobarGitHub에 저장소가 있다고 가정 해 보겠습니다 me/foobar.

부모 저장소에서 새 커밋포크로 직접 가져 오는 방법 하지 않고, 별도의 리모컨을 추가 하고 거기에서 정기적으로 끌어 기억 ?

목표는 다음과 같습니다.

  • git pull 부모 저장소에서 가져 오기
  • git push 내 포크에 모든 것을 보내기 위해

26
@Olufemi의 놀라운 대답은 ChristianGosch가 주석에서 메모 한 것처럼 분기 상단에 "병합 커밋"으로 끝나고 "비교할 사항 없음"이 나타나지 않는 것을 제외하고는 원하는 것을하는 것 같습니다. 많은 프로젝트에서 끌어 당길 수있는 가지를 만들 수없는 것 같습니다. 그렇다면 개인용 컴퓨터에서 arcane git 명령을 실행하지 않고 github에서 가장 기본적인 기고자 워크 플로를 수행 할 수있는 방법이 없습니까? 아니면 내 전체 레포를 버리고 내가 기여하고 싶을 때마다 포크해야할까요?
nealmcb




@nealmcb 리베이스를하면 브랜치 상단의 "병합 커밋"문제를 피할 수 있습니까?
마르코

답변:


586

분기 된 Git 리포지토리 me / foobar를 엽니 다 .

비교를 클릭 하십시오 .

다음은 페이지의 샘플 이미지입니다

당신은 알림을 받게됩니다 :

비교할 것이 없습니다.
someone : masterme : master의 모든 커밋을 최신 상태로 유지합니다 . 비교를 위해 베이스전환 해보 십시오.

이 페이지 에서베이스 전환을 클릭 하십시오.

다음은 페이지의 예입니다

그런 다음 누군가 / foobar 에 대한 모든 커밋을 보게됩니다. 분기 한 후 수 있습니다.

풀 요청 생성을 클릭하십시오 .

다음은 샘플 페이지입니다

풀 요청에 제목과 설명을 제공하고 풀 요청 생성을 클릭 하십시오. .

다음 페이지에서 페이지 맨 아래로 스크롤하여 병합 요청 병합병합 확인을 클릭하십시오. .

Git 리포지토리 me / foobar 가 업데이트됩니다.

편집 : rebase 옵션이 여기에 표시됩니다 :

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


50
기본 github을 전환하면 원래 리포지토리의 페이지에서 페이지가 표시되므로 업스트림 포크에서 풀 요청을 여는 것처럼 보이기 때문에 혼란 스럽습니다. 그러나 그것은 완전히 작동합니다.
Eduardo

8
위의 혼란 상황에 대한 언급을 피하려면, 그것은 더 클릭 것 Edit버튼을 수동으로 전환 base forkme/foobarhead forksomeone/foobar. 이런 식으로 그것은 매우 분명하다
macemers

26
다른 하나 : 이전에하지 않았지만 나중에 커밋 기록 위에 "병합 커밋"이 있으면 제대로 작동합니다. 따라서 "비교할 사항 없음"이 나타나지 않습니다. 대신 "편집"버튼을 사용하고 수동으로 기본과 포크를 교환해야합니다.
Christian Gosch

26
그 말도 안되는 병합 커밋을 제거 할 방법이 없습니까?
kumarharsh

17
@kumar_harsh 2016 년 9 월부터 이제 병합 커밋을 피하는 풀 요청에 대한 "리베이스 및 병합"옵션이 있습니다.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

한 가지주의
사항이 있습니다. 포크를 변경하는 유일한 사람이라면 완벽합니다.
그러나 다른 사람과 공유하는 경우 포크에서 당겨야 할 수도 있습니다.이 경우 별도의 리모콘 이 유일한 솔루션입니다.

편집 :
실제로, 당신 git pull git@github.com:me/foobar 주의를 제거 할 수 있습니다 .
기억하기 쉬운 선택이 당신의 것입니다.


8

나는 GitHub 웹 UI 를 사용하여 상당히 간단한 방법을 사용 했습니다.

  1. 원래 Git 리포지토리 (포크 된 Git 리포지토리 me/foobar아님)를 엽니 다.
  2. src 폴더로 이동하여 변경하려는 파일을 엽니 다
  3. 펜 아이콘을 클릭하십시오. 현재 버전의 마스터 리포지토리를 기반으로 "patch-1"이라는 개인 포크에 레이블을 자동으로 만듭니다. 여기에 이미지 설명을 입력하십시오
  4. 즐겨! 여기에 이미지 설명을 입력하십시오

3
이것을 시도하면 기본적으로 원래 git repo의 파일에서 편집기가 열립니다. 원래 git repo에 대한 쓰기 권한 (설계 상)이 없습니다. 이 방법에서는 파일을 변경해야합니다. 그렇지 않으면 파일을 "저장"할 방법이 없습니다. 파일을 저장하지 않으면 분기 된 저장소에 "patch-1"분기에 해당하는 항목을 표시 할 수 없습니다. 내가 여기서 무엇을 놓치고 있습니까?
Electro-Bunny

5

"풀"응용 프로그램 자동 솔루션을 셋업이 앤 잊지이다. 포크의 기본 브랜치를 업스트림 저장소와 동기화합니다.

URL을 방문하여 녹색 "설치"단추를 클릭 한 후 자동 동기화를 사용하려는 저장소를 선택하십시오.

지점은 GitHub에서 시간당 한 번 직접 업데이트되며, 로컬 머신에서는 로컬 사본이 동기화되도록 마스터 브랜치를 당겨야합니다.

https://stackoverflow.com/a/58965171/946850 에서 답변했습니다 .


1

또 다른 옵션은 Update from upstreamRepoName/masterMac 용 GitHub 의 버튼 을 사용하는 것 입니다 (Windows 용 GitHub라고 가정).

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


TIL은 : 웹 인터페이스 :-) 이상 GitHub의에 대한 애플 리케이션이 있다는 것을 [그것은 그들에 걸쳐 경험이 통일되지 않았 부끄러운]
톰 Goodfellow

나는 이것을 Windows에서 보지 않는다
Denis

1
@Denis 이것은 그들의 오래된 응용 프로그램입니다. 나는 그들의 새로운 앱이 그것을 확신하지 못한다.
Steve Moser

아하. 이것은 "GitHub Desktop"(Mac의 경우 Windows에 대해서는 확실하지 않음)에서 작동했습니다.
michaelok

0

다른 리모컨을 추가하지 않고 어떻게 할 수 있는지 모르겠지만 항상 갈 수있는 리포지를 리모컨으로 추가하여 upstream간단하게 수행 할 수 있습니다.

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

이것은 모든 분기를 포함하여 모든 분기를 동기화합니다. 새 refs/heads/분기 만들기 ( 기존 분기 만 업데이트하려면 제거 ). 분기가 분기 된 경우 해당 분기에 오류가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.