Gitでのファイル名の大文字の変更


473

以前とは異なる大文字を使用するようにファイルの名前を変更しようとしています。

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

ご覧のとおり、Gitはこれに適合しています。私もプレーンな古いmvコマンドだけを使用して名前を変更しようとしましたが、Gitは(名前変更として、または新しい追跡されていないファイルとして)名前変更を認識しません。

同じ名前の大文字と小文字が異なるようにファイルを変更するにはどうすればよいですか?Zシェル(zsh)4.3.15 を使用するGit 1.7.9.1を搭載したMac OS X v10.7.3(Lion)を使用しています。


49
これは、osxファイルシステムがデフォルトで大文字と小文字を保持し、大文字と小文字を区別しないためです。あなたは単に2つのステップで進むことができます:git mv myfile foo; git mv foo MyFile
tonio

16
「git mv --force myfile MyFile」で動作するようになりました。
Marcello de Sales


7
git 2.0.1(2014年6月)以降、git mv hello.txt Hello.txt大文字と小文字を区別しないOSで動作します。以下の私の回答を
VonC '27 / 07/27

回答:


554

Git 2.0.1(2014年6月25日)以降、a git mvは大文字と小文字を区別しないOSでのみ動作します。

David Turner(によるコミットbaa37bfを参照してください。dturner-tw

mv:大文字と小文字を区別しないファイルシステムの大文字と小文字を修正するための名前変更を許可する

git mv hello.txt Hello.txt」大文字小文字を区別しないファイルシステム上、常にトリガ「destination already exists」エラー、これら2人の名前はビューのファイルシステムの視点から同じパスを参照して「を与えるために、ユーザが必要とするため--force、インデックスにとに記録されているパスの場合を修正するとき」次のコミット。

このケースを検出し、「--force」を必要とせずに許可します。

git mv hello.txt Hello.txt機能するだけ--forceです(もう必要ありません)。


他の選択肢は:

git config --global core.ignorecase false

そして、ファイルの名前を直接変更します。git addとcommit。


2
FWIWこれは退行したか、Windowsでは機能しませんでした。2.15.1.windows.2を使用していますが、-forceを使用する必要があります
TTimo

1
@Adowrath素晴らしいニュースです!
VonC、2018

これは、拡張機能の大文字表記でも機能しますか?たとえば、ファイル名がimage.TXTで、image.txtのように名前を変更したい場合
siluveru kiran kumar

@siluverukirankumarはい。そのユースケースに問題がありましたか?
VonC

1
このコマンドを実行してWindowsで機能するようになりましたgit config core.ignorecase false
John Targaryen

452

ラークの答えを考えると、「-force」を使用して単一のコマンドで機能させることができます。

 git mv --force myfile MyFile

3
あなたは大文字小文字を区別しないファイルシステム上にあり、あなたは致命的なエラーが発生する場合は、「無効な引数」の代わりにこれらのステップを試してください:stackoverflow.com/questions/3011625/...
レビ

1
これは最初のステップの正解ですが、Mac OS Xで別のブランチに古い大文字が使用されている場合に、別のブランチに切り替える方法を次に示します。****エラーが発生する:次の追跡されていない作業ツリーファイルがチェックアウトによって上書きされます:****
TJChambers

1
Windowsでのコミットに失敗しました:Error: Will not add file alias 'MyFile' ('myfile' already exists in index)
OrangeDog

98

大文字と小文字を区別しないファイルシステム(OS XまたはWindowsなど)で、多くのファイル名の大文字と小文字を変更したい場合があります。こうgit mvするコマンドはすぐに疲れます。物事を少し簡単にするために、これは私がすることです:

  1. ディレクトリ外のすべてのファイルを、たとえばデスクトップに移動します。
  2. a git add . -Aを実行して、すべてのファイルを削除します。
  3. デスクトップ上のすべてのファイルの名前を適切な大文字に変更します。
  4. すべてのファイルを元のディレクトリに戻します。
  5. を行いますgit add .。Gitはファイルの名前が変更されていることを確認する必要があります。

これで、ファイル名の大文字化を変更したことをコミットすることができます。


3
これは、移動したファイルのすべての履歴を犠牲にして行われますよね?私はgit mv --forceにはこの欠点がないと思います。
LOAS

12
いいえ、これですべての履歴が削除されるわけではありません。2つの追加の間にコミットがないことに注意してください。
マイケルLペリー

63

OS Xでのファイル名は、大文字と小文字を区別しません(デフォルト)。これは、Gitの問題よりもOSの問題の方が多くなります。ファイルを削除して読み込んだ場合は、必要なものを取得するか、別の名前に変更してから、名前を元に戻す必要があります。


2
git cloneLinuxシステムでリポジトリを作成し、ファイルの名前を変更して、この状況のた​​めだけにコミットすることもできます(Linuxシステムが手元にある場合)。
gitaarik 14

4
実際、OS Xのファイルシステムでは大文字と小文字が区別される場合があり、インストール時に構成できます。OS Xパーティションで大文字と小文字が区別されるかどうかを確認する方法
Flimm

2
...したがって、回答の「(デフォルトで)」。
ラスク

4
確認するにgit rm --cached fileorfolderは、ファイルシステムからファイルまたはフォルダーを削除せずに、gitからファイルまたはフォルダーを削除するために使用できます。次に、でファイルまたはフォルダを再度追加するだけですgit add fileorfolder
kas

32

セットignorecasefalseはgit configに

元の投稿は「Gitでのファイル名の大文字の変更」に関するものなので、

プロジェクトでファイル名の大文字と小文字を変更しようとしている場合は、Gitからファイル名を強制的に変更する必要はありません。IMO、私はどちらかというと大文字/小文字をIDE /エディターから変更し、名前変更を取得するようにGitを適切に構成することを確認します。

デフォルトでは、Gitテンプレートは大文字と小文字を区別しないように設定されています(Gitの大文字と小文字は区別されません)。デフォルトのテンプレートがあることを確認するには、を使用--getして、指定したキーの値を取得します。--local--globalを使用して、ローカルのGitリポジトリー構成からグローバルの構成キー値を取得するか、Gitリポジトリー構成グローバル値を取得するかをGitに指示します。例として、グローバルキーを検索する場合は、次のようにしますcore.ignorecase

git config --global --get core.ignorecase

これがを返す場合はtrue、次のように設定してください。

git config --global core.ignorecase false

(グローバルを変更するための適切な権限があることを確認してください。)そして、そこにそれがあります。これで、Gitのインストールでは大文字と小文字は無視されず、それらは変更として扱われます。

提案として、多言語プロジェクトで作業していて、Gitですべてのプロジェクトを大文字と小文字を区別する必要があるとは思わない場合は、ローカルcore.ignorecaseファイルを更新してください。


6
そして、git config --global --get core.ignorecase何も返さない場合。それは...ですかtrue ?? 設定するとfalsefalseが返されるため(Windows 10)
fralbo

そして、それは期待通りに機能していないようです。つまり、デスクトップクライアントには変更が表示されますが、コミット/同期後、ファイル名はオンラインのまま変更されません。
fralbo 2017年

私にとってはうまくいきました(そしてを使用するよりも複数のファイルに適していますgit mv)。また、デフォルトではtrueと見なされている(つまり、大文字と小文字を区別しない)と想定しています。それか、またはOSのポリシーとファイル名の大文字小文字を一致させます。
ジェリー

それが答えです。ちょうどそれを使用しました。
Dave Everitt

1
これが選択された答えになるはずです
Dave Everitt

7

「.git」ディレクトリを開いて、「config」ファイルを編集できます。「[core]」セットの下で、「ignorecase = true」を設定すれば完了です;)


gitで大文字と小文字が区別されるようにfalseに変更する必要があるようです。
ジョナサン

1

git mvmacOSでファイルを一括して小文字にするには:

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

フォルダ内のすべてのファイルを小文字にします。


1

このPythonスニペットはgit mv --force、ディレクトリ内のすべてのファイルを小文字にします。たとえば、foo / Bar.jsはを介してfoo / bar.jsになりgit mv foo/Bar.js foo/bar.js --forceます。

好みに合わせて変更してください。私は共有するだろうと考えました:)

import os
import re

searchDir = 'c:/someRepo'
exclude = ['.git', 'node_modules','bin']
os.chdir(searchDir)

for root, dirs, files in os.walk(searchDir):
    dirs[:] = [d for d in dirs if d not in exclude]
    for f in files:
        if re.match(r'[A-Z]', f):
            fullPath = os.path.join(root, f)
            fullPathLower = os.path.join(root, f[0].lower() + f[1:])
            command = 'git mv --force ' + fullPath + ' ' + fullPathLower
            print(command)
            os.system(command)

-1

作業例:

git mv ./src/images/poster_video.PNG ./src/images/poster_video.png

2
あなたの答えは元の質問を解決しません。あなたは拡張機能を控えています
Tavo

私はこれを正確に探していますが、500枚の画像用です。gitで./src/images/TESTIMAGE.pngを./src/images/testimage.pngに名前変更したい
Mohak Londhe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.