14

私はWindowsでgitを使用していて、リポジトリに「foo.txt」というファイルがあります。今日は、このファイルの名前を「Foo.txt」(大文字)に変更したいと思いました。このSOの質問で示唆されているように、私はを使用git mv -f foo.txt Foo.txtしました。これにより、目的の結果が得られました。リポジトリへの変更をコミットしました。
編集:これを永続的な変更にし、この変更より前のコミットをチェックアウトできるようにしたいと思います。

ただし、その後、ブランチを切り替えようとしたときにエラーが発生しました。

# I'm on branch1  
git checkout branch2  
Aborting  
error: The following untracked working tree files would be overwritten by checkout:  
Foo.txt  
Please move or remove them before you can switch branches.  

少し調べてみると、.git/configファイルの設定が次のようになって いることがわかりました。

[core]  
    ignorecase=false  

これをtrueに変更すると、問題が修正され、通常どおりブランチ間で変更できるようになります。

だからこれに関して、私は知りたいです:

  1. この設定による悪影響はありますか?それは常にウィンドウズに当てはまるはずですか?他の開発者と協力していて、同じ値が設定されていない場合はどうなりますか?
  2. この設定を変更せずにファイルの名前を変更する別の方法はありますか?
  3. そもそもなぜこれが起こるのですか?変更をコミットしたとき、gitはファイルの名前が実際に変更されたことを正しく識別しました(1つのファイルを削除してから、別のファイルを追加しませんでした)。では、ブランチを切り替えようとしたときに正確に何が起こったのでしょうか。

ありがとう!

4

2 に答える 2

4

Unresolvable Git error: The following untracked working tree files would be overwritten by checkout」で述べたように、 に設定core.ignorecaseするtrueと、チェックアウトを続行できるようになります。

しかし、「GIT: The following untracked working tree files would be overwritten by checkout」のように、次のことをお勧めします。

  • git add変更したもの (あなたの場合、git mv名前が変更されたファイルが既にインデックスに追加されている可能性があります)
  • git stash、インデックスを保存する
  • git checkout -b anotherBranch: インデックスがクリーンであるため、これは機能するはずです
  • git stash pop、その新しいインデックスで大文字と小文字の変更を復元する場合。
于 2013-03-19T06:45:50.167 に答える
3

構成設定を変更せずにこの問題を解決する簡単な (しかし洗練されていない) 方法は、ファイルを削除して再度チェックアウトすることです。私の場合、これにより、変更の分岐が通常どおりに許可されました。

編集: Avivr が指摘したように、私が提案した回避策は問題を永久に解決しません。場合によっては一時的なホットフィックスとして役立つ可能性があるため、この回答は削除しません。

于 2013-03-18T21:02:14.723 に答える