web-dev-qa-db-ja.com

Gitリポジトリのコンテンツを履歴を保持する別のリポジトリに移動する

次のコマンドを使用して、1つのリポジトリ(repo1など)のコンテンツのみを別の既存のリポジトリ(repo2など)に移動しようとしています。

  1. git clone repo1
  2. git clone repo2
  3. cd repo1
  4. git remote rm Origin
  5. git remote add repo1
  6. git Push

しかし、機能していません。他の同様の投稿を確認しましたが、内容ではなくフォルダを移動しているだけです。

110
Mario

あなたが探しているコマンドは次のとおりです:

cd repo2
git checkout master
git remote add r1remote **url-of-repo1**
git fetch r1remote
git merge r1remote/master --allow-unrelated-histories
git remote rm r1remote

その後、repo2/masterにはrepo2/masterrepo1/masterのすべてが含まれ、両方の履歴も含まれます。

188
Chronial

ここで完全に説明 https://www.smashingmagazine.com/2014/05/moving-git-repository-new-server/

まず、既存のリポジトリからローカルインデックスにすべてのリモートブランチとタグをフェッチする必要があります。

git fetch Origin

次のローカルコピーを作成するために必要な不足しているブランチをチェックできます。

git branch -a

新しいリポジトリのSSHクローンURLを使用して、既存のローカルリポジトリに新しいリモートを作成しましょう。

git remote add new-Origin [email protected]:manakor/manascope.git

これで、すべてのローカルブランチとタグをnew-Originという名前の新しいリモートにプッシュする準備ができました。

git Push --all new-Origin 
git Push --tags new-Origin

New-Originをデフォルトのリモートにしましょう:

git remote rm Origin

New-Originの名前をOriginに変更し、デフォルトのリモートになるようにします。

git remote rename new-Origin origin
40

既存のブランチを保存して履歴をコミットしたい場合は、ここで私のために働いた1つの方法があります。

git clone --mirror https://github.com/account/repo.git cloned-repo
cd cloned-repo
git Push --mirror {URL of new (empty) repo}

ここで、ソースと宛先のレポジトリを一定期間同期させたいとします。たとえば、現在のリモートリポジトリ内には、新規/置換レポジトリに持ち込みたいアクティビティがまだあります。

git clone -o old https://github.com/account/repo.git my-repo
cd my-repo
git remote add new {URL of new repo}

最新の更新をプルダウンするには(ローカルに変更がない場合):

git checkout {branch(es) of interest}
git pull old
git Push --all new

注意:私はまだサブモジュールを使用していないので、サブモジュールがあれば追加のステップが必要になるかもしれません。

11
Dan Cohn

これにより、ローカルリポジトリ(履歴を含む)がリモートgithub.comリポジトリに移動しました。 GitHub.comで新しい空のレポジトリを作成した後、以下の手順3でURLを使用しますが、うまく機能します。

git clone --mirror <url_of_old_repo>
cd <name_of_old_repo>
git remote add new-Origin <url_of_new_repo>
git Push new-Origin --mirror

私はこれを見つけました: https://Gist.github.com/niksumeiko/8972566

5
raddevus

コードがすでにGitによって追跡されている場合の最も単純なアプローチは、新しいリポジトリを「Origin」としてPush toに設定します。

cd existing-project
git remote set-url Origin https://clone-url.git
git Push -u Origin --all
git Push Origin --tags
3
Martin

@ Dan-Cohnの回答によると、Mirror-Pushはあなたの友達です。これはリポジトリを移行するための私の行き先です:

リポジトリのミラーリング

1.Git Bashを開きます。

2.リポジトリのベアクローンを作成します。

$ git clone --bare https://github.com/exampleuser/old-repository.git

3.新しいリポジトリにミラープッシュします。

$ cd old-repository.git
$ git Push --mirror https://github.com/exampleuser/new-repository.git

4.手順1で作成した一時ローカルリポジトリを削除します。

$ cd ..
$ rm -rf old-repository.git

参照とクレジット: https://help.github.com/en/articles/duplicating-a-repository

1
DalSoft

近くにいるようです。提出物の単なるタイプミスではないと仮定すると、ステップ3はrepo1ではなくcd repo2である必要があります。そして、ステップ6はプッシュではなくgit pullでなければなりません。改訂リスト:

1. git clone repo1
2. git clone repo2
3. cd repo2
4. git remote rm Origin
5. git remote add repo1
6. git pull
7. git remote rm repo1
8. git remote add newremote
1
Eric Palace

以下の方法を使用して、すべてのブランチとコミット履歴を維持することにより、GIT StashをGitLabに移行しました。

古いリポジトリをローカルにクローンします。

git clone --bare <STASH-URL>

GitLabで空のリポジトリを作成します。

git Push --mirror <GitLab-URL>