10

まず最初に、この質問は Dropbox で私の中央リポジトリをホストすることに関するものではないこと、そして私が git を使用するのはかなり初めてであることを強調したいと思います。Dropbox と git に関する他の質問はどれも、私の質問に実際に答えるものではありませんでした。それらはすべて、リポジトリを Dropbox でホストするか、または 2 つを組み合わせて使用​​することが「良い考え」であるかどうかのいずれかであり、私がここで尋ねているのはどちらでもありません。

私の質問は次のとおりです。私は 2 台のコンピューターを持っており、それぞれが Windows と Ubuntu (ラップトップとデスクトップ) のデュアル ブートを行っています。ローカルの git リポジトリ (github リポジトリから複製) を Dropbox フォルダに配置して、マシンやオペレーティング システム間で同期できるようにしています。あるマシン/オペレーティング システムでコミットを行うと、コミット ステータスが他のマシンに正しく同期されていないようです。

例えば:

Windows デスクトップで、foo.cpp を変更します。次に、「git commit -a」と「git push」を実行して、変更内容を github がホストするリポジトリにプッシュします。ファイルへの変更も Dropbox フォルダ全体で同期され、学校で Windows ラップトップにログインすると、すべてが問題なくダウンロードされます。ただし、「git status」と入力すると、次のように表示されます。

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo.cpp
#
no changes added to commit (use "git add" and/or "git commit -a")

しかし、私はすでにこれらの変更を別のマシンの、表向きは同じ作業ディレクトリにコミットしています。github サーバーから 'git pull' を試みると、すべてが 'Already up to date' であるというメッセージが表示されます。

リポジトリのステータスが Dropbox によってシームレスに同期されることを願っていました。この状況を回避する方法に精通している人はいますか? ありがとう!

4

1 に答える 1

11

TL;DR

Git との同時操作に Dropbox を使用しないでください。

最終的な一貫性はあなたを悲しませます

Dropbox は結果整合性を提供します。重要な Git 操作のバッキング ストアとして使用することは、Bad Idea™ ではありません。むき出しのリポジトリとしてではなく、作業ツリーとして使用している場合はさらに悪化します。確かにそれは可能ですが、このアプローチの限界を理解する必要があります。

Dropbox とSpideroak Hiveは、同期されたディレクトリを一度に 1 人のユーザーの作業ツリーとして使用したい場合に適しています。別のシステムからアクセスする前に、ファイルとフォルダーが完全に同期されていることを確認してください。単一ユーザー、単一システムのワークフローに固執している限り、問題が発生することはありませんが、マイレージはさまざまです。

タイムスタンプ

時間が一致しない複数のマシンを使用している場合にも、問題が発生する可能性があります。NTP を実行していない場合、一方のマシンのクロックが他方より進んでいるか遅れている可能性があります。これにより、同期サービスが新しいファイルを実際には古いファイルと見なす (またはその逆) 状況が発生する可能性があります。つまり、タイムスタンプに依存するものはすべてエラーが発生しやすい可能性があります。

タイムスタンプの正確性は、GNU make またはタイムスタンプに依存するその他のツールを使用している場合に特に重要です。Dropbox を使用して作業ツリーを同期する場合は、そのツリーに関係するすべてのシステムで時刻が正確であることを確認してください。

于 2013-08-31T16:49:40.247 に答える