gitで制御されたコードベースには、名前を変更したいファイルがいくつかあります。具体的には、私は、ファイルのケースを変更したいので、それはsourceCode.javaなっSourceCode.java例えば、。キャッチ:私はWindowsボックスを使用していて、ファイルシステムはそれらが同じファイル名であると考えています。
WindowsとGitにその変更を認識させてチェックインするにはどうすればよいですか?
gitで制御されたコードベースには、名前を変更したいファイルがいくつかあります。具体的には、私は、ファイルのケースを変更したいので、それはsourceCode.javaなっSourceCode.java例えば、。キャッチ:私はWindowsボックスを使用していて、ファイルシステムはそれらが同じファイル名であると考えています。
WindowsとGitにその変更を認識させてチェックインするにはどうすればよいですか?
回答:
git add新しく名前を変更したフォルダーを実行します。コミットせず、フォルダー名を本来の名前に戻します。 、git addそれを再度コミットします。
Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
次の手順により、Windowsでケースを変更できました。
ignorecase = falseの[core]中.git/config、ignorecase = false最初のステップで追加された削除。この方法では、名前変更を含む単一のコミットがあり、ディレクトリ全体などを簡単に変更できます。
注意してください。これを行うと、マージが不可能な変更が発生する可能性があります。Windowsでマージすると、古い大文字の名前と新しい小文字の名前が同じファイルであるかどうかを判断できないため、Gitは混乱します(Gitの場合は異なりますが、ファイルシステムの場合は同じです)。マージするには、マージする前にファイルを削除するなど、いくつかの手動の回避策を実行する必要があります。
同じ名前で大文字と小文字が異なるファイルのGitリベースの問題を参照してください
この問題がプロジェクトに従来とは異なる名前が付けられたファイルが存在するよりもずっと悪いかどうかはわかりませんが、最終的にすべてマージする必要のあるブランチを持つ多数のユーザーがいる場合は知っておく価値があります。
私の意見では、1つの簡単な方法がありません。これは、単一のファイル、特定のディレクトリ、またはリポジトリ全体に対して行うことができます。
git rm --cached <file name or directory>
git add <file name or directory>
サブディレクトリにも影響を与えたい場合は、-rフラグを使用する必要があります。
git rm -r --cached <directory>
git add <directory>
NTFS(またはFAT)では、単一のgit mvコマンドでは問題を解決できません。この質問は機能するテクニックを示しています:
git mvとディレクトリの大文字と小文字のみを変更します
git mvが動作するはずです(stackoverflow.com/a/24979063/6309)。Windowsでも。