忍者ブログ

mshencity

Git を使用して 2 つのローカル マシン間でファイルを同期する方法

リモートで仕事をしているため、自宅ではデスクトップ コンピューターを使用し、外出時にはラップトップを使用することがよくあります。それはとても簡単です。理論的には、いくつかの基本的な要件さえあれば、どこにいても、どのコンピューターでも作業できます。

しかし、これらのニーズの 1 つは深刻な障害となっています。それは、現在の仕事を持ち続けなければならないということです。これを解決しようとするこれまでの試みはすべて失敗していましたが、Git は私が探していた答えでした。



ローカル ファイルの同期に Git を使用する理由は何ですか?

OK、共有ドライブ、ssh、rsync などの代替手段があります。では、なぜこの特定のケースで Git を使用するのでしょうか?

まず、私は Git に精通しています。私は毎日それを使用しており、自分の好きなように動作するように設定しており、その仕組みについても少し理解しています。 Git は現在、実証済みのツールであり、それをサポートするアプリやコマンドが無数にあります。これは本質的にバージョン管理の事実上の標準であり、その複雑さにもかかわらず、通常は適切に機能します。






















ID、日付、作成者を含むコミットの長いリストと、その後にコミット グラフとメッセージが続きます。




いずれにせよ、これらのファイルでバージョン管理を使用することも検討しているので、作業の適切なバックアップと履歴が必要です。 Git を選択するのは明白なので、これを利用してデバイス間でファイルを同期できれば、一石二鳥です。

時々、クラウドで何かをすばやくホストするために Google ドライブに頼ることもありますが、それは脆く、必要以上に手間がかかると感じます。必ずしも信頼できるとは限らない USB スティックや外付けドライブも同様で、瞬時に処理すべき作業に対してあれこれと手を出しすぎます。



なぜ GitHub を避けるべきなのでしょうか?

この問題に対する考えられる解決策の 1 つは、GitHub でリポジトリをホストすることです。これにより、インターネット アクセスがあれば、いつでも (ほとんどの場合) 利用できる一元的な場所が得られます。






















中央にGitHubのロゴが入ったドットファイル。
クレジット: Lucas Gouveia/ハウツー ギーク




ただし、ここには小さな問題が 2 つあります。まず、私がほのめかしたダウンタイムが問題になる可能性がありますが、実際にはそれだけに基づいて決定を下すほど一般的ではありません。しかし、これらのファイルの一部をサードパーティのサーバーでホストすると不安になります。この作業の一部は機密である可能性があり、誤ってパスワードやその他の機密データをチェックインしてしまったらどうなるでしょうか?

確かに、プライベート リポジトリを使用することもできますが、これはすべて不必要に感じられます。本当に必要がない限り、リモートのサードパーティを使用する必要はありません。 GitHub プラットフォームの共同作業機能やプロジェクト管理機能を使用するわけではないので、少し冗長に感じます。もっと良い方法があるはずです。



git を使用してファイルの同期を保つ方法

さらに良い方法があります。ローカル Git です。結局のところ、マシン間のファイルの同期は Git の中心的な役割の一部であり、ローカル ネットワーク上でそれを行うことは、インターネット上で行うことと実際には変わりません。

このシステムはセットアップが簡単であることがわかります。いくつかの個別の部分が含まれるだけです。ただし、それぞれの操作は簡単で、一度実行すれば、同期は簡単です。



リモートログインを有効にする


最初に設定する必要があるのは、SSH アクセスです。 macOS ではこれを「リモート ログイン」と呼びます。同じことを行うには、OS が提供するメカニズムを使用する必要があります。これを行う必要があるのは、リポジトリをホストする 1 台のコンピュータだけです。






















リモート ログインがオンになっている共有オプションを表示する macOS 設定ダイアログ。




この設定を変更すると、次のコマンドを実行するときにコマンド ライン アクセスが可能になります。


ssh username@ip-address




静的IPを設定する


これは環境によって異なるもう 1 つの手順です。実際、すでにローカル ネットワークがセットアップされている場合は、それを完全に回避し、代わりに DNS を使用して Git セットアップを構成できる場合があります。

しかし、私はゼロからのスタートだったので、できるだけ仕事を減らしたかったのです。プロセスが複雑になりすぎないように、代わりに IP アドレスを使用します。唯一の問題は、一貫したローカル IP が必要になることですが、ルーターを簡単に設定するだけで十分です。






















「常にこの IP アドレスを使用する」設定が有効になっているルーター構成フォーム。




繰り返しますが、実際にこれを実行する必要があるのはリポジトリ ホスト マシンだけですが、その作業中に他のデバイス用に設定しても問題はありません。



SSHキーを作成する


リポジトリを同期するたびにログインの詳細を入力したくない場合は、各クライアントに SSH キーを設定することをお勧めします。これは 1 回限りのセットアップで、実行する各マシンとの間でファイルを同期できるようになります。

まず、ssh-keygen プログラムを使用してキー ペアを生成します。


ssh-keygen


ファイル名と、セキュリティ上の理由から使用するオプションのパスフレーズの入力を求められます。キーを生成したら、次のコマンドを使用してホスト マシンにアップロードします。


ssh-copy-id -i /path/to/key/file username@ip-address


この時点で、すべてが動作していることを確認することをお勧めします。


ssh username@ip-address




ベアリポジトリをセットアップする


これがセットアップが簡単で最もクリーンなソリューションであることがわかりました。まず、リポジトリを保存するコンピュータを選択する必要があります。作業ツリーではなく、クライアント間の中央同期として機能するベア Git リポジトリです。

適切なディレクトリ (理想的には移動しないディレクトリ) を選択し、その中で次のコマンドを実行します。


git init --bare


ベア リポジトリには、ワーク ツリーのように .git ディレクトリではなくルートに、HEAD や config などの git メタデータ ファイルが含まれています。







この記事では、リポジトリを最初からセットアップする方法について説明します。既存のリポジトリで同じことをしたい場合は、次のことを調べてください。 git clone --bare







各マシン上でリポジトリのクローンを作成します


ファイルを共有する各マシンで、選択したディレクトリを入力し、コマンドを実行して新しい作業ツリーにリポジトリのクローンを作成します。すでにベア リポジトリをホストしているマシンでは、ローカル パスを使用できます。例:


git clone /path/to/repo


他のマシンでは、login@host 形式を使用する必要があります。


git clone username@ip-address:path-to-repo


たとえば、ローカル設定で次のコマンドを実行しました。


git clone bobby@192.168.1.196:/Users/bobby/src/repos/bare/myproject


これにより、GitHub からリポジトリを複製するのと同じように、リポジトリがワーク ツリーに複製されます。



通常どおりに作業します (追加、コミット、プッシュ)。

これで、通常どおりに作業できます。ファイルを編集して保存し、場合によっては git にコミットします。


git add .
git commit -m 'my latest work'
git push


その日の仕事が終わったとき、または外出して別の場所で作業しようとしているときは、忘れずに git Push を実行してください。毎日の作業を開始するときは、必ず git pull を実行して、使用しているマシンで最新の更新を取得してください。







もちろん、同じマシンでしか作業していないことがわかっている場合は、この毎日のプロセスを省略できますが、常に最新の作業を利用できるようにする習慣を身につけることをお勧めします。

もう 1 つの潜在的なオプションは、cron などを使用して git プロセスを自動化することです。これにより、git は完全にバックグラウンドで維持され、ファイルの保存と作業に集中できるようになります。スケジュールが決まっていて、コンピューターの電源を常にオンにしておく場合は、自動化されたアプローチがはるかに簡単です。

PR

コメント

プロフィール

HN:
No Name Ninja
性別:
非公開

P R