ダウンしているサーバーがあります。移行しなければならないのはリポジトリだけです。このサーバーは、私のプロジェクトのいずれかのオリジン(マスター)としてリストされています。履歴を保持するためにリポジトリを移動する適切な方法は何ですか。
ダウンしているサーバーがあります。移行しなければならないのはリポジトリだけです。このサーバーは、私のプロジェクトのいずれかのオリジン(マスター)としてリストされています。履歴を保持するためにリポジトリを移動する適切な方法は何ですか。
回答:
新しいリポジトリの場所を追加するには、
git remote add new_repo_name new_repo_url
次に、コンテンツを新しい場所にプッシュします
git push new_repo_name master
最後に古いものを削除します
git remote rm origin
その後、bdonlanが言ったことを実行し、.git / configファイルを編集してnew_repo_nameをoriginに変更できます。オリジン(元のリモートリポジトリ)を削除しない場合は、次のコマンドで変更を新しいリポジトリにプッシュするだけです。
git push new_repo_name master
git push -u new_repo_name --all
です。
git remote rename new_repo_name origin
すべてのブランチとタグを移行する場合は、次のコマンドを使用する必要があります。
git clone --mirror [oldUrl]
古いレポをすべてのブランチで複製する
cd the_repo
git remote add remoteName newRepoUrl
新しいリモコンをセットアップする
git push -f --tags remoteName refs/heads/*:refs/heads/*
すべての参照をrefs / headsの下にプッシュする(これはおそらくあなたが望んでいることです)
--tags
、とrefs/heads/*:refs/heads/*
互換性がありません--mirror
。stackoverflow.com/a/26552740/1484831はうまく機能しました。
refs/heads/refs/heads
使用していたgit push -f --tags remoteName refs/heads/*:refs/heads/*
ので、次のように交換しましたgit push remoteName --mirror
push
もサポートします--mirror
。git clone --mirror; cd repo; git push --mirror new_remote
トリックを行う必要があります
これは完璧に機能しました。
git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin
ただし、これにより現在のリポジトリのミラーが作成され、それが新しい場所にプッシュされます。したがって、大規模なリポジトリや接続が遅い場合、これには時間がかかることがあります。
git push --mirror origin
オーバー-f
。
コピーしてください。とても簡単です。:)
クライアント側では、クライアントのローカルリポジトリの.git / configを編集して、必要に応じてリモートが新しいURLを指すようにします。
これは、他のいくつかの回答では部分的に行われています。
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirror
プッシュで重要なくらいである:これが正しい答えでなければなりません
git init --bare
私は他の人が言ったことを、指示の簡単なリストに従って再投稿しています。
リポジトリを移動する:新しいサーバーにログインしcd
、リポジトリを保持する親ディレクトリにログインしてrsync
、古いサーバーからのコピーに使用します。
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
クライアントが新しいリポジトリを指すようにします。リポジトリを使用する各クライアントで、古いオリジンへのポインタを削除し、新しいオリジンに1つ追加します。
client> git remote rm origin
client> git remote add origin user@new.server.com:path/to/repository.git
git remote set-url origin user@new.server.com:path/to/repository.git
GitHubでこのレシピをご覧ください:https : //help.github.com/articles/importing-an-external-git-repository
発見する前にいくつかの方法を試しましたgit push --mirror
。
魅力のように働いた!
git clone --mirror ...
はgit remote add ...
、git push --mirror ...
BitBucketの指示に従って、すべてのブランチを含むリポジトリをそこに移動しました。ここでは、#
キャラクターの後に説明が付いた手順があります。
cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go
私のためにうまくいきました。
これは、この回答のバリエーションであり、現在gitlabによって1つのサーバーから別のサーバーにgitリポジトリを「移行」するように提案されています。
古いプロジェクトがと呼ばexisting_repo
れ、existing_repo
フォルダーに保存されていると仮定します。
新しいサーバーにリポジトリを作成します。その新しいプロジェクトのURLがgit@newserver:newproject.git
コマンドラインインターフェイスを開き、次のように入力します。
cd existing_repo
git remote rename origin old-origin
git remote add origin git@newserver:newproject.git
git push -u origin --all
git push -u origin --tags
このアプローチの利点は、古いサーバーに対応するブランチを削除しないことです。
次のコマンドを使用できます。
git remote set-url --push origin new_repo_url
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/pjhyett/hw.git (push)
次のように単純にする必要があります。
git remote set-url origin git://new.url.here
このようにして、origin
新しいリポジトリの名前を保持します。次に、他の回答で詳述されているように、古いリポジトリを古いリポジトリにプッシュします。あなたが一人で仕事をしていて、あなたのすべての残骸をミラーリングしたいローカルレポがあるとしたら、あなたもそうするかもしれません(ローカルレポの中から)
git push origin --mirror # origin points to your new repo
しかし、「git push --mirror」は私のリポジトリをバックアップするのに十分ですか?を参照してください。(全部で--mirror
一度は使用しないでください)。
あるオリジンから別のオリジンに移動し、ローカルマシンに現在のオリジンのバックアップを保持する場合は、次の手順を使用できます。
今フォルダで
git remote get-url origin
上記のコマンドは、現在のリモートの起点URLを提供します。これは、最後のステップで起点を戻すのに役立ちます。
git remote set-url origin git@github.newlocation:folder/newrepo.git
上記のコマンドは、リモートの起点を新しい場所に設定します
git push --set-upstream origin develop
上記のコマンドは、現在アクティブなローカルブランチを、branchname developを使用してリモートにプッシュします。もちろん、gitではすべての履歴もプッシュされるため、すべての履歴が保存されます。
git remote set-url origin <original old origin>
上記のコマンドは、リモートの起点を現在の起点に戻します。これが必要なのは、既存のフォルダーにいて、現在のローカルフォルダー名と、レポのクローンを作成するために作成する新しいフォルダーを混同したくないためです。あなたはちょうど押しました。
お役に立てれば、
#gitリポジトリを1つのサーバーから新しいサーバーに移行する場合は、次のように実行できます。
git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS NEW_REPOSITORY_PATH
#check out all remote branches
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags
古いリポジトリのすべてのリモートブランチとタグが新しいリポジトリにコピーされます。
このコマンドを単独で実行する:
git push NEW_REPOSITORY_ALIAS
マスターブランチ(トラッキングブランチのみ)のみを新しいリポジトリにコピーします。