Windowsでファイルの大文字と小文字を変更しますか?


209

gitで制御されたコードベースには、名前を変更したいファイルがいくつかあります。具体的には、私は、ファイルのケースを変更したいので、それはsourceCode.javaなっSourceCode.java例えば、。キャッチ:私はWindowsボックスを使用していて、ファイルシステムはそれらが同じファイル名であると考えています。

WindowsとGitにその変更を認識させてチェックインするにはどうすればよいですか?


3
Git 2.0.1以降(2014年6月)以降、シンプルなものgit mvが動作するはずです(stackoverflow.com/a/24979063/6309)。Windowsでも。
VonC、2015

回答:


337

それを行う方法のヒントについては、こちらをご覧ください。

ケースでGitに変更を無視させる方法は?

または:

git mv -f name.java Name.java

8
余談ですが、これはFATファイルシステムでは機能しません。私はサムドライブでプロジェクトコードを持ち歩き、ケースの変更は本当に苦痛です。
asm

1
これはNTFSシステムとWindows 10では機能しませんでした
Roboblob

1
これは確かに正しい方法ですが、多くのファイルの名前を変更する必要がある場合は、面倒な場合があります。ファイルシステムでそれらの名前を何らかの方法ですでに変更していて、それらの変更をコミットしたいだけの場合は、親フォルダーの名前を変更し、git add新しく名前を変更したフォルダーを実行します。コミットせず、フォルダー名を本来の名前に戻します。 、git addそれを再度コミットします。
お好み焼き

NTFSおよびWindows 7で動作します
Hans Goldman、

これをまとめて行うことは可能ですか?たとえば、powershellを使用して、Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

FATファイルシステムを使用している場合は、2段階の名前変更を行うしかありません。

  1. 名前sourceCode.javaを変更anything.you.like
  2. 名前anything.you.likeを変更SourceCode.java

私たちがPERFORCEを使用していた当時は、まさにこの問題があり、これが私たちが思いついた唯一のソリューションでした。


13
他の人へのメモ:
途中で

29

次の手順により、Windowsでケースを変更できました。

  • 追加ignorecase = false[core].git/config
  • 名前を変更するファイルをプロジェクトディレクトリの外に移動します。
  • 削除をインデックスに追加します。
  • すべてのファイルを元の場所に戻し、ファイルやディレクトリの大文字と小文字を変更します。
  • すべての「新しい」ファイルをインデックスに追加します。
  • ignorecase = false最初のステップで追加された削除。

この方法では、名前変更を含む単一のコミットがあり、ディレクトリ全体などを簡単に変更できます。


5
風呂グローバルとローカル設定のためにそれを行う:$ GTI設定--global core.ignorecase $ falseに設定GTI core.ignorecase偽
ローマイワノフ

6

注意してください。これを行うと、マージが不可能な変更が発生する可能性があります。Windowsでマージすると、古い大文字の名前と新しい小文字の名前が同じファイルであるかどうかを判断できないため、Gitは混乱します(Gitの場合は異なりますが、ファイルシステムの場合は同じです)。マージするには、マージする前にファイルを削除するなど、いくつかの手動の回避策を実行する必要があります。

同じ名前で大文字と小文字が異なるファイルのGitリベースの問題を参照してください

この問題がプロジェクトに従来とは異なる名前が付けられたファイルが存在するよりもずっと悪いかどうかはわかりませんが、最終的にすべてマージする必要のあるブランチを持つ多数のユーザーがいる場合は知っておく価値があります。


中規模から大規模なプロジェクトでの型破りな名前のファイルは、複数のプラットフォーム用に開発するときに問題が発生するため、可能であれば常に回避する必要があります(後でそのようなものを修正するのを遅らせると、修正による問題がさらに深刻になります)。Windowsで開発している場合でも、Linuxビルドを実行する必要がある場合があります。また、Windowsで正常に機能するインクルードを使用すると、Linuxでビルドが中断します。
Griffork

3

私の意見では、1つの簡単な方法がありません。これは、単一のファイル、特定のディレクトリ、またはリポジトリ全体に対して行うことができます。

git rm --cached <file name or directory>
git add <file name or directory>

サブディレクトリにも影響を与えたい場合は、-rフラグを使用する必要があります。

git rm -r --cached <directory>
git add <directory>

本当にシンプルなもの。
ranu

gitによって完全に新しいファイルとして設定されるため、ファイルの履歴全体が失われます。
アレハンドロ

@アレハンドロあなたの言うことは間違っている。私はそれをテストしたところ、gitは問題なく名前の変更を認識しました。他の場合と同様に、ファイルはインデックスで削除済み/新規として表示されますが、コミット中にgitは、名前が変更されたことに気付きます。
Nils-o-mat

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