web-dev-qa-db-ja.com

Mercurialエラー:リポジトリは無関係です

Mercurialを使い始めたばかりですが、Bitbucketに「中央」リポジトリがあり、1台のマシンに複製して変更を加え、コミットしてプッシュしました。次に、Bitbucketからコミットしてプッシュした別のマシンにクローンを作成しましたが、問題ありませんでした。その後、最初のマシンに戻り、変更をコミットしてプッシュしようとしましたが、エラーメッセージが表示されました。何が悪いのですか?最初に引っ張ったほうがいいですか?エラーを解決してプッシュするにはどうすればよいですか?どんな助けでもありがたいです!

ダレン。

34
iamdarrenhall

Mercurialリポジトリは、最初のコミット時にそのアイデンティティを取得します。 Bitbucketで新しいリポジトリを作成すると、IDのない空のリポジトリが作成されます。

このリポジトリをマシンAに複製し、コミットしてプッシュバックすると、リポジトリにブランドが付けられます。 2番目のマシンでリポジトリのクローンを作成した場合before最初のマシンからプッシュすると、説明した状況になる可能性があります。

プッシュできないマシンでhg pathsを実行してください。次に、プッシュ先となるリポジトリの別のクローンを作成します。ここで、各リポジトリの最初のチェンジセットを調べます

hg log -r 0

最初のチェンジセットが異なる場合は、Mercurialでそれを呼ぶように、2つの無関係なリポジトリがあります。次に、プッシュできない変更をパッチとしてエクスポートし、他のパッチにインポートできます。

38
Martin Geisler

プッシュパスが正しいことが確かである場合は、問題のリポジトリからパッチへの変更をエクスポートし、Bitbucketから再度クローンを作成して、パッチを新しいリポジトリにインポートするだけの価値があります。これは正常に機能するか、不良または破損したコミットを明らかにします。

3
bressain

Mercurialの内部についての知識を共有したいと思います。

同じリビジョンがないリポジトリは関係ありません。

Mercurial/treediscovery.pyにある対応する部分:

base = list(base)
if base == [nullid]:
    if force:
        repo.ui.warn(_("warning: repository is unrelated\n"))
    else:
        raise util.Abort(_("repository is unrelated"))

baseは、ローカル/リモートの両方のリポジトリにある共通部分のルートのリストです。

あなたはいつもリポジトリがどのように違うかを知っているかもしれません:

$ hg in $REMOTE
$ hg out $REMOTE

あなたは常に両方のルートをチェックするかもしれません(両方をローカルにクローンした後):

$ hg -R $ONE log -r "roots(all())"
$ hg -R $TWO log -r "roots(all())"

上記のコマンドからの出力がIDを共有しない場合-それらのリポジトリは無関係です。 hashプロパティにより、ルートが偶然に等しくなることは非常に不可能です。 2つのリポジトリの構築は次のようになっているため(共通の部分はあるがルートが異なる)、リポジトリを注意深く作成してルートチェックをだますことはできません。

0 <--- SHA-256-XXX <--- SHA-256-YYY <--- SHA-256-ZZZ
0 <--- SHA-256-YYY <--- SHA-256-ZZZ

それは、後続の各ハッシュが以前の値に依存するため、SHA-256を逆にすることを意味するため不可能です。

この情報があれば、どの開発者もerror: repository is unrelatedをトラブルシューティングできると思います。

参照 MercurialリポジトリID

注意、ありがとうございます。

3
gavenkoa

クローンしたもの以外のリポジトリにプッシュしようとすると、このメッセージが表示されます。 hg Pushだけを使用している場合は、プッシュのアドレスまたはdefaultパスを再確認してください。

デフォルトのパスを確認するには、hg showconfig | grep ^paths\.default(またはhg showconfigだけを使用して、paths.default=で始まる行を探す)を使用できます。

1
harpo