GITリポジトリを1つのサーバーから新しいサーバーに移行する方法


264

ダウンしているサーバーがあります。移行しなければならないのはリポジトリだけです。このサーバーは、私のプロジェクトのいずれかのオリジン(マスター)としてリストされています。履歴を保持するためにリポジトリを移動する適切な方法は何ですか。


リポジトリに関するすべての情報(orgin、trunkなど)は、リポジトリを初期化している '.git'という名前のフォルダに保存されます。そのため、ここに
記載

1
単にgitの設定remote.origin.url NEWURL参照stackoverflow.com/questions/3011402/...
ニールス

1
リポジトリとすべてのブランチを移行する場合は、承認された回答ではなく、jzwienerまたはRobertoによる回答を使用してください。
ジョナグロン2018

回答:


247

新しいリポジトリの場所を追加するには、

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

8
これは古いリポジトリから新しいリポジトリに単一のブランチをコピーするだけですか?
アンドリューグリム

34
すべてのブランチを移行するためのソリューションは何ですか?
emmby 2012

50
を介してすべてのブランチを一度にプッシュできるはずgit push -u new_repo_name --allです。
rmarscher 2013年

10
すべてのブランチの移行は、stackoverflow.com
a / 18336145/923599

10
git-configファイルを編集する代わりに、このコマンドは私のために機能しました:git remote rename new_repo_name origin
Salim

210

すべてのブランチとタグを移行する場合は、次のコマンドを使用する必要があります。

git clone --mirror [oldUrl]

古いレポをすべてのブランチで複製する

cd the_repo
git remote add remoteName newRepoUrl

新しいリモコンをセットアップする

git push -f --tags remoteName refs/heads/*:refs/heads/*

すべての参照をrefs / headsの下にプッシュする(これはおそらくあなたが望んでいることです)


5
Gitは不満を言っていて--tags、とrefs/heads/*:refs/heads/*互換性がありません--mirrorstackoverflow.com/a/26552740/1484831はうまく機能しました。
Avigit 2014年

3
私はこれを使用し、それは私のために働いた。おそらく当選したはずです。ローカルで取得する「コード」はメタデータに負荷がかかっているように見えるため、何か問題が発生した場合でも初心者にはわかりにくいことに注意してください。
ニック2015年

3
これは承認された答えであるはずです。他のソリューションよりもはるかに優れています
Travis Griggs、2015年

15
新しいリモートリポジトリのすべてのブランチに接頭辞としてrefs/heads/refs/heads使用していたgit push -f --tags remoteName refs/heads/*:refs/heads/*ので、次のように交換しましたgit push remoteName --mirror
dumbledad

1
pushもサポートします--mirrorgit clone --mirror; cd repo; git push --mirror new_remoteトリックを行う必要があります
knittl

144

これは完璧に機能しました。

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

ただし、これにより現在のリポジトリのミラーが作成され、それが新しい場所にプッシュされます。したがって、大規模なリポジトリや接続が遅い場合、これには時間がかかることがあります


15
***これ***
Paul Lockwood

1
これは良い解決策ですgit remote set-url origin <URL to my NEW repo location>(rsync'ed to the old origin to the new server / location)
Toni Homedes i Saun

2
これはすごい。複数の
リモートを

17
優先git push --mirror originオーバー-f
アイディアカピ

78

コピーしてください。とても簡単です。:)

クライアント側では、クライアントのローカルリポジトリの.git / configを編集して、必要に応じてリモートが新しいURLを指すようにします。


6
単にそれを複製することもできます。また、.git / configファイルを直接編集する代わりに、git remote rm originを使用できます。git remote add origin <新しいリポジトリ>。
ebneter 2009

4
リモートのrmを実行すると、構成のそのセクションでの構成が失われます。追加の手順を実行せずに複製すると、トランク以外のブランチが失われます。これらの問題に対処することは可能ですが、実際には、rsyncするだけです。
bdonlan 2009

1
gitのみを使用して作業を行うソリューションは何ですか?rsyncには、ジャンプするのが難しい追加の管理フープが必要です
emmby

2
これにより、たとえばフックやその他の構成も保持されるため、純粋なgitソリューションよりも優先します
mnagel 2013年

65

これは、他のいくつかの回答では部分的に行われています。

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new

6
これは実際、最も完全で簡単な答えです。
Lawrence Dol 2016年

3
--mirrorプッシュで重要なくらいである:これが正しい答えでなければなりません
PaoloC

新しいサーバー上に新しいリポジトリを初期化すると裸のinitを行うことを覚えているかのプッシュが成功しません:git init --bare
マルコ・

35

私は他の人が言ったことを、指示の簡単なリストに従って再投稿しています。

  1. リポジトリを移動する:新しいサーバーにログインしcd、リポジトリを保持する親ディレクトリにログインしてrsync、古いサーバーからのコピーに使用します。

    new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
    
  2. クライアントが新しいリポジトリを指すようにします。リポジトリを使用する各クライアントで、古いオリジンへのポインタを削除し、新しいオリジンに1つ追加します。

    client> git remote rm origin
    client> git remote add origin user@new.server.com:path/to/repository.git
    

シンプルで効果的。サーバー間のトラフィックを制限する場合は、フラグ--bwlimit = XXXを追加できます。ここで、XXXは帯域幅(キロバイト/秒)です。
グレッググロックナー2014年

7
削除して追加するよりも少し良い:git remote set-url origin user@new.server.com:path/to/repository.git
クリスKL

git + capistranoを使用してサーバーにデプロイする場合は、ローカルホストとサーバー上のキャッシュされたコピーの2か所でset-url originを使用する必要があったことに注意してください。
anandvc 2016年


10

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

私のためにうまくいきました。


8

手順に従ってください:

  • git remote add new-origin
  • git push --all new-origin
  • git push --tags new-origin
  • git remote rm origin
  • git remote rename new-origin origin

5

これは、この回答のバリエーションであり、現在gitlabによって1つのサーバーから別のサーバーにgitリポジトリを「移行」するように提案されています。

  1. 古いプロジェクトがと呼ばexisting_repoれ、existing_repoフォルダーに保存されていると仮定します。

  2. 新しいサーバーにリポジトリを作成します。その新しいプロジェクトのURLがgit@newserver:newproject.git

  3. コマンドラインインターフェイスを開き、次のように入力します。

    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
    

このアプローチの利点は、古いサーバーに対応するブランチを削除しないことです。


4

次のコマンドを使用できます。

git remote set-url --push origin new_repo_url

http://gitref.org/remotes/の

$ 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)

4

次のように単純にする必要があります。

git remote set-url origin git://new.url.here

このようにして、origin新しいリポジトリの名前を保持します。次に、他の回答で詳述されているように、古いリポジトリを古いリポジトリにプッシュします。あなたが一人で仕事をしていて、あなたのすべての残骸をミラーリングしたいローカルレポがあるとしたら、あなたもそうするかもしれません(ローカルレポの中から)

git push origin --mirror # origin points to your new repo

しかし、「git push --mirror」は私のリポジトリをバックアップするのに十分ですか?を参照してください(全部で--mirror一度は使用しないでください)。


3

すべてのコミットとブランチを古いリポジトリから新しいリポジトリに維持したい場合は、これらの指示に従ってください

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>

1

git-copyを使用して、すべての履歴を持つリポジトリを複製できます。

git copy http://a.com/old.git http://a.com/new.git

1

あるオリジンから別のオリジンに移動し、ローカルマシンに現在のオリジンのバックアップを保持する場合は、次の手順を使用できます。

  1. 最初に、移動したい(git)フォルダーにローカルに移動します
  2. 新しいリポジトリをオンラインで作成するこの手順では、コードをプッシュできるリポジトリを作成します

今フォルダで

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>

上記のコマンドは、リモートの起点を現在の起点に戻します。これが必要なのは、既存のフォルダーにいて、現在のローカルフォルダー名と、レポのクローンを作成するために作成する新しいフォルダーを混同したくないためです。あなたはちょうど押しました。

お役に立てれば、


0

#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

マスターブランチ(トラッキングブランチのみ)のみを新しいリポジトリにコピーします。

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