35

異なる PC に 2 つの git リポジトリがあります。私はそれらのすべてにいくつかのローカルブランチを持っています。このブランチをリモート サーバーに送信したくありません。ローカルのままにしておくだけです。Web を使用せずに同期するにはどうすればよいですか? ある PC でレポジトリを圧縮して、別の PC に移動することはできますか? それは安全ですか?たぶん、すべてのブランチから何らかの形で最新の変更をエクスポートできますか?

4

4 に答える 4

26

むき出しのクローンを作成するよりも、バンドルを作成することを好みます (「Git リポジトリをメールで送信するにはどうすればよいですか?」を参照) 。

おまけに、ベア リポジトリの特徴がいくつかあるということです。つまり、リポジトリからプルしたりクローンしたりできますが、気にする必要があるのは1 つのファイルだけです。

machineB$ git clone /home/me/tmp/file.bundle R2

これにより、結果のリポジトリで " " という名前のリモートが定義さoriginれ、バンドルからフェッチおよびプルできるようになります。の$GIT_DIR/configファイルにR2は、次のようなエントリがあります。

[remote "origin"]
    url = /home/me/tmp/file.bundle
    fetch = refs/heads/*:refs/remotes/origin/*

結果の mine.git リポジトリを更新するには、に格納されているバンドル/home/me/tmp/file.bundleを増分更新で置き換えた後、フェッチまたはプルできます。

元のリポジトリでさらに作業を行った後、増分バンドルを作成して他のリポジトリを更新できます。

machineA$ cd R1
machineA$ git bundle create file.bundle lastR2bundle..master
machineA$ git tag -f lastR2bundle master

次に、バンドルを他のマシンに転送して交換し/home/me/tmp/file.bundle、そこからプルします。

machineB$ cd R2
machineB$ git pull
于 2011-02-01T08:40:31.540 に答える
23

このブログ記事「サーバーなしで Git リポジトリを同期する」 ( Victor Costan著)を参照してください。

この投稿では、リポジトリを持つ両方のホストにネットワーク接続されたサーバーを使用せずに、2 つのリポジトリ間で変更をプッシュする方法について説明します

USB スティックにリポジトリを作成して起動します。

mkdir /path/to/usb/stick/repository.git
git clone --local --bare . /path/to/usb/stick/repository.git

次に、USB スティック上のリポジトリをリモート リポジトリとして登録し、目的のブランチをそこにプッシュします (マスターをプッシュしたくない場合は、目的のブランチに置き換えてください)。

git remote add usb file:///path/to/usb/stick/repository.git
git push usb master

将来的には、USB リポジトリを他のリモート リポジトリと同様に扱うことができます。マウントされていることを確認してください:) たとえば、次の例では、新しい変更を USB リポジトリにプッシュします。

git push usb

受信側で、USB スティックをマウントし、リポジトリのファイル URL を使用します

file:///path/to/usb/stick/repository.git

いくつかの便利なコマンド:

# cloning the repository on the USB stick
git clone file:///path/to/usb/stick/repository.git
# updating a repository cloned from the USB stick using the above command
git pull origin
# adding the USB stick repository as a remote for an existing repository
git remote add usb file:///path/to/usb/stick/repository.git
# updating from a remote repository configured using the above command
git pull usb master
于 2011-02-01T08:03:59.897 に答える
5

他のファイル システムへのリポジトリの直接コピーは、ベア クローンまたはバンドルの代替手段です。コピーした後、コピーしたリポジトリをローカル リモートとして直接設定できます (ローカル リモートは直感的ではないように見えるかもしれません)。フェッチして最初のリポジトリにマージします。

つまり、2 番目のコンピューターから ~/repo1 に repo2 をマージするには、最初に repo2 を ~/repo2 の repo1 ファイル システム (メモリー スティック、ネットワーク コピーなど) にコピーします。次に、2 つのローカル リポジトリ間で変更をプルする Gitへの回答を使用できます。 :

~/repo1 $ git remote add repo2 ~/repo2
~/repo1 $ git fetch repo2
~/repo1 $ git merge repo2/foo

これが機能するのは、git に関するウィキペディアの記事に次のように記載されているためです。 . 結果として得られるコピーは、オリジナルから独立しており、認識されていません。」

于 2013-01-16T01:40:46.533 に答える