質問

開発ツリーをさまざまなコンピューターで同期させる必要がありますが、それらの間にネットワーク接続はありません。

中央のGitリポジトリがあり、通常、オフィスコンピューターで自分のクローンに取り組んでいます。時々、オフィスネットワークに接続されていない別のコンピューターで開発を行う必要があります。コンピューターはどれもインターネットに接続されていません。同期の間に両方のコンピューターで開発が実行される場合があります。

ヘルプページを読みました git bundle, 、これは最高のツールのように思えますが、優れたワークフローをどのように設定できるかは本当にわかりません。

アドバイスやポインターを教えてもらえますか?

役に立ちましたか?

解決

バンドル!

Gitバンドルを使用したワークフローは、他のワークフローと本質的に同じになります。これはひどく役立つアドバイスのようには思えないかもしれませんが、ここでは次のとおりです。通常使用するワークフローを使用し、「プッシュ/プル」を「フラッシュドライブでここにバンドルを持ち込んでからプル」に置き換えます。

Man Pageには、実際にこれを進めるための非常に優れたウォークスルーがありますが、これは一方向の例です。完全性のために、ここにわずかに変更されたバージョンがあります。

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

注意すべき重要なことは、バンドルをリモコンとして追加し、他のリモコンと同じようにやり取りできることです。そのリモコンを更新するには、新しいバンドルを新しいバンドルをドロップして、前のバンドルを置き換えます。

また、基礎を選ぶために少し異なるアプローチを取りました。 Man Pageはタグを使用しており、他のホストに転送された最後の参考文献で常に最新の状態に保たれます。私は単にリモートブランチを使用しました。 から 他のホスト。少し非効率的です。それは一歩遅れているので、あなたはあなたが必要以上に束ねることになります。しかし、フラッシュドライブは大きく、バンドルは小さく、追加のステップを踏む必要があるのではなく、すでに持っているREFを使用すると、タグに注意することで多くの労力が節約されます。

バンドルを少しトラブルにすることの1つは、それらにプッシュできず、それらを「リベース」できないことです。新しいベースに基づいてバンドルが必要な場合は、再作成する必要があります。新しいコミットが必要な場合は、再作成する必要があります。この手間は私の次の提案を生み出します...

サムドライブのレポ

正直なところ、あなたのリポジトリが本当に大きい場合を除き、これは同じくらい簡単かもしれません。親指ドライブに裸のクローンを置くと、両方のコンピューターからプッシュして引っ張ることができます。ネットワーク接続のように扱います。中央のリポジトリに転送する必要がありますか?プラグイン!

他のヒント

@Jefromiの答えは素晴らしかった - GITドキュメントよりも10倍優れており、理解できない要件とアクションについて続いています。

それでも少し複雑ですので、ここでは一度一度だけシンプルなケースを同期します(私の場合:from:壊れたWiFiカードを備えたオフラインラップトップ、宛先:ネットアクセス付きデスクトップ)。 @jefromiの答えに基づいて、これは正常に機能しているようです。

先に=いくつかのコミットによって先にあるマシン。後ろ=コミットをコピーしたいマシン

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

両方:mybundlename.bundleをコピーします(電子メール、USBなどを使用)

後ろ:(ファイルmybundname.bundleが必要な場所に配置します 外側 プロジェクトフォルダー)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

最後にブランチ名を含める限り(デフォルトでは、ブランチ「マスター」を使用していない場合)、これは正常に機能しているようで、背後にある内部参照を置き換えないので、 Origin Masterに賛成で同期することができます。

つまり、インターネットアクセスがある場合は、まだ安全です。

(OPTIONAL) 4. BEHIND: git push

...そして、それはあなたの変更が通常どおり、後ろにローカルに行われたかのように、メインリポジトリを更新します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top