web-dev-qa-db-ja.com

Gitフォークを手動で作成する

フォークを理解している場合、概念的には次の手順が含まれます。

  1. ソースリポジトリをターゲットリポジトリにミラークローンします
  2. ソースリポジトリを指す「アップストリーム」リモートをターゲットリポジトリに設定します
  3. 電子メールのサブスクリプションなど、その他の要素(この質問では重要ではありません)

これはどのように見えるかです:

Original <──upstream─── Forked
(server)               (server)
                           ↑
                           │Origin
                           │
                        (local)

クローン作成との主な違いは、これらの手順がローカルではなくサーバー側であることです。 gitコマンドラインでこれを手動で複製するにはどうすればよいですか?

これが私がこれまでにしたことです:

  1. ソースリポジトリをローカルリポジトリに複製します
  2. 「オリジン」リモートを変更して、目的のターゲットリポジトリを指すようにします
  3. ソースリポジトリを指す「アップストリーム」リモートを追加します

この段階で、ローカルリポジトリにすべてを設定しました。中間ローカルクローンを使用して、元のリポジトリとフォークされたリポジトリの間で変更を同期できます。だからこれは私が持っているものです:

Original                Forked
(server)               (server)
    ↑                      ↑
    │                      │Origin
    │                      │
    └───────upstream─── (local)

ここで、このリンクをサーバーにプッシュするにはどうすればよいですか?つまり、最初の図と一致するように、元のリポジトリをサーバー側フォークされたリポジトリのアップストリームリモートにしますか?

この質問はGitHub固有ではないことに注意してください。これは、BitBucketでも実行したい場合があります。理想的には、サイト間でもこれを実行できるはずです。私はここSOで同様の質問をたくさん読みましたが、明確な答えはありません。

10
metacubed

コマンドラインでAPIを使用してBitbucketでプロジェクトをフォークできますが、少なくともソースプロジェクトへの読み取りアクセス権が必要です。

構文は次のとおりです。

curl -v --user {username}:"{password}" \
https://bitbucket.org/api/1.0/repositories/{accountname}/{repo_slug}/fork \
--data "name=mynewrepo"

例えば.

  1. プロジェクトprojectABCをアカウントABCからアカウントXYZProjectXYZという名前でフォークするには、次のコマンドを使用します

    curl -v --user XYZ:"XYZPASSWORDXYZ" \
    https://bitbucket.org/api/1.0/repositories/ABC/ProjectABC/fork \
    --data "name=ProjectXYZ"
    

    詳細については、 Bitbucketのドキュメント を参照してください。

  2. 次に、このプロジェクトをローカルマシンに複製します。

    git clone your_target_git_repository_path
    
  3. プロジェクトディレクトリに移動し、ソースリポジトリを指すリモートupstreamを追加します。

    git remote add upstream source_git_repository_path
    
  4. これで、いつでもソースリポジトリから(たとえばマスターブランチから)変更をプルするには、次を使用します。

    git pull upstream master
    

    ローカルコミットをサーバー上のターゲットリポジトリにプッシュするには、次を使用します。gitPush Origin master

  5. また、ターゲットリポジトリでの変更をソースリポジトリとマージする準備ができたら、Bitbucket Webサイトから、または Bitbucket API:プルリクエスト を使用してプルリクエストを作成します。

9
Nikhil Supekar

GitHubの場合、コマンドhub forkを使用して hub CLI でこれを実行できるようになりました。私はそれを使用していませんが、ドキュメントに基づいて、これを行うように見えます:

git clone [email protected]:some_user_or_organization/some_project.git
cd some_project
hub fork

...そして、2つのリモートができあがります。Originはアップストリームを指し、もう1つはGitHubユーザー名と同じ名前で新しいフォークを指します。 (hubもリモート名をそれぞれ「upstream」と「Origin」に切り替えたらいいのですが、そうではないと思います。)

2
drammock

フォークにプッシュするときは、次のオプションを試してください:-mirror

https://git-scm.com/docs/git-Push#git-Push---mirror

これは、リモートをローカルリポジトリに取得するためにも、クローン作成時に--mirrorオプションを指定する必要があることを意味する場合があります。

または、リモートセットアップスクリプトをリポジトリに含めて、プロジェクトの開発者セットアップマニュアルで参照することもできます。

0
Will

リポジトリのローカルコピーを作成する手順(最終的にフォークされたリポジトリを指す)は、詳細に説明したとおりです。

次のステップは、フォークされたリポジトリを作成することです。 gitではなくGithub APIを使用してコマンドラインから実行できます。詳細については、 https://stackoverflow.com/a/2425632/429758 を参照してください。

その後、手動フォークを完了するのは簡単なgit Push Origin masterです。

注:BitbucketもREST APIを提供しており、コマンドラインからフォークされたリポジトリを作成できます。

0
Prakash Murthy