1. ホーム
  2. マコス

[解決済み】git mvで、ディレクトリの大文字と小文字だけを変更する。

2022-04-01 14:16:27

質問

似たような 質問 私の問題に対する答えは見つかりませんでした。

FOOからfooにディレクトリ名を変更しようとすると git mv FOO foo 私は得る

fatal: renaming 'FOO' failed: Invalid argument

OKです。そこで私は試してみました git mv FOO foo2 && git mv foo2 foo

しかし、コミットしようとすると git commit . と表示されます。

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)

でディレクトリを追加すると git add foo は何も変化せず git commit . というメッセージが再び表示されます。

私は何を間違えているのでしょうか?私は大文字と小文字を区別するシステム(OSX)を使用していると思ったのですが、なぜ単にディレクトリの名前を変更できないのでしょうか?

解決方法は?

大文字と小文字が区別されない環境にあります。さらに -A のリムーブ側をケアしてくれません。 mv を、Git が理解できるようにします。 警告! この操作をするときに、他の変更や未追跡のファイルがないことを確認してください。 git stash -u を実行し、その後 git stash pop の後です。続けて これを回避するには、次のようにします。

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"

これは、作業ディレクトリを変更してコミットし、2つのコミットをまとめるという、画期的な方法です。インデックスにあるファイルを移動すればよいのですが、git に慣れていない人にとっては、何が起こっているのかがよくわからないかもしれません。短いバージョンでは

git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"

コメントで提案されているように、インタラクティブなリベースも可能です ( git rebase -i HEAD~5 が 5 コミット前に導入された場合) にそのケースを修正すれば、履歴のどこにも間違ったケースを表示させることはありません。この場合、それ以降のコミットハッシュは異なるものになり、他の人はそのブランチの最近の過去とリベースや再マージをしなければならなくなるので注意が必要です。

これは、ファイル名の修正に関連するものです。 git は大文字と小文字を区別しないのですか?