回答:
メインリポジトリからすべてのオブジェクトを複製する場合は、メインリポジトリ内で次のようにします。
git push --all <url-of-bare-repo>
または、ベアリポジトリ内でフェッチを実行します。
git fetch <url-of-main-repo>
プルはとマージしようとするため、プルを行うことはできませんHEAD
。これは、ベアリポジトリにはないものです。
これらをリモートとして追加して、将来の入力を省くことができます。
git remote add <whatever-name> <url-of-other-repo>
その後、あなたは単に行うことができます
git push --all <whatever-name>
または
git fetch <whatever-name>
あなたがしている。Ifはレポ内容に応じ<whatever-name>
ているorigin
、あなたも完全にそれを残すことができます。
免責事項:私はGitの第一人者ではありません。私が何か間違ったことを言ったら、私は悟りを開きたいです!
更新:コメントを読んでください!
git-fetch --all
裸のリポジトリ内で、私は私がメインのレポに作った更新情報が表示されませんでしたが、メインリポジトリからそれらをプッシュするときgit push --all <url-of-bare-repo>
、私はで更新を確認しますgit log
。おそらくこれには簡単な説明があります-誰かが説明できますか?
git log
で、これらの更新をベアリポジトリに表示しないことを意味します。(どちらも実行しません。またgit log --all
、git log --all
そこに表示されるはずの新しいファイルを介して、または単に表示することによって、裸のリポジトリを複製することによって作成された作業リポジトリも実行しません)。自分で確認するのはかなり簡単なテストです。ほとんどの場合、私は何が欠けているのか知りたいだけです。
git fetch -q origin master:master
、ローカルのベアリポジトリ内で実行できます。これはgithubのマスターブランチから新しいものをフェッチし、ローカルマスターブランチをそれに更新します。
master:master
HEADをリモートリポジトリのリポジトリに移動するために必要なものです。私の場合、問題が発生したため、gitが見つからなかったため、ベアリポジトリに接続できなくなりました。それが解決されるまで、私はリバーストンネルを実行し、次を使用して中央のリポジトリにフェッチしgit fetch ssh://localhost:8765/... master:master
ます。ありがとう!
git fetch origin *:*
次のコマンドを使用してリポジトリを作成しました
git clone --bare <remote_repo>
次に、Thomasの回答を使用してベアクローンを更新しようとしましたが、うまくいきませんでした。ベアリポジトリを更新するには(これはLet_Me_Beが要求していたと私が思うことです)、ミラーリポジトリを作成する必要がありました。
git clone --mirror <remote_repo>
次に、ミラーリポジトリで次のコマンドを実行して、メインリポジトリの更新を取得します。
git fetch --all
私はプルしてミラーGitリポジトリを読んでこのソリューションに出会いました
[remote "origin"]
セクションの追加、fetch = +refs/*:refs/*
およびmirror = true
で再作成する以外の唯一の解決策git clone --mirror
は、グレゴールからです:
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
その後git fetch
、できますし、更新が表示されます。奇妙なことに、これより前に、remote
設定されているにもかかわらず、にリストされてgit branch -a
いるブランチがありません。
git remote update
が作業を実行できるようにします。
--force
とを--prune
それぞれgit fetch
ラインに追加する必要があるかもしれません。
仮定:
$ git clone --bare https://github.com/.../foo.git
フェッチ:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
注:最初にディレクトリに移動--git-dir=foo.git
する場合は不要ですcd
。
origin
はわかりませんが、が定義されていない場合は、いつでもorigin
元のリポジトリへのパス/ URLでパーツを置き換えることができます。例$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
何度もいじった後、私はこれが私にとってうまくいくことを発見しました。
一度:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
同期したいときはいつでも:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
)はキーです。良い答え、ありがとう!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
が答えです。このコマンドを打った後、私はちょうどできgit fetch
、レポはリモートのものと同期します。
私にとってこの組み合わせはうまくいきました:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
フェッチには-uパラメータが必要でした。それ以外の場合は、「現在のブランチrefs / heads / masterの非ベアリポジトリへのフェッチを拒否しています」というエラーメッセージが表示されます(https://stackoverflow.com/a/19205680/4807875も参照)