2017-10-13 8 views
3

私はホスト上のディレクトリにGITのレポを持っている開発ホストpats1を持っている:Gitでは、私の起源は失われました。作業コピーを新しい起源に変換するにはどうしたらいいですか?

~pats/gitrepos/myrepo.git 

レポは、私が他のボックスにクローンを作成いくつかの個人的なスクリプトや開発ツールを保持している(host1とhost2のを言う)ときI他のホストで開発しています。私はsshを使ってクローンを作成し、更新をプッシュします。 githubや「実サーバ」は使用されていません。

私のpats1ボックスが枯渇しました(ハードディスクの仮想マシンが消去されました)、既存のコピーからのデータを使用して新しい置換リポジトリを設定するにはどのような手順が必要かと思います。

myrepoの現行gitコピーをhost1またはhost2に変換し、pats2をセットアップする手順を知りたい場合は、gitrepos/myrepo.gitを新しい中央サーバーにして、既存の作業リポジトリ( host1とhost2)を新しいサーバーに追加します。

これに似た質問がありました。いくつかは以下のとおりです。

How to migrate GIT repository from one server to a new one

Convert a normal repo to a bare one

は、与えられた回答の中には、私のためのオプションではありません、その周りにあることを古いサーバーが必要です。以下は、私が従わなければならないと考えているステップです:

(1)新しい "中央サーバー(pats2)"を作成するホストの1つを選択します。1つのホストが他のホストよりも使いやすくなっていますか?

この例では、host1を選択します。

(2)host1のリポジトリに、コピーしたいものがすべて含まれていることを確認します。

この投稿はAtlassian Developer Tip of Week - Copying a full git repoレポが複製されるとき、枝が存在しているように、これは私が地元のレポは、リモートの枝のすべてを持っていることを確認したいと思う正しい方法 /起源は、チェックアウトしませんに言います。

元のホスト(pats1)が利用できないため、ローカルのリポジトリでチェックアウトされていないリモートブランチへの参照がある可能性があります。 私はgit cloneを使ってコピーすると自動的にクリーンアップされると思います - 私は読んだものに基づいてミラーリングしますが、記事へのリンクは見つかりません。

この手順では、私がmasterブランチしか持っていないため、私の場合host1のrepoに持っているものがうまくいきません。 :-)

この記事how-to-properly-mirror-a-git-repositoryは、私が使用してだけでなく、存在しない参照を削除しなければならないと言う:

git fetch --prune 

注:それは原点にアクセスすることができなかったので、私はそれをしようとしたときにこれが失敗しました。

(3)host1にレポのミラーを作成します。前者はまた、gitのノートや他のいくつかの属性を複製しているため

また

gitのクローン--mirrorはgitのクローン--bareの上に好まれる:How to properly mirror a git repositoryが言うので、私は--mirror使用してい

ssh host1; cd proj 
git clone --mirror myrepo myrepo.git 

(4)私の新しいサーバー(pats2)にそのrepo.git(レポ)をコピーします。

ssh pats2 mkdir gitrepos 
scp -r myrepo.git pats2:gitrepos/ 

上記のコマンドは(正しい場所にそれを置く〜なで/ gitrepos/myrepo .git)将来的にはので、私は、コマンドに

git clone pats2:gitrepos/myrepo 

NOTEを使用してクローンを作成することができます:レポが大きかった場合、私は、たとえば、圧縮およびネットワーク帯域幅を最小限に抑えるためにuntarしてタールにしたいかもしれませんtar czf - myrepo.git | mbuffer -s 1K -m 512 | ssh otherhost "cd gitrepos; tar zxf -"

(5)(pats2上の)新しいレポ場所を指すようにmyrepoのコピーを作業している既存のホストをポイント

ssh host1; cd proj/myrepo; 
git remote set-url origin pats2:gitrepos/myrepo.git 

Repeat above command for all hosts that were using the old "central1" host (pats1). 

私は他の誰かが、これは重宝して他の人がそれを確認することを願って私がやりたいことはうまくいくはずです。

+0

"origin"は* remote *のデフォルト名です。 –

答えて

1

あなたの手順は良いようです。 5オン

、あなたは、単に行うことができます:originに関連付けられているURLを変更します

cd proj/myrepo 
git remote set-url origin pats2:gitrepos/myrepo.git 

+0

改善のために@VonCに感謝します。私はこれを反映するために質問を更新し、これを答えに選択しました。 – PatS

関連する問題