web-dev-qa-db-ja.com

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

masterおよびnew-projectブランチがあります。そして今、私は新しいプロジェクトブランチに基づいたマスターで真新しいリポジトリを作成したいと思います。

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

145
Dogweather

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

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

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

  • new-repoという名前の新しいGithubリポジトリ、
  • そのmasterは、古いレポのnew-projectに対応します。
  • すべての履歴が保持されます。

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

$ git Push [email protected]:accountname/new_repo +new-project:master +site3a:Rails3

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

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

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

256
Dogweather

更新:

old_branchおよび以下を含むローカルリポジトリにcdします。

$ git Push https://github.com/accountname/new_repo.git +old_branch:master
21
git clone -b new-project /path/to/repo /new/repo/path

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

再編集:設定したいmasterブランチであり、「デフォルト」ブランチではないことに気付きました。そう…

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

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

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

  • git clone [email protected]:you/orig.gitを実行します
  • git clone orig copyを実行します
  • 前述したように、ローカルcopyリポジトリ内から、masterブランチを目的の場所にリセットします。
  • 空のGitHubプロジェクトyou/copyを作成します。 GitHubの指示に従って、そのプロジェクトをcopyのローカルバージョンのリモートとしてセットアップし、masterをプッシュすれば完了です。
9
J. C. Salomon
  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-branch-in-an-ex-existing-repository

4
Joe

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

2
Julio Flores

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

git clone -b new-project [email protected]:User/YourProject.git newProjcet

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

2
Kjuly

正解への少しの追加:

$ git Push [email protected]:accountname/new_repo + old_branch:master

[email protected]:accountname/new_repo」=> githubから取得「クローンまたはダウンロード」プルダウンメニュー

0
Gerd