16

「メイン」リポジトリと見なすローカル mercurial リポジトリから始めて (私の dvcs ロードを許してください)、バックアップおよび問題追跡機能として bitbucket を使用するつもりなら、ローカルですべての変更を行うことができます。 repo を開き、"hg push" を実行して、変更を bitbucket に送り返します。

「hg update」を使用して、ローカル マシンで実行されるこの「hg push」コマンドに従う必要はありませんか?

4

4 に答える 4

38

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 updateMercurialを実行する... 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 updateBitBucketにプッシュした後に実行する必要はありません。

于 2009-07-27T14:59:47.220 に答える
12

作業コピー(別名作業ディレクトリ)とローカルリポジトリの間で混乱しているかもしれません。これらは関連していますが、別々のものです。ローカルリポジトリには、追跡されたすべてのファイルの完全な履歴が含まれますが、作業コピーには、特定のリビジョンのファイルのバージョンとそれらへの変更が含まれます。

hgコマンドpushpull移動はリポジトリ間で変更updatecommit移動し、作業コピーとローカルリポジトリ間で変更を移動します。

したがってpush、ローカルリポジトリを変更しないリモートリポジトリに変更した場合、ローカルリポジトリでを実行する必要はありupdateませ。ただし、リモートupdateリポジトリを使用する場合は、変更内容が作業コピーに表示されるようにする必要があります。逆に、リモートリポジトリから変更する場合は、これらの変更が作業コピーに表示されるようにpullする必要があります。update

commit同様に、を使用して別のリポジトリに送信する前に、作業コピーからローカルリポジトリへのすべての変更を行う必要がありますpush

于 2009-07-27T12:29:39.107 に答える
7

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 が使用するものまたは同等のものを提供するためにのみ使用されるクローンで行われます。

于 2009-07-27T21:48:26.417 に答える
0

ローカル マシンで hg update を実行する必要はありません。更新は、データがローカル リポジトリにプッシュされ、ローカル リポジトリからプッシュされるときに使用されます。

于 2009-07-27T12:20:35.670 に答える