GitHub에서 GitLab으로 Git 저장소 분기


93

다른 사람의 프로젝트에 대한 수정 사항을 구현하고 싶다고 가정합니다. 해당 프로젝트는 GitHub에 있습니다.

GitHub에서 포크를 만들고 수정 사항을 구현할 수 있습니다.

그러나 GitHub가 아닌 GitLab에서 포크를 만들고 싶습니다.

가능합니까? 어떻게?

나는이 기사를 읽었다 : https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

어쨌든, 제 경우에는 어떻게해야할지 모르겠습니다.

  • 어떻게 든 GitHub에서 프로젝트의 GitLab에 포크를 만들어야합니까?
  • 아니면 GitHub에서 프로젝트의 GitLab에 미러를 만들어야합니까?
  • 아니면 GitLab에 미러를 만든 다음 미러를 포크해야합니까?
  • 아니면 완전히 다른 것을해야합니까?

올바른 접근 방식은 무엇입니까?

감사.

최신 정보

GitLab의 저장소 미러링은 아마도 의미가 없습니다. GitLab에서 내 GitHub 저장소의 미러를 만들 수 있지만 다른 사람의 저장소 미러는 만들 수 없습니다.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

이것이 내가 지금까지 한 일입니다.

원래 GitHub 프로젝트를 로컬 컴퓨터에 복제했습니다. 내 로컬 저장소의 새 분기에 수정 사항을 커밋했습니다. GitLab에 빈 프로젝트를 만들었습니다. 내 로컬 저장소의 출처를 GitLab의 빈 프로젝트로 설정하고 두 분기를 GitLab에 푸시했습니다. 내 로컬 저장소에서 GitHub 저장소로 업스트림을 설정했습니다.

원래 GitHub 저장소에서 GitLab의 저장소로 새 커밋을 가져 오려면 (즉, 저장소 동기화) 로컬 저장소를 중간 단계로 사용하여이를 수행 할 수 있습니다. 그러나 GitHub의 리포지토리와 GitLab의 리포지토리간에 직접적인 연결은 없습니다. 내 설정이 정확합니까? GitHub에서 포크를 만들면 차이가 있나요?

답변:


124

변경 사항을 추적하려는 경우 먼저 GitLab (또는 사용중인 다른 항목)에 빈 저장소를 만들고 컴퓨터에 복제합니다.

그런 다음 GitHub 프로젝트를 다음을 사용하여 " upstream "원격 으로 추가합니다 .

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

이제 변경 사항이 있으면 업스트림에서 가져오고 가져올 수 있습니다. (액세스 권한이있는 경우 푸시하거나 병합 할 수도 있습니다.)

git pull upstream master

마지막으로 자신의 GitLab 저장소로 푸시 백합니다.

git push origin master

수동으로 업스트림 / 푸시 오리진을 가져 오지 않으려면 GitLab은 설정 => 저장소 => 미러링 저장소에서 미러링 기능을 제공합니다.


15
이것이 올바른 접근 방식 인 이유에 대한이 답변을 보완하고 싶습니다. "포킹"은 GitHub에서 만든 개념이므로 GitHub에만 존재하지만 유용합니다. 순수한 git 자체 (네트워크 어딘가에서 실행되는 순수한 git 서버)를 고려한다면 리포지토리를 자신의 서버에 복제 한 다음 로컬 컴퓨터에 복제하는 것과 같습니다. 그런 다음 원래 저장소를 업스트림으로 로컬에 추가합니다. 나는 그것이 GitHub가 뒤에서하는 일이라고 믿습니다.
Bruno Finger

9
그냥 그 포크 (fork) 추가 할 않습니다 GitLab에 존재를 참조하십시오 여기에 예를 들어.
bellackn

1
나는 사용해야했다 : pull upstream master --allow-unrelated-histories
hmojtaba

나중에 풀 요청을 어떻게 제출합니까?
Erik Aronesty

1
@ErikAronesty "Pull Requests"가 git이 아니라 GitHub가되기 때문에 까다 롭습니다. 이를 수행하는 한 가지 방법은 GitHub에서 복사본을 포크하고 포크 된 저장소를 다른 원격으로 추가하는 것 git remote add upstream-fork git@github.com:myuser/repo입니다. 그런 다음 git push upstream-fork masterGitHub 사이트를 통해 풀 요청을 제출하면됩니다.
Chris Watts

17

브라우저 전용 방법 :

  1. Gitlab에서 새 프로젝트 만들기 (이름이있는 빈 프로젝트 만 괜찮습니다)
  2. 설정-> 저장소로 이동하십시오.
  3. '미러링 저장소'아래에 GitHub URL을 입력합니다.
  4. '미러 방향'이 '풀'인지 확인하십시오.
  5. '미러 저장소'버튼을 누릅니다.
  6. 나타나는 항목 옆에있는 동기화 아이콘을 누릅니다.

Enterprise Edition 라이선스가 없습니다. 즉, 3 단계에서 "미러링 리포지토리"를 볼 수 없습니다. 어쨌든 그러한 라이선스가 있다면 다른 사람의 GitHub 리포지토리 미러를 만들 수 있습니까?
Cimlman

1
@Cimlman 저도 무료 라이센스를 가지고 있기 때문에 이상합니다. 다시 확인 하시겠습니까? '설정-> 저장소'에서 세 번째 여야합니다. 명확하게 말하면 프로필 메뉴가 아닌 사이드 바의 설정입니다.
aksh1618

사이드 바에서 설정-> 리포지토리를 클릭하면 보호 된 분기, 보호 된 태그, 키 배포, 토큰 배포 섹션을 볼 수 있습니다.
Cimlman

2
@Cimlman 사용자 지정 / 로컬 gitlab 인스턴스를 사용하고 있습니까? gitlab.com의 개인 기본 계정에 더 많은 옵션이 있습니다
aksh1618

1
자체 관리 설치 버전 10.7.2를 사용하고 있습니다. 최신 릴리스는 11.6입니다. 좋아요, 이것은 좋은 지적입니다. :) GitLab에서 솔루션을 시도 할 수 없습니다. 어쨌든, 문제는 지금 나에게 쓸모가 없습니다. 타사 라이브러리의 사용자 지정 버그 수정에 관한 것입니다. 그러나 버그 수정은 이미 해당 라이브러리의 공식 릴리스에 통합되었습니다.
Cimlman

0

비공개 github 저장소를 포크 할 수 있습니다.

  1. 새 프로젝트를 클릭
  2. 가져 오기 선택
  3. github 선택
  4. gitlab 앱 인증 및 자동 생성에 사용되는 OAuth2
  5. 포크 할 프로젝트 선택

^ 나는 github의 개인 저장소로 이것을 수행했으며 성공적으로 가져 왔습니다 (지점 포함). 가져온 프로젝트는 자동으로 비공개로 유지됩니다.)


2
프로젝트 가져 오기에는 "개인 액세스 토큰"이 필요합니다. GitHub에서 생성하려고했습니다. 이 기능은 GitHub의 프로젝트에서 GitLab에 프로젝트를 만들고 싶을 때 유용 할 것 같습니다. 이 가정이 맞습니까? 질문은 다른 사람의 GitHub 프로젝트를 포크하는 것입니다.
Cimlman

2
-1 왜냐하면 이전 의견에서 언급했듯이 질문은 다른 사람의 github 프로젝트를 포크하는 것에 관한 것입니다. 이 답변의 지침은 이러한 경우 작동하지 않습니다.
Nikos Alexandris

1
@NikosAlexandris 확실해? 계정에 대한 액세스 토큰을 만들고 읽기 액세스 권한이있는 다른 사람의 저장소에 액세스 할 수 없습니까? (예 : 모든 단일 공개 저장소)
DGoiko

0

분기하는 대신 웹 인터페이스 만 사용하여 공개적으로 사용 가능한 GitHub 저장소를 가져올 수 있습니다.

  1. GitLab 대시 보드에서 새 프로젝트를 클릭하십시오.
  2. 가져 오기 프로젝트로 전환 탭으로
  3. URL로 Repo를 클릭하십시오. 버튼을
  4. "Git 저장소 URL"과 나머지 프로젝트 필드를 입력합니다.
  5. 프로젝트 만들기를 클릭 합니다. 하여 가져 오기 프로세스를 시작합니다.
  6. 완료되면 새로 생성 된 프로젝트로 리디렉션됩니다.

최근에이 기술을 사용했으며 GitHub 계정이 없어도 모든 공용 저장소에서 작동합니다. 정보 소스는 이 GitLab 문서 페이지를 참조하세요 .


1
확인. 새 커밋이 GitHub의 원래 저장소에 추가 된 경우 변경 사항을 GitHub의 저장소에 병합 할 수 있습니까? 이것은 까다로운 작업이며 중간 저장소 없이는 수행 할 수 없습니다 (질문의 마지막 단락 참조).
Cimlman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.