2009-07-27 14 views
16

私がローカルの水銀レポで始めるならば、私は "メイン"レポ(私のdvcsロードを赦してください)と考えて、バックアップとしてbitbucketを使うつもりです追跡機能を発行すると、自分のローカルリポジトリ内のすべての変更を行うことができ、変更をbitbucketに送り返すために「hg push」を実行できます。bitbucket、 "hg push"と "hg update"

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

+1

私は十分に説明していないと思います。私は自分のローカルマシンで自分のコーディングを行います。満足したら、私はローカルマシン上で "hg commit"を実行します。これまでのところとても良いですが、今はビットバケットが写真の中にあります。だから私はビットバケットに "押し込む"。 bitbucketで "hg update"する必要はありませんか?はいの場合、どうすればよいですか? – chefsmart

答えて

38

なぜBitBucketのサーバーの作業ディレクトリに何があるのですか?プッシュする限り、変更はリポジトリにあり、BitBucketページに表示されます。

編集: OK、これを便利な回答に編集します。

BitBucketでdjango-hoptoadのような私のリポジトリをクローンダウンするとします。あなたのローカルマシン上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がディスクスペースを節約するためにそれを削除するよう設定していると思います。

hg updateは実際に作業ディレクトリにのみ影響し、BitBucketの作業ディレクトリは決して使用されないため、BitBucketにプッシュした後にhg updateを実行する必要はありません。

+0

これは本当に目が離せないものです。私はJesperがここで活動しているのを知っています。多分私達は彼からこのことについても聞くでしょう。 – chefsmart

0

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

12

working copy(別名作業ディレクトリ)とローカルrepositoryの間で混乱している可能性があります。これらは関連しているものの、別々のものです。ローカルリポジトリは作業コピーが特定のリビジョンからのファイルのバージョンに加えて、それらへの変更、

リポジトリとupdatecommit移動の変化との間にhgコマンドpushpull移動の変更が含まれているのに対し、すべての完全な履歴がファイルを追跡含まれていあなたの作業コピーとあなたのローカルリポジトリの間。

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

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

+0

ローカルリポジトリを変更しないで、更新を実行する必要がないリモートリポジトリに変更をプッシュすると、 リモートのrepoに変更をプッシュします。この場合は、私のbitbucket repoです。だから私は何とかbitbucketで "hg update"をやる必要はありませんか?はいの場合、どうですか?いいえ、なぜですか? – chefsmart

+0

あなたのリポジトリからの変更がbitbucketの作業コピーに反映されるように、bitbucketの更新を行う必要があります。私はあなたがビットバケットレポのためにローカルで "hg update"を実行することによってのみこれを行うことができると思います。私はこれを反映する答えを更新しました。 –

+1

もちろん、あなたはbitbucketのアップデートをしません。その作業コピーはどのような目的に役立つでしょうか?まったく、**全くありません**。 –

7

Bitbucketはレポジトリを表示します。 Dave Webbによって指摘されているように、hg update作業コピーの更新に関係しています。 hg pushを実行すると、Bitbucketのリポジトリを更新するためにチェンジセットを転送しています。そのため、ウェブインタフェースにこれが表示されます。

Steve Loshが指摘しているBitbucketには作業コピーはありません。あなたの後ろにはhg updateもありません。

あなたは作業コピーせずにクローンを作ることによってこれを自分で試すことができます。

% hg clone --noupdate repo repo-empty 

その後、repo-emptyに入るとhg logを行います。そこにファイルがなくても、の履歴(つまり、レポジトリ)はまだクローンされています。

% hg update 

% hg update null 

あなたがファイルを見て、新しいコミットを作りたい場合は作業コピーのみが必要とされていると再び消える:あなたは、ファイルがhg updateコマンドで表示させることができます。それ以外の場合は、スペースを節約するために削除することができます。これは通常、hg serveでのサービスにのみ使用されるクローン、またはBitbucketが使用するものと同等のもので行われます。