次のコマンドを使用して、1つのリポジトリ(repo1
)のコンテンツのみを別の既存のリポジトリ(repo2
)に移動しようとしています。
git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push
しかし、それは機能していません。同様の投稿を確認しましたが、フォルダを移動しているのは1つだけで、コンテンツは移動していません。
次のコマンドを使用して、1つのリポジトリ(repo1
)のコンテンツのみを別の既存のリポジトリ(repo2
)に移動しようとしています。
git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push
しかし、それは機能していません。同様の投稿を確認しましたが、フォルダを移動しているのは1つだけで、コンテンツは移動していません。
回答:
あなたが探しているコマンドは次のとおりです。
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/master
とrepo1/master
、また、それらの両方の歴史を持っています。
repo1
に、すべてを内部(サブフォルダーrepo1
)に移動することです。
ここに完全に説明されていますhttps://www.smashingmagazine.com/2014/05/moving-git-repository-new-server/
まず、既存のリポジトリからローカルインデックスにすべてのリモートブランチとタグをフェッチする必要があります。
git fetch origin
次のローカルコピーを作成するために必要な、不足しているブランチを確認できます。
git branch -a
新しいリポジトリのSSHクローンURLを使用して、既存のローカルリポジトリに新しいリモートを作成します。
git remote add new-origin git@github.com: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
git checkout BranchName
ブランチをswtichしてからリモートリポジトリにブランチを再度プッシュする必要がありますがgit push --all new-origin
、おかげで
既存のブランチとコミット履歴を保持したい場合は、次の方法が役立ちました。
git clone --mirror https://github.com/account/repo.git cloned-repo
cd cloned-repo
git push --mirror {URL of new (empty) repo}
# at this point only remote cloned-repo is correct, local has auto-generated repo structure with folders such as "branches" or "refs"
cd ..
rm -rf cloned-repo
git clone {URL of new (empty) repo}
# only now will you see the expected user-generated contents in local cloned-repo folder
# note: all non-master branches are avaialable, but git branch will not show them until you git checkout each of them
# to automatically checkout all remote branches use this loop:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done
ここで、ソースと宛先のリポジトリを一定期間同期させておきたいとします。たとえば、現在のリモートリポジトリ内に、新規/交換用リポジトリに持ち越したいアクティビティがまだあります。
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
注:サブモジュールをまだ使用していないため、サブモジュールがある場合に必要な追加の手順がわかりません。
これにより、ローカルリポジトリ(履歴を含む)をリモートの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
以下の方法を使用して、すべてのブランチとコミット履歴を維持することにより、GIT StashをGitLabに移行しました。
古いリポジトリのクローンをローカルに作成します。
git clone --bare <STASH-URL>
GitLabで空のリポジトリを作成します。
git push --mirror <GitLab-URL>
近くにいるようです。それがあなたの提出の単なるタイプミスではないと仮定すると、ステップ3 cd repo2
はrepo1の代わりにすべきです。そして、ステップ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
@ Dan-Cohnの回答のとおり、Mirror-pushはあなたの友達です。これはレポジトリを移行するための私の行くところです:
リポジトリのミラーリング
1.Git Bashを開きます。
リポジトリのベアクローンを作成します。
$ git clone --bare https://github.com/exampleuser/old-repository.git
新しいリポジトリにミラープッシュします。
$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git
ステップ1で作成した一時的なローカルリポジトリを削除します。
$ cd ..
$ rm -rf old-repository.git
リファレンスとクレジット:https : //help.github.com/en/articles/duplicating-a-repository