8

一般的な質問。

Mercurialではブランチの代わりにブックマークを使用しようとしています。その理由は、ブランチに不要な固定名の永続的なアイテムをたくさん入れたくないからです。

この問題は、新機能の開発に別のブックマークを使用していて、それをアウトリポジトリにプッシュしたい場合に発生します。ええと、hgは「新しいリモートヘッド」を作成する場合はプッシュできません。新しいブランチを作成しているかのようにプッシュできるようにするには、どうすればよいですか?

例(問題を再現する方法)。

アリスはリポジトリを作成します:

C:\TestHg>mkdir Alice
C:\TestHg>cd Alice
C:\TestHg\Alice>hg init
C:\TestHg\Alice>echo line1>>file.txt
C:\TestHg\Alice>hg addremove
adding file.txt
C:\TestHg\Alice>hg commit -m "Initial commit."

ボブはアリスのリポジトリのクローンを作成します。

C:\TestHg\Alice>cd ..
C:\TestHg>hg clone Alice Bob
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

アリスはプロジェクトのコードにいくつかの変更を加えます。

C:\TestHg>cd Alice
C:\TestHg\Alice>echo line2 by Alice>>file.txt
C:\TestHg\Alice>hg commit -m "Alice continues her work on the project."

ボブは、別のブックマークを使用して新しいクール機能の作業を開始し、作業の独立した「ブランチ」を識別します。

C:\TestHg\Alice>cd ..\Bob
C:\TestHg\Bob>hg bookmarks
no bookmarks set
C:\TestHg\Bob>hg bookmark NewCoolFeature
C:\TestHg\Bob>hg bookmarks
 * NewCoolFeature            0:792db6cfc262
C:\TestHg\Bob>echo line2 by Bob (as a part of New Cool Feature implementation)>>file.txt
C:\TestHg\Bob>hg commit -m "Bob starts his work on New Cool Feature"

ボブは自分の変更をアリスのディレクトリにプッシュしようとします。

C:\TestHg\Bob>hg push -B NewCoolFeature
pushing to C:\TestHg\Alice
searching for changes
abort: push creates new remote head 38506e28a438!
(you should pull and merge or use push -f to force)

わかりました。最初に、ボブはアリスの変更を自分のリポジトリにプルする必要があります。

C:\TestHg\Bob>hg pull
pulling from C:\TestHg\Alice
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)

さて、今ボブは彼のリポジトリに2つの頭を持っていますが、これは問題ありません。

C:\TestHg\Bob>hg glog
o  changeset:   2:66beef200ba4
|  tag:         tip
|  parent:      0:792db6cfc262
|  user:        Alice
|  date:        Sun May 20 13:10:04 2012 +0400
|  summary:     Alice continues her work on the project.
|
| @  changeset:   1:38506e28a438
|/   bookmark:    NewCoolFeature
|    user:        Bob
|    date:        Sun May 20 13:12:26 2012 +0400
|    summary:     Bob starts his work on New Cool Feature
|
o  changeset:   0:792db6cfc262
   user:        Alice
   date:        Sun May 20 13:08:39 2012 +0400
   summary:     Initial commit.

もう1回プッシュしようとした後、ボブはマージを求められます。ボブは、新しいクール機能に関する作業の結果がまだマージの準備ができていないため、マージを行いたくありません。

C:\TestHg\Bob>hg push -B NewCoolFeature
pushing to C:\TestHg\Alice
searching for changes
abort: push creates new remote head 38506e28a438!
(did you forget to merge? use push -f to force)

関連する質問の例。

変更が別のブランチにあるかのように、変更をアリスのリポジトリにプッシュできるようにするには、ボブは何をする必要がありますか?

更新

UPD1:実際の状況では、アリスのリポジトリは、開発チームのすべてのメンバーの中央同期ポイントとして使用されます。

4

1 に答える 1

10

彼は次のいずれかを行う必要があります。

  • プッシュしないでください。なぜ彼は他の誰かのマシンに彼の未完成の変更を望んでいるのですか?
  • それを強制します。彼は合併するのを忘れたかどうか尋ねられた。彼はしませんでした。彼は新しい頭が欲しいので、それを強制します。

多くの場合、気付かずに新しい頭を作成するのは簡単なので、メッセージはそこにあります。ただし、それがまさにあなたが望むものである場合もあるので、オーバーライドスイッチがあります。

于 2012-05-20T11:41:58.533 に答える