移動するとき、コンピューター間のgitリポジトリ同期?


89

デスクトップPCとラップトップを持っていて、デスクトップで作業することもあれば、ラップトップで作業することもあるとしましょう。

gitリポジトリを前後に移動する最も簡単な方法は何ですか?

gitリポジトリーを同一にして、他のコンピューターで離れたところから続行できるようにします。

両方のコンピューターに同じブランチとタグがあることを確認したいと思います。

ありがとうヨハン

注:SubVersionでこれを行う方法は知っていますが、これがgitでどのように機能するかについて興味があります。簡単な場合は、2台のPCを同期できる従来のサーバーとして3台目のPCを使用できます。

注:両方のコンピューターでLinuxが実行されています。


更新

それでは、サーバー上の裸のgitリポジトリとKingCrunchのpushコマンド構文を使用してXANI:sのアイデアを試してみましょう。この例では、2つのクライアントと1つのサーバーがあります。

それでは、最初にサーバー部分を作成しましょう。

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

それで、他のコンピューターの1つから、クローンを使用してリポジトリのコピーを取得しようとします。

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

次に、そのリポジトリに移動してファイルを追加します。

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

これで、サーバーがtestfile1.txtで更新されました。

とにかく、他のコンピュータからこのファイルを取得できるかどうかを見てみましょう。

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

これで、テストファイルが表示されます。

この時点で、さらにコンテンツを追加して編集し、サーバーを再度更新できます。

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

次に、最初のクライアントに戻り、gitpullを実行して更新されたファイルを確認します。これで、2台のコンピューター間を行ったり来たりして、必要に応じて3台目を追加できます。


同期スクリプトを使用して、携帯電話のWi-Fiホットスポット(このユースケースではrsyncよりも数百倍高速です!)でも、gitを使用してPC1からPC2にすばやく同期し、データ使用量を少なくするプロセスを自動化します:stackoverflow.com/questions / 4948190 /…
Gabriel Staples

回答:


27

複数のアプローチがあると思います。これをどのように処理するかを説明します

私は24時間年中無休のサーバーとして1つのネットブックを持っており、複数のgitリポジトリを保持しています。そこから/そこへ私はSSH経由で変更をプッシュおよびプルします。外部からのアクセスにはdyndns.orgを使用します。特に、いくつかのリポジトリにアクセスする必要がある3つ以上のシステムがあるため、正常に機能します。

更新:ちょっとした例。私のネットブックが「ネットブック」と呼ばれているとしましょう。そこでリポジトリを作成します

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

デスクトップに、そのクローンを作成します。多分私はいくつかのファイルも追加します

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

私のポータブルでは(最初に)同じことをしますが、(LANの外部からの)リモートアクセスの場合は、外部アドレスも追加します。

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

git(/ gitワークフロー)が機能するのと同じ方法です。リモートリポジトリはいくつでも追加できます。2つ以上が同じ「物理」リポジトリを参照している場合は、問題ではありません。独自のローカル「サーバー」は必要ありません。sshにアクセスできる任意のパブリックサーバーを使用できます。そしてもちろん、外部からのアクセスが必要ない場合は、パブリックサーバーはまったく必要ありません。ベアリポジトリはデスクトップシステム上に置くこともでき、ローカルファイルシステム内にworking-copy-repositoryを作成できます。

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

これが私がこれを処理する方法であり、私にとってはそれは非常にうまく機能します(完璧ではないにしても;))

読むべきもの:http: //progit.org/本当に良い本。-


リポジトリにさまざまな方法を使用すると、どのようになりますか?例を挙げて答えを明確にしますか?
ヨハン

おかげで、それらの例は多くを明らかにしました:)
Johan

6

リポジトリを一方のボックスからもう一方のボックスに複製してgit fetchから、もう一方のボックスからだけ実行できるように2つのリポジトリを設定します。

リモートoriginの名前をから他のボックスの名前に変更すると、リモートブランチが読みやすくなります。

を使用するだけでgit fetch(ではなくgit push)、これはベア以外のリポジトリでうまく機能することに注意してください。

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo

5

最も簡単な方法:(--bareチェックアウトされたファイルはなく、.gitのもののみ)で作成された中央リポジトリ、またはgithub

「分散」は次のようになります。

セットアップ:

  1. ラップトップの場合: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. デスクトップの場合: git remote add laptop ssh://user@laptop/home/user/repo/path

同期:

git pull laptop/desktop (リモートリポジトリにプッシュするときにgitがチェックアウトされたファイルを変更しないため、プッシュは非ベアリポジトリではうまく機能しません)

または、ペンドライブでリポジトリを作成します;)


--bareリポジトリを使用しようとしましたが、ワークフロー全体を正しく取得できません。
ヨハン

私はgitから始めたばかりで、ローカルのgitからgithubに移動し、これまでのところ実行できますが、コンピューター間の方法では機能しません。ばかげた質問-どの資格情報を使用しuserますか?githubの場合、rsa-pubキーを追加するだけです。クローンリクエスターコンピューターのrsa-pubをknown_hostsに追加しようとしましたが、うまくいきませんでした...
Dave

これは、リモートサーバーに継続的にアクセスすることなく、2台のローカルマシン間で同期するための最も簡単な方法です。
johnzachary 2012年

1

単純に使ってみrsyncませんか?


3
私は3台のサーバーの同期を維持するためにrsyncを何年も使用してきました。動作しますが、同期が完了すると、rsyncは変更をロールバックする方法を提供しません。また、ドライラン出力を十分に近くで読み取らず、マスターに存在しないファイルを削除するようにrsyncが設定されていたため、この方法で非常に多くのファイルが失われました。それ以来、私はgitに移行し、重要なディレクトリの同期を維持するためのはるかに安全な方法を見つけました。
クラウドキラー2013

1

GitHub、BitBucket、またはGitLabにリモートリポジトリを作成するだけではいけませんか?(後者の2つの会社は、無制限の無料のプライベートリポジトリを提供しています)。仕事で1日を終えたら、を使用git pushして変更をリモートリポジトリにプッシュします。家に帰ったらgit pull、仕事からホームマシンに変更をプルするだけです。同様に、家で終わったらやるgit push、そして仕事に戻ったらやるgit pull


1

[2台のコンピューター間で] gitリポジトリを前後に移動する最も簡単な方法は何ですか?

シナリオ1:PC1でのみ作業(コードとファイルの編集)を行いますが、PC2でもファイルの複製コピー(例:コードベース全体を構築するため)が必要です。

25 MB未満のデータを使用しながら、wifiホットスポットを介して1分未満でPC1からPC2に同期します。

私は一緒に旅行する1台の弱いコンピューター(ラップトップ)で作業していますが、他の場所にあるより強力なコンピューターで構築しています。私はいつもgitを使用して、スクリプトを使用してラップトップから他のコンピューターに同期しています。次のコマンドを入力して実行します。

sync_git_repo_from_pc1_to_pc2

それでおしまい!携帯電話のwifiホットスポットを使用し、数十ギガバイトのサイズのリポジトリで作業している場合でも、通常は約25MBのデータと約30秒から1分かかります。私はPC2にSSH接続しているので、PC2でgit log -1同期が機能したことを確認してから、buildコマンドを実行します。完璧に動作します。試してみます。詳細については、以下のリンクを参照してください。

注:PC2に複製されたリポジトリは、という名前のgitブランチにありsomename_SYNCます。常に「SYNCブランチ」を使用するのではなく、同じブランチ名を使用する場合は、スクリプトを適切に変更してください。必要に応じて、スクリプトを変更して、以下のシナリオ2のような効果を得ることができます。それでも、シナリオ2を手動で実行することは難しくないため、シナリオ2を手動で実行し続けることをお勧めします。自動化されたスクリプトが最も有益で時間の節約になるシナリオ1です。これにより、「変更」がPC1で実行され、「同期」がPC1から実行されるが、影響も与える簡単で迅速な「変更、同期、構築」ワークフローが可能になります。 PC2、および「ビルド」はPC2で行われます。

リンク:

  1. 完全なセットアップとインストールの手順はこちら:
    SSH経由でEclipseを使用してリモートプロジェクトで作業する
  2. Readme、ドキュメント、およびリポジトリはこちら: https //github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md
  3. 問題の正確なスクリプトはここにあります:https
    //github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

シナリオ2:私は複数のコンピューターで作業(コードとファイルの編集)を行っており、世界中のどのコンピューターからでも同じコードリポジトリを編集できるようにしたいと考えています。

gitリポジトリーを同一にして、他のコンピューターで離れたところから続行できるようにします。両方のコンピューターに同じブランチとタグがあることを確認したいと思います。

  1. 移動しhttps://github.comおよび必要に応じてアカウントを作成し、(推奨)SSHキーを設定します

  2. 次に、Webインターフェイスを使用して新しいリポジトリを作成します。

    1. 2020年以前の時点で、GitHubは無料のプライベートリポジトリも許可しているため、これはプライベートのクローズドソースプロジェクトでもうまく機能します。
  3. 新しいリポジトリのsshまたはhttpsクローンのURLを見つけます。例:git@github.com:ElectricRCAircraftGuy /eRCaGuy_dotfiles.gitまたはhttps://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git

  4. プロジェクトをPC1に複製します。例:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. そして、PC2でまったく同じクローンコマンドを繰り返します。

  6. PC1で、いくつかの変更を加えてコミットし、githubの「リモート」リポジトリにプッシュします。

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. PC2で、変更をプルします。

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. これで、PC2でファイルを編集してコミットし、上記の2つの手順で示したコマンドを使用してgithubにプッシュできます。次に、PC1から実行git pullして、PC2からこれらの変更をプルできます。

  9. 必要に応じて、PC1またはPC2で作業し、ファイルを簡単に共有して2台のコンピューター間で作業を分割して、このプロセスを続行します。変更をチェックアウト(プル)して他のPCで作業を続行する前に、すべての変更をコミットして1台のPCのgithubプッシュする必要があることを覚えておいてください。

  10. 2台のPC間でファイルが少し同期していない状況に陥った場合は、追加のブランチを使用したり、マージを実行したり、競合を解決したりする必要があります。そうすると、作業に似たものになります。全員が同じレポで作業している小さなチームで。Googleはあなたの友達です。Gitは非常に強力で、コマンド、コマンドセット、またはほぼすべてのワークフローを備えています。


0

そうですね、セットアップできる可能性のあるサーバーに(Git経由で)プッシュおよびプルできます。または、リポジトリをGitHubに保存して、同期ブリッジとして使用することもできます。


0

任意のコンピューター(おそらくデスクトップのもの)にリポジトリーを作成し、ラップトップとそれ自体の両方からリポジトリーにプッシュ/プルすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.