Проблема с переименованием каталога в git в нижний регистр при ignoreLowercase = True

Когда я печатаюgit status, Я вижу:

# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#   modified:   DIR/a
#

Тем не менее, в моем рабочем каталоге я вижу, что этот файл на самом деле называетсяdir/a (обратите внимание на строчныеdir вместоDIR).

Вопрос: Я хочу добавить это изменениеa файл в область подготовки и фиксации, но я хочу, чтобы это было так, как в моем рабочем каталоге (который показываетdir/a) -в отличие от того, как мерзавец видит это какDIR/a, Как я могу это сделать?

Важная заметка:

К сожалению, я могут простоgit mv DIR/a dir/a так какDIR/a Безразлично»на самом деле существует в рабочем дереве.

В настоящее время мой.git/config файл показываетingorecase = true, поэтому я знаю, что я должен установить это равным false. Однако, не делая ничего, кроме изменения этого флага,git status из этого сейчас раскрывается:

# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#   modified:   DIR/a
#
 # Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#   dir/

Я ожидал этого, поскольку git отслеживает только содержимое, а переключение ignorecase заставит git думать, что был добавлен новый файл. К сожалению, git теперь думает, что у меня есть два файла, которые были изменены, хотя на самом деле у меня есть только один. я хочуgit status просто показатьdir/a (как это в моем рабочем каталоге) вместоDIR/aс такими же различиямиa Я только недавно сделал.

Дополнительное примечание

Если вам интересно, как такая нестабильная ситуация возникла в первую очередь, мне удалось воспроизвести глупые ошибки, которые я допустил, когда первоначально переименовал дело моего каталога изDIR вdir, Если вы думаете, что это поможет найти решение этой проблемы, я был бы рад сделать редактирование, которое показало бы, как я по ошибке запутал git. (это вовлекает меня случайно ударитьmv вместоgit mvи не зная оignorecase флаг и оставив его какignorecase=true).

 dinkelk02 нояб. 2012 г., 20:39
НИ ЗА ЧТО! У меня была точно такая же проблема.

Ответы на вопрос(2)

Решение Вопроса

если вы находитесь в нижнем корпусе Mydir

git mv src/Mydir src/mydirs

git mv src/mydirs src/mydir

git commit -m "Rename folder Mydir to mydir"
 Avi Kenjale19 сент. 2018 г., 15:52
Я вспомнил два пальца, используя третью третью переменнуюC программа;) Я '
 reggaemahn04 июл. 2018 г., 06:51
Чувак, если бы я только мог ударить по этому upvode 5 раз. Спасибо!
 smaccoun14 авг. 2018 г., 21:52
Я АвенЯ проверил это, но с учетом положительных отзывов и комментариев, похоже, он полностью надежен и определенно более элегантен. Переключение на принятый ответ
 NBoymanns24 июл. 2017 г., 14:03
Просто & быстро, как это решение!
 NikosKeyz18 сент. 2017 г., 09:21
Это должен быть принятый ответ. Спасибо Эд!
 Jay Soyer26 окт. 2016 г., 03:31
Определенно более элегантное решение

я не уверен, еслиЭто более элегантное решение, но я проверил это, и оно работает. Поскольку git продолжает думать, что два файла существуют, когда существует только один, мне пришлось фактически полностью скопировать каталог, удалить то, что git отслеживает как файл, и затем скопировать скопированный каталог обратно в оригинал.

(1) зафиксировать любые файлы вdir это должно быть совершено.

(2)cp -r dir tempDir

(3)git add tempDir/

(4)git rm -r dir Dir

(5)git commit -m "Temporary rename of dir to tempDir"

(6)git mv tempDir mms

(7)git commit -m "Full rename from DIR to dir complete"

 smaccoun05 нояб. 2012 г., 23:48
Это работает, но яЯ ненадолго остановлюсь на выборе его в качестве ответа, если кто-нибудь узнает о более простом или более чистом решении.

Ваш ответ на вопрос