GitHubからGitLabへのGitリポジトリのフォーク


98

他の誰かのプロジェクトに修正を実装したいとします。そのプロジェクトは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でフォークを作成しても違いはありますか?

回答:


128

変更を追跡したいだけの場合は、最初にGitLab(または使用している可能性のある他のリポジトリ)で空のリポジトリを作成し、それをコンピューターに複製します。

次に、GitHubプロジェクトを「アップストリーム」リモートとして追加します。

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が舞台裏で行っていることだと思います。
ブルーノフィンガー

9
フォークGitLabに存在することを追加したいだけです。たとえば、ここを参照してください。
bellackn

1
私が使用していた:プルアップストリームマスター--allow-無関係-履歴を
hmojtaba

後でプルリクエストをどのように送信しますか?
ErikAronesty20年

1
@ErikAronesty「プルリクエスト」はgitのものではなく、GitHubのものであるため、これは注意が必要です。ただし、これを行う1つの方法は、GitHubでコピーをフォークし、フォークしたリポジトリを別のリモートとして追加することgit remote add upstream-fork git@github.com:myuser/repoです。次にgit push upstream-fork master、GitHubサイトを介してプルリクエストを送信します。
クリスワッツ

18

ブラウザのみの方法:

  1. Gitlabで新しいプロジェクトを作成します(名前の付いた空のプロジェクトだけで問題ありません)
  2. [設定]-> [リポジトリ]に移動します
  3. 「ミラーリングリポジトリ」の下にGitHubURLを入力します
  4. 「ミラー方向」が「プル」であることを確認してください
  5. 「ミラーリポジトリ」ボタンを押します
  6. 表示されるエントリの横にある同期アイコンを押します

Enterprise Editionライセンスを持っていません。つまり、手順3の「ミラーリングリポジトリ」が表示されません。とにかく、そのようなライセンスを持っていれば、他の誰かのGitHubリポジトリのミラーを作成できますか?
Cimlman

1
@Cimlman私も無料ライセンスを使用しているので、それは奇妙です。たぶん再確認しますか?「設定->リポジトリ」の3番目である必要があります。明確にするために:プロファイルメニューではなく、サイドバーの設定。
aksh16 1819年

サイドバーの[設定]-> [リポジトリ]をクリックすると、[保護されたブランチ]、[保護されたタグ]、[キーの展開]、[トークンの展開]のセクションが表示されます。
Cimlman

2
@Cimlmanカスタム/ローカルのgitlabインスタンスを使用していますか?gitlab.comの個人的な基本アカウントにはさらに多くのオプションがあります
aksh16

1
自己管理インストール、バージョン10.7.2を使用しています。最新のリリースは11.6です。OK、これは良い点です。:)GitLabであなたのソリューションを試すことはできません。とにかく、問題は今私にとって時代遅れです。それはすべて、サードパーティライブラリのカスタムバグ修正に関するものでした。ただし、バグ修正はすでにそのライブラリの公式リリースに組み込まれています。
Cimlman

0

プライベートgithubリポジトリをフォークすることは可能です。

  1. 新しいプロジェクトをクリックします
  2. [インポート]を選択します
  3. githubを選択します
  4. gitlabアプリの認証と自動作成に使用されるOAuth2
  5. フォークするプロジェクトを選択します

^ githubのプライベートリポジトリでこれを実行し、正常にインポートされました(ブランチなど)。インポートされたプロジェクトは自動的に非公開になります;)


2
プロジェクトのインポートには「パーソナルアクセストークン」が必要です。GitHubで生成してみました。この機能は、GitHubのプロジェクトからGitLabのプロジェクトを作成する場合に役立つようです。この仮定は正しいですか?問題は、他の誰かのGitHubプロジェクトをフォークすることです。
Cimlman 2018

2
-1なぜなら、そして前のコメントが述べているように、質問は他の誰かのgithubプロジェクトをフォークすることについてです。この回答の指示は、そのような場合には機能しません。
ニコスアレクサン

1
@NikosAlexandrisよろしいですか?アカウントのアクセストークンを作成して、読み取りアクセス権を持つ他の誰かのリポジトリにアクセスできませんか?(例えば、一つ一つの公共レポ)
DGoiko

0

フォークする代わりに、Webインターフェイスのみを使用して公開されているGitHubリポジトリをインポートできます。

  1. GitLabダッシュボードから[新しいプロジェクト]をクリックします
  2. [プロジェクトインポート]タブに切り替えます
  3. [ URL別レポ]ボタンをクリックします
  4. 「GitリポジトリのURL」と残りのプロジェクトフィールドに入力します
  5. [プロジェクトの作成]をクリックして、インポートプロセスを開始します
  6. 完了すると、新しく作成したプロジェクトにリダイレクトされます

最近この手法を使用し、GitHubアカウントがなくてもすべてのパブリックリポジトリで機能します。情報源については、このGitLabドキュメントページを参照してください。


1
OK。また、GitHubの元のリポジトリに新しいコミットが追加された場合、GitHubのリポジトリへの変更を単純にマージできますか?これはトリッキーな操作であり、中間リポジトリなしでは実行できない可能性があります(質問の最後の段落を参照)。
Cimlman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.