既存のリポジトリのブランチから新しいGitHubリポジトリを作成するにはどうすればよいですか?


171

私はマスター新しいプロジェクトのブランチを持っています。そして今、私は、新しいプロジェクトのブランチに基づいて、マスターを備えた真新しいリポジトリを作成したいと思います。

背景:3つの独立したアプリケーションを含む1つのリポジトリがあります。このように始まったわけではありません。元々、リポジトリには1つのアプリしかありませんでした。しかし、時間の経過とともに、ビジネスニーズは変化しました。1つのアプリが2つになりました(レガシーバージョンと書き換え)。Webサービスが追加されました。3つのプロジェクトを含めるために、別々のブランチが使用されました。ただし、コードは共有されません。そのため、それらを独自のリポジトリに分割する方が簡単です。

回答:


294

@ user292677のアイデアから始めて、問題を解決するためにそれを改良しました。

  1. githubでnew-repoを作成します。
  2. 抽出したい古いリポジトリのローカルコピーにcdします。これは、new-repoのマスターになるnew-projectブランチを追跡するように設定されています。
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

新しいGithubリポジトリが完成しました。結果は次のとおりです。

  • 名前の新しいGithubのリポジトリ新レポ
  • そのmaster対応の古いレポさんの新プロジェクト、と
  • すべての歴史が保存されています。

実際、この方法を使用することで、ブランチを厳選した新しいレポを作成し、必要に応じて名前を変更できることがわかりました。

$ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

その結果、既存のsite3aブランチも新しいリポジトリに移動され、rails3として表示されます。これは非常によく機能します。ネットワークダイアグラムは、新しいマスターrails3を完全な履歴と相互の正しい関係で示しています。

2013-12-07更新:これを別のプロジェクトで使用し、このレシピがまだ機能することを確認しました。

アップデート2018-01-11:httpsプロトコルにGitHub推奨を使用するようにステップ3.を更新しました。レシピはまだ機能します。


こんにちは@Dogweather、これを共有してくれてありがとう。あなたの方法の何が違うのかを説明し、元のリモートURLを変更して、新しいレポメソッドにプッシュできますか?
Vincent

5
Dogweather、覚えている以上にあなたのソリューションを使いました。ありがとう!これは私のために働いていた前に私が最初にold_branchチェックアウトしなければならなかった
ビョルン当該分野を

3
これはタグをコピーしないことに注意してください。あなたはそれが必要かもしれません--follow-tags
Factor Mystic

1
Githubにリポジトリを作成する必要はないことに注意してください。pushローカルのリポジトリにのみ作成できます(つまりgit init、Githubの代わりに>新規> ...)
OJFord

1
すべてのコミット履歴を新しいリポジトリに転送したくありません。子リポジトリに属する​​コミットをコピーしたいだけです。これは可能ですか?
Arbaz Rizvi 2017


9
git clone -b new-project /path/to/repo /new/repo/path

編集:GitHub内で、リポジトリを「フォーク」し、クローンの[管理]タブに移動できます。「リポジトリ名」と「可視性」の下には「デフォルトのブランチ」があり、ブランチのドロップダウンメニューがあります。を選択しnew-projectます。

再編集:master「デフォルト」のブランチだけでなく、設定したいブランチであることを認識しました。そう…

  • GitHubで、にクローンthem/repoを作成しyou/repoます。
  • 走る git clone git@github.com:you/repo.git
  • を起動しgitkます。
  • [ old-master古いコミットを見失わないようにブランチを作成したいかもしれません。]
  • new-projectブランチで最新のコミットを見つけ、コミットメッセージを右クリックして、[マスターブランチをここにリセット]を選択します。(を使用してコマンドラインでこれを行うこともできますがgit-reset、正しい呼び出しを理解していません。)

GitHubリポジトリへの次のプッシュアップは--forceオプションで行う必要がありますが、それ以外の場合は完了です。

それが自分のリポジトリの1つである場合、これを行うには…

  • 走る git clone git@github.com:you/orig.git
  • 走る git clone orig copy
  • 上記で説明したように、ローカルcopyリポジトリ内から、masterブランチを必要な場所にリセットします。
  • 空のGitHubプロジェクトを作成しますyou/copy。GitHubの指示に従って、そのプロジェクトをローカルバージョンののリモートとして設定しcopy、を押すmasterと完了です。

うーん!最初の手順を実行する方法がわかりません。github内でリポジトリを複製します。それは可能ではないと思います。
Dogweather 2012

@ Dogweather、GitHubでは「フォーク」と呼ばれています。わかりやすくするために回答を編集しました。
JCサロモン2012年

1つのアカウント内でリポジトリをフォークすることができませんでした。これを自分で試しましたか?
Dogweather 2012年

5
  1. githubでNEW_REPOSITORYを作成します。
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master:master

これですべてです。(注:gitの履歴は保持されます)

上記の答えを試してみましたが、+ master:masterが指定されていないため、十分に具体的ではないことがわかりました。それは素晴らしい働きをします。

ソース(githubでのsshの問題を回避するための変更を加えたもの):Mauricio Aiello、元Javaシニアデベロッパー、https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a -ブランチ-既存のリポジトリ


それは実際に受け入れられた答えよりも使いやすいです。古いリポジトリを新しいリポジトリにプッシュできないときに、Gitがsrc refspecエラーについて文句を言う状況でも機能します。
Informagic 2019年

2

これが良い方法かどうかはわかりませんが、とにかく簡単です。

git clone -b new-project git@github.com:User/YourProject.git newProjcet

次に、githubに新しいリポジトリを作成してプッシュします。


2

新しいリポジトリを単に作成すると、古いリポジトリへの参照が失われ、新しいリポジトリに同期された元のプロジェクトの更新を維持するのが難しくなることを覚えておいてください。おそらく、レポをフォークした方がいいのではないでしょうか?


0

正しい答えに少し追加:

$ git push git@github.com:accountname / new_repo + old_branch:master

"git@github.com:accountname / new_repo" => githubから取得 "クローンまたはダウンロード"プルダウンメニュー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.