次の方法で共有


Git の大文字と小文字の区別

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

既定では、Windows および macOS ファイル システムでは大文字と小文字が区別されません (ただし、大文字と小文字は区別されます)。 ほとんどの Linux ファイルシステムでは、大文字と小文字が区別されます。 Git はもともと Linux カーネルのバージョン管理システムとして構築されているため、当然ながら大文字と小文字が区別されます。

大文字と小文字を区別しない OS に関する問題の多くは Git for Windows で対処されていますが、いくつかの問題が残っています。

ファイル名とフォルダー名

Linux では、"File.txt" と "file.txt" の両方を含む Git リポジトリをチェックアウトしても問題ありません。 これらは個別のファイル名です。 Windows と macOS では、両方のファイルをチェックアウトすると、2 つ目のファイルが最初のファイルを上書きすることになります。 2 つのフォルダーが大文字と小文字のみが異なる場合、大文字と小文字を区別しないファイル システムでそれらの内容が混在することになります。

ケースの競合の修正

この問題でリポジトリを修正する 1 つの方法は、大文字と小文字が区別される環境でチェックアウトすることです。 ファイルとフォルダーの名前を変更して競合しないようにし、それらの変更をリポジトリにプッシュします。 Linux 用 Windows サブシステム は、そのような環境の 1 つです。 もう 1 つの方法は、競合ごとにコマンド git mv -f <conflicting name> <non-conflicting name> を使用し、両方のファイル名に正確な大文字を使用するように注意することです。

ケースの競合の回避

この状況は、最初は作成しないようにすることをお勧めします。 Azure Repos には、このような状況につながるプッシュを防ぐための ケース強制設定 が用意されています。 開発者にとって、タブ補完を使用してファイルをコミットする習慣を採用することも役立ちます。 Windows と macOS はどちらも大文字と小文字が区別されるため、これにより、Git の内部では、ファイルシステムで使用されるのとまったく同じ大文字と小文字が確実に表示されます。

ブランチ名とタグ名

大文字と小文字のみが異なる 2 つの分岐またはタグ ("refs" と呼ばれます) を作成できます。 Git の内部と Azure DevOps Services/TFS は、2 つの異なる ref として扱われます。 ユーザーのマシンでは、Git はファイルシステムを使用して ref を格納します。 フェッチやその他の操作は、あいまいさのために失敗し始めます。 各 ref は小さなファイルで表され、ref 名に / 文字が含まれている場合、最終的な / の前の部分はフォルダーによって表されます。

問題を回避する簡単な方法の 1 つは、常にすべて小文字の分岐とタグ名を使用することです。 この問題で 2 つのブランチまたはタグを既に作成している場合は、Azure Repos Web UI で修正できます。

ブランチ名の修正

ブランチ ページから、関連するコミットに移動します。 コンテキスト メニューで、[新しいブランチ] を選択します。 分岐に、大文字と小文字の競合がない新しい名前を付けます。 ブランチ ページに戻り、競合するブランチを削除します。

タグ名の修正

タグ名を修正する手順は、ブランチに似ています。 タグ ページから、タグ付けされたコミットに移動します。 コンテキスト メニューで、[タグの作成] を選択します。 大文字と小文字が競合しない新しい名前をタグに付けます。 タグ ページに戻り、競合するタグを削除します。