gitは大文字と小文字を区別しませんか?


96

パーシャルコールの最初のコミットメントでは、_Electronics大文字で始めて書かれていましたが、次にに変更しました_electronics

新しい名前をコミットした後、cygwinの下のGitはケースを無視したので、ターゲットリポジトリで手動で名前を変更しました。

コミットされた_electronicsパーシャルがに変更される場合があります_Electronics

何が悪いのでしょうか?


9
どのOSを使用していますか?
キース・トンプソン

10
どのファイルシステムを使用していますか?
アンドリューマーシャル

cygwinを使用したWindows。私のサーバーはUbuntu Linuxを実行しています。ファイルシステムがわからない、おそらくext3またはext2だと思います-プロバイダーが最小限のインストールを構成しました。
JAkk

Windowsが大文字と小文字を区別しないことに決めてうれしいですか?
Cascabel 2011

4
Windowsはケース鈍感であるが、時には(より頻繁に、今日)の場合保存します
Arafangion

回答:


73

2つの異なるものとして表示されますが、大文字と小文字を区別しないシステムで問題が発生します。この場合は、パスまたはファイル名をタブで補完していることを確認してください。さらに、ある場合に何かの名前を変更するには、次のようにします。

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

これは、変更をコミットしてからコミットを折りたたむ明示的な方法です。これを行うためのより短い方法は、インデックスと作業フォルダーをすべて1つに操作することです。

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

これはディレクトリ名の調整にも関連しています:git mvとディレクトリの大文字と小文字の変更のみ


これは正しかったようです(ただし、大文字から小文字に変更した場合を除く)
JAkk

cygwinに慣れている限り、覗いてみました
。cygwin

あなたはただすることができますgit mv file.txt File.txt。これが新しいgit機能かどうかはわかりません。
Phil

107

これは、core.ignorecase構成値に依存します。これは、大文字と小文字を区別するファイルシステムではfalseに設定され、Windowsのmsysgitではtrueに設定されます。

core.ignorecase

trueの場合、このオプションはさまざまな回避策を有効にし、FATなどの大文字と小文字を区別しないファイルシステムでgitが適切に機能するようにします。たとえば、gitが「Makefile」を予期しているときにディレクトリリストに「makefile」が見つかった場合、gitはそれが実際に同じファイルであると想定し、「Makefile」として引き続き記憶します。

デフォルトはfalseです。ただし、git-clone(1)またはgit-init(1)は、リポジトリの作成時に適切な場合にcore.ignorecaseをプローブして設定します。

Gitでのファイル名の大文字の変更に関するこの返信の詳細。


79
これが正解です。将来の私は、git config --unset-all core.ignorecase && git config --system core.ignorecase falsesudo で使用します。
Znarkus

2
Jamesさんと同じように、@ ZnarkusはOS Xでのこの問題の修正を確認しました。ありがとう!
Craig Nakamoto、

1
@ZnarkusはWindowsでも動作します。綺麗な。
2013

9
@ Znarkus、OSXでこれを行う際の問題は、ファインダーを使用してファイルの名前を変更し、大文字と小文字を変更するだけの場合、gitは名前が変更されたバージョンを完全に新しいファイルと見なしますが、対応する「削除」を生成しません古いバージョンのファイルに対するアクション。したがって、githubにコミットしてプッシュすると、githubには古い名前のファイルと新しく名前が付けられたファイルの両方が含まれますが、ローカルシステムには新しいファイルのみが含まれ、gitは賢くなりません。
ivanreese 2014年

2
@spiralganglion OSXのWeb 開発では、大文字と小文字を区別するパーティション作成して、wwwディレクトリとしてマウントすることをお勧めします。
Znarkus 2014

23

これははるかに簡単です:

git mv Electronics electronics -f
git commit -m "That was easy!"

1
大文字と小文字を区別しないファイルシステムでこれを試しましたか?
エドワードトムソン

1
私は最初、これをファイルではなくフォルダの大文字と小文字を変更する名前変更を実行しようとする元のポスターとして読んだ。これをもう一度読んだので、はっきりしません。確かに、mv -fファイルに対して機能します。
エドワードトムソン


0

私のシナリオでは、2つのフォルダーがtestsありTests、Githubでは2つの別個のフォルダーでしたが、TestsWindowsでは1つのフォルダーとして表示されました。私の目的は、両方をに組み合わせることでしたtests

私は次のアプローチを使用しました:

  1. 新しいフォルダを作成する temp
  2. すべてのコンテンツをコピーTestsしますtemp
  3. 削除する Tests
  4. 実行する git rm Tests -r
  5. 名前tempを変更tests

0

私は問題を解決しようとしました、そしてそれはWindows10で成功しました

bitbucket TESTとtestに2つのフォルダーがあるとしますが、ディスクにrepoを複製するとTESTのみが作成され、すべてのファイルを含むgitの単一フォルダーとしてテストを保持したいとします。

コマンドラインで次のコマンドを実行する必要がありますgit mv TEST test1 -f git mv text1 test -f git commit -m "rename ..." git push

これで、フォルダー階層がbitbucketで修正されたことがわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.