「メイン」リポジトリと見なすローカル mercurial リポジトリから始めて (私の dvcs ロードを許してください)、バックアップおよび問題追跡機能として bitbucket を使用するつもりなら、ローカルですべての変更を行うことができます。 repo を開き、"hg push" を実行して、変更を bitbucket に送り返します。
「hg update」を使用して、ローカル マシンで実行されるこの「hg push」コマンドに従う必要はありませんか?
BitBucketのサーバーの作業ディレクトリに何があるのか気にするのはなぜですか?プッシュする限り、変更はリポジトリにあり、BitBucketページに表示されます。
編集:わかりました、これを編集して有用な答えにします。
BitBucketのdjango-hoptoadのような私のリポジトリの1つを複製するとします。ローカルマシンに名前の付いたフォルダがdjango-hoptoad
あり、その内容は次のようになります。
django-hoptoad/
|
+-- .hg/
|
+-- ... my code and other folders
リポジトリ自体に関するすべてのデータは、.hg/
フォルダに保存されます。ここで、Mercurialは、どのファイルがどのチェンジセットで変更されたか、およびその他の多くのデータを保持します。
あなたはそれをこのように考えることができます(それは過度に単純化されていますが):
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
|
+-- ... my code and other folders as they appear in changeset 2
実行hg pull
して更新しない場合は、新しいチェンジセットをリポジトリにプルします。
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
| +-- data about changeset 3 (NEW)
| +-- data about changeset 4 (NEW)
|
+-- ... my code and other folders as they appear in changeset 2
更新しない場合... my code and other folders
でも、はにあるものと同等ですchangeset 2
が、他のチェンジセットは引き続きリポジトリにあります。
hg update
Mercurialを実行する... my code and other folders
と、が最新のチェンジセットの内容に更新されます。
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
| +-- data about changeset 3
| +-- data about changeset 4
|
+-- ... my code and other folders as they appear in changeset 4
実際、これは、たまたま入っているものが... my code and other folders
リポジトリにあるものと一致する必要がないことを意味します。削除するだけで、すべての変更セットがリポジトリに残ります。
django-hoptoad/
|
+-- .hg/
|
+-- data about changeset 1
+-- data about changeset 2
+-- data about changeset 3
+-- data about changeset 4
今すぐコミットすると、基本的に「ファイルなし」という新しいチェンジセットが作成されます。ただし、コミットする必要はありません。リポジトリには変更セットに関するすべてのデータが残っているため、ユーザーは引き続きプッシュおよびプルできます。
これはほぼ間違いなくBitBucketが行っていることです。BitBucketのサーバーにログインしてコードを編集し、そこでコミットすることは決してありません。プッシュ/プル/クローンを作成するだけです。つまり、... my code and other folders
が実際に使用されることはないので、ディスク容量を節約するためにJesperがそれを削除するように設定していると思います。
実際には作業ディレクトリにのみ影響し、 BitBuckethg update
の作業ディレクトリは使用されないため、hg update
BitBucketにプッシュした後に実行する必要はありません。
作業コピー(別名作業ディレクトリ)とローカルリポジトリの間で混乱しているかもしれません。これらは関連していますが、別々のものです。ローカルリポジトリには、追跡されたすべてのファイルの完全な履歴が含まれますが、作業コピーには、特定のリビジョンのファイルのバージョンとそれらへの変更が含まれます。
hg
コマンドpush
とpull
移動はリポジトリ間で変更update
をcommit
移動し、作業コピーとローカルリポジトリ間で変更を移動します。
したがってpush
、ローカルリポジトリを変更しないリモートリポジトリに変更した場合、ローカルリポジトリでを実行する必要はありupdate
ません。ただし、リモートupdate
リポジトリを使用する場合は、変更内容が作業コピーに表示されるようにする必要があります。逆に、リモートリポジトリから変更する場合は、これらの変更が作業コピーに表示されるようにpull
する必要があります。update
commit
同様に、を使用して別のリポジトリに送信する前に、作業コピーからローカルリポジトリへのすべての変更を行う必要がありますpush
。
Bitbucket はリポジトリを表示します。Dave Webb が指摘したように、作業コピーhg update
の更新に関心があります。これを行うと、Bitbucket のリポジトリを更新するために変更セットを転送しているため、Web インターフェースにこれが表示されます。hg push
Steve Losh が指摘したように、Bitbucket には作業コピーはありません。hg update
あなたの後ろで行われていることもありません。
作業コピーなしでクローンを作成することで、これを自分で試すことができます。
% hg clone --noupdate repo repo-empty
それから入って行ってrepo-empty
くださいhg log
。そこにファイルがなくても、履歴(つまり、リポジトリ) はまだ複製されていることがわかります。hg update
次のコマンドでファイルを表示できます。
% hg update
で再び消えます
% hg update null
作業コピーは、ファイルを確認して新しいコミットを作成する場合にのみ必要です。それ以外の場合は、スペースを節約するために削除できます。hg serve
これは通常、Bitbucket が使用するものまたは同等のものを提供するためにのみ使用されるクローンで行われます。
ローカル マシンで hg update を実行する必要はありません。更新は、データがローカル リポジトリにプッシュされ、ローカル リポジトリからプッシュされるときに使用されます。