2011-04-06 18 views
6

クローンされたリポジトリとブランチを使ってGitにいくつかの問題がありますが、これに対する答えを見つけることができないのです。私は説明しましょう:裸のマスターGitリポジトリがあります。私たちはすべてローカルのLinuxマシン上にあり、sshでアクセス可能です。私はこのように私のUSBサムドライブにこののクローンを作った:これは、もちろん私の親指ドライブ上の作業コピーとローカルクローンを私に与えGitは後続クローンのすべてのブランチをクローンしませんか?

git clone ssh://[email protected]//net/repos/netcube/patches.git 

。 Iこれにcdしてから、このクローンでは、いくつかの支店を参照してください。私は私のノートブックに私の親指ドライブ上の別の時間にリポジトリのクローンを作成する場合は、安定した分岐が失われ、

cd patches 
git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/stable 

をこれまでのところは良いです。参照:

cd .. 
git clone patches patches2 

cd patches2 

git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 

をクローニングした後、クローニングまたはgit fetchたときに、私はいくつかのオプションを試してみましたが、何もpatches2リポジトリに安定した枝をもたらしません。私はここに理解しているgitの欠如を持っていると仮定し、それを間違った方法で使います。誰かが私の使い方や理解の誤りを指摘してくれますか?

+1

コメントのおかげで私は誤解が何であるかを知ることができました。私が望んでいたのは、マスターリポジトリの内容で_リポジトリを転送することでしたが、Gitは追跡ブランチが何であるかに基づいて何らかの選択的な複製を行います。 'git clone --mirror'では、中間のリポジトリを取得しました。私は期待通りの方法で使えます。 – LeSpocky

+0

もっと簡単に言えば、 'git clone'(特別なオプションなし)は、ソースリポジトリからのリモートトラッキングブランチ、ソース上のローカルブランチ(' .git/refs/heads/' '.git/refs/remotes/ /'。 –

答えて

3

は、あなたが実際にそれがクローンに含まれるようにしたい場合は、リモートブランチに基づいて、ローカルブランチを作成する必要がHow to clone all remote branches in Git?

を参照してください。ただし、リモートブランチで作業しないため、ブランチで作業を開始するとすぐにローカルブランチを作成します。その前に、クローンには本当に必要なことはありません。なぜなら、遠隔地から簡単に取り出すことができるからです。

ただし、ノートブックコンピュータにネットワークが接続されていない場合は、ローカルリポジトリのクローン作成時に複製されるように、必要なすべてのリモートブランチのローカルブランチを作成する必要があります。

ただし、ネットワークに接続している場合は、git remote add origin2 ssh://[email protected]//net/repos/netcube/patches.gitgit fetch origin2を使用してください。origin2をもっと意味のある名前に置き換えてください。

+0

にあるものではなく、ノートブックからマスターリポジトリへのネットワーク接続があれば、私は転送リポジトリ(パッチ)を必要としません。 何が混乱しますか?私は、転送リポジトリへの最初のクローンは、マスターリポジトリの_all_チェンジセットを持つ完全なクローンと思われますが、2番目のクローンは、ローカルブランチのラベル​​がないので、いくつかのチェンジセットを削除します。 – LeSpocky

+0

いいえ、最初のクローンはソースをリモート(* origin *)として追加してブランチを取得しますが、リモコンは複製されないので、スティックのレポにはこのリモートブラブがありません鼻。 – ThiefMaster

+0

これは私が今行ったことです:私の転送リポジトリに追跡ブランチを作成して、後続のクローンにもクローンをクローンすることができます。これにはもう少し手作業が必要ですが、適切な解決策と思われます。 – LeSpocky

2

"origin"は、リポジトリを複製した場所に与えられたデフォルトの名前です。リモートから自動的に追加されます(注:リモートは単に「現在のものではありません」 - リモートは同じマシン)。

patchesにおいて、「起源」は、ゴラム上の元のレポを指す。

patches2において、「起源」は、patchesを指す。

リモートトラッキングのリファレンス(remotes/で始まるもの)は、実際にはローカルブランチではなく、ブランチが最後にリモートにあることが分かっていた場所へのポインタです。したがって、patchesでは元のリポジトリのリモートトラッキングの参照がありますが、patches2にはローカルのmasterブランチのリモートトラッキング参照がpatchesにあります。これはpatches2の起点が指し示すためです。

あなたはそれをクローニングした後patches2に別のリモートとしてオリジナルのレポを追加するためにgit remote addを使用することができます - またはあなただけのオリジナルのレポからではなくpatchesから再びクローンを作成できます。

@ThiefMasterに加えて
+0

オリジナルのrepoに接続できないため、元のrepoの_patches2_にクローンをコピーできません。リポジトリ_patches_は、私がとにかく動作しない場所である»転送リポジトリです。 – LeSpocky

+0

@LeSpocky:私はあなたが欠けている点が、それは 'origin'は、@のように、何を参照するかだからpatches2''で「リモート」として記載されている枝が(patches' 'で「ローカル」であるすべてのものであることだと思いますアンバーは言った)。 'patches'の' stable'ブランチを(ローカルで)チェックアウトしていない場合は、 'patches2'のリモートのリストには含まれません。 – nickgrim

+0

問題がある:私は_patches2_に_all_支店の_all_チェンジを表示するためにTortoiseGitを使用する場合には、_patches_に_stable_枝に属するチェンジが_patches2_するクローン化されていないようで、私は私が必要とするどのチェンジを知っているだろうそうしても、私は「wouldn最初のrepo(パッチ)からクローンされていないので、2番目のrepo(patches2)に入れてください。しかし、_all_チェンジセットを持つリポジトリ全体が複製されているだけでなく、一部が複製されていると仮定しました。 – LeSpocky

12

:私は

git clone --mirror 

または

git push --mirror 

に追加すべて(ローカル&リモート)ブランチ、参考文献やタグ

を更新したいと

情報としてn --mirrorは実際にリポジトリをそのまま複製して、宛先の変更を上書きします。ソースに存在しないブランチは、無条件にプルーニングされます。

本質的に、それは違いが影響分岐がローカル枝ならびに「リモート」参考文献とすることができるということで、リモートでの作業と「gitのリモート・アップデート・--prune」を行うようなものである[1]

@LeSpocky(など)

変更が消えた場合、マージの問題は発生しないため、簡単です。

--mirrorは、実際のコンセプトにちなんで命名されているため、ターゲットの相違点をカバーするように設計されています。ターゲットが裸でなく、ローカル変更をコミットした場合は、ターゲットのローカルブランチ(git log -ggit reflog)のログを介していつでも戻すことができます。

一般的な安全対策として、have a hook to 'git stash save' in the targetとすることができます。

--mirrorは、のミラーに設計されていますが、この質問はすべてのブランチを裸のリモートに複製する方法に関するものでした。 :)

[1](リモートの定義はコピーされませんが、その場合はプッシュ先の.git/configから.git/configへの手動コピーを行います)

+0

転送リポジトリ_patches_を作成するのに '--mirror'オプションを使用すると、後続の_patches2_のクローンが安定したブランチを持ちます。これは私が達成したいことに必要なオプションです。 – LeSpocky

+1

'--mirror'は、他の誰かがミラーリングしているリポジトリをクローンしてからプッシュするときに、そのリポジトリを変更した場合に副作用が発生することに注意してください - ' --mirror'はプッシュを設定して、新しい変更の有無にかかわらず、 – Amber

+0

@Amber:追加情報の更新情報 – sehe

0
$ git remote update 
$ git pull --all 
関連する問題