31

StackOverflowで他のMercurialの大文字と小文字を区別する回答を見たことがあります。UNIXのような大文字と小文字を区別するファイルシステムにアクセスできる場合は、そこをチェックして修正する必要があると言われています。問題は、UNIXボックスにアクセスできないことです。私はWindowsアプリケーションを開発しているWindows開発者です。

Unixボックスなしでこれを修正するにはどうすればよいですか?

4

9 に答える 9

30

filesystemMercurialの次のバージョンに含まれる予定のヘルプトピックがあります。

https://www.mercurial-scm.org/pipermail/mercurial-devel/2012-April/039522.html

衝突するファイルの名前を変更する

大文字と小文字を区別しないファイルシステムでは、大文字と小文字が一致するファイルを含むリビジョンへの更新は、 --checkまたはを使用しても中止され--cleanます。

このようなリビジョンを修復するには、大文字と小文字を区別するファイルシステム上の衝突するファイルの一方または両方に新しい名前を付け、それらをコミットして新しい衝突防止リビジョンを作成する必要があります。

..注::大文字と小文字を区別しないファイルシステムでこのようなリビジョンを参照または修復する(または修復する必要がある)場合は、「手動で更新する」セクションを参照してください。

:hg:mergeが中止されたが、:hg:update --checkが各リビジョンに対して成功した場合、マージされるリビジョン間で衝突が発生します。

この場合、マージする前に衝突を避けるために、一方または両方のファイルの名前を変更する必要があります。

最近のMercurialでは、大文字と小文字を区別しないファイルシステムでも、以下の手順でファイル名の大文字と小文字を安全に変更できます。

$ hg rename a.txt tmp
$ hg rename tmp A.TXT

手動で更新する

大文字と小文字を区別しないファイルシステムで大文字と小文字を区別しないファイルシステムで大文字と小文字を区別しないファイルシステムで大文字と小文字を区別する衝突を引き起こすリビジョンで作業ディレクトリを更新する(または更新する必要がある)場合、たとえば、そのようなリビジョンで衝突するファイルの名前を変更したり、コンテンツを参照したりする場合は、以下のWikiページを参照してください。

https://www.mercurial-scm.org/wiki/ManualCheckout

これは、専門家でないMercurialユーザーにはお勧めしません。

別の同様の手動の方法をここで説明します。

https://www.mercurial-scm.org/wiki/FixingCaseCollisions

ただし、これはMercurialの内部にもかなり深く入り込んでいるため、最後の手段でない限り、これは避ける必要があります。

于 2012-05-10T11:29:49.580 に答える
14

HGの名前変更コマンドを発行することにより、大文字と小文字を区別するファイルシステムに頼ることなくこれを解決しました。「Foo.txt」を「foo.txt」と呼ぶ必要があるため、問題が発生しているとします。

hg rename Foo.txt Foo.txt.renamed
hg rename Foo.txt.renamed foo.txt

この問題は、ファイルが削除された後、同じ名前で大文字と小文字が異なるメインリポジトリに再作成されたときに発生しました。これらの変更の前に作成されたブランチリポジトリは、メインリポジトリからの変更セットがプルされているにもかかわらず、マージできませんでした。

于 2013-05-03T15:06:17.207 に答える
3

Windowsでのケースフォールディングの問題を取得するには、リポジトリ内のさまざまなブランチまたはヘッドでさまざまなケースがあると思いますが、マージするときに問題になります。(Windowsでは)UNIXボックスを経由せずに、同じリビジョンで2つの異なるケースを実際に取得する方法がわかりません。

したがって、それらが異なるリビジョンにある場合は、次のようなことを行うことができます。

hg update <some rev>
hg remove -A -f "Some File"

その後、マージは正常に成功します。-Aは「後」を表し、-fは「強制」します。

于 2012-05-10T10:30:17.423 に答える
3

大文字と小文字を区別するファイルシステムを使用しない場合のWindowsでの通常の問題。インストール済みで実行する場合はTortoiseHg Workbench、ファイルを検索して名前を変更します。

右クリック/TortoiseHg/ファイル名の変更

ファイルの名前が大文字と小文字を区別する適切な名前に変更されます。次の写真は私がどのように変わっXMLConverterたかを示していますXmlConverter

ここに画像の説明を入力してください

次に、Workbenchで、ファイルの変更をコミットできます。

ここに画像の説明を入力してください

これは1週間後に更新されました

提示された解決策により、後で別のPCからリポジトリ全体を更新する際に問題が発生する可能性があります。したがって、それを解決するための究極の方法は、2つのコミットを行うことかもしれません。

  1. 1つは、不要な名前のファイルの名前を一時的なものに変更するためのものです。例:XMLConverter2
  2. もう1つは、一時ファイルの名前を新しい名前に変更するためのものです。例:XmlConverter

だからそれはこのようになりました:

一時ファイルの名前を新しい名前に変更する

これは実際には、Windowsで競合を起こさない方法です。見た目は醜いですが効果的です。

于 2015-07-13T14:35:10.850 に答える
1

Bitbucket.orgを使用している場合は、問題のあるブランチのソースを参照し、ファイルに移動し、編集してドロップダウンをクリックし、ファイルの名前を変更して(この場合はディレクトリの名前を変更して)、変更をコミットしてプルします。

Bitbucketチームに感謝します!

于 2016-05-12T14:38:02.023 に答える
1

私はもっ​​と簡単な方法で解決しました:

  1. リストアイテム
  2. 名前を変更したフォルダファイルを切り取り、一時的な場所(デスクトップなど)に貼り付けます
  3. 「 R」の変更をコミットする
  4. フォルダをもう一度貼り付けます
  5. 「 ?」ステータスをコミットします

それが実際に問題を引き起こしているのは、機密性の低いシステムの場合に同じである可能性のあるファイル/フォルダーを同時に作成および削除しようとしていることです。

于 2018-07-27T14:14:22.807 に答える
0

この問題が発生しましたが、*nixシステムを使用することはできませんでした。私はこれらの指示に従ってそれを解決することができました。


Windowsでは、現在(Mercurial 1.1より前)、リポジトリにケースの衝突を導入して、リポジトリをチェックアウトできないようにすることができます。

このようなリポジトリを修復する1つの方法は、大文字と小文字を区別するUnixシステムでリポジトリをチェックアウトし、問題のあるファイルを削除して、再度コミットすることです。

それが不可能な場合は、次のようにすることができます。

hg clone --noupdate repo repair
cd repair
hg debugsetparents <bad revision>
hg debugrebuildstate

この時点で、Mercurialは、不正なリビジョンがチェックアウトされており、すべてのファイルが欠落していると見なします(ステータス'!')。リポジトリを修正するには、次のことを行う必要があります。

hg remove --after <file causing the collision>

これで、hg statusは、状態「R」の厄介なファイルと状態「!」の他のすべてのファイルを表示するはずです。これで、修正をチェックインできます。

hg commit --message "fix case collision"

すべてのファイルを元に戻すには、もう一度チェックアウトします。

hg update tip

参照:https ://www.mercurial-scm.org/pipermail/mercurial/2008-June/019921.html

于 2014-07-16T19:05:59.327 に答える
0

私はこれが古い質問であることを知っていますが、これは私にとってうまくいったことであり、誰かに役立つことを願っています。私の場合、閉じる必要のある古いブランチを持つレガシーリポジトリがありました。

私はこれを解決するためにWindows10のWindowsbashシェルに使用しましlxrun /installたが、それがセットアップされたときにmercurialをインストールしsudo apt-get install mercurialました。これにより、mntフォルダーを介してファイルシステムにアクセスでき、コマンドラインからmercurialを使用できます。

私の場合、問題のあるブランチに簡単に更新して閉じることができました。

于 2017-04-11T09:27:23.747 に答える
-1

Laurens Holstが言ったように、一時ファイルシステムを通過するフォルダ/ファイルの名前を変更することは私にとってはうまくいきました。

$ hg rename a.txt tmp
$ hg rename tmp A.TXT

しかし、それを機能させ、マージ中のファイルの衝突エラーを回避するために、名前を変更した後にパージする必要がありました

于 2015-05-07T15:59:38.897 に答える