Как изменить регистр файла в git под cygwin?
Мы работаем в смешанной чувствительной к регистру / нечувствительной среде (cywgin/linux), и сегодня кто-то создал небольшой хаос в нашем рабочем процессе, переименовав файл, изменив S на s. Это вызвало всевозможные интересные проблемы слияния между филиалами, и, честно говоря, никто не был полностью уверен в том, что произошло.
Каков наиболее подходящий способ изменить регистр файла в git для cygwin? Я должен подчеркнуть, что мы чувствительны к регистру и обычно делаем это правильно - если бы не этот S.
4 ответа
Подумав об этом пару минут, кажется весьма вероятным git-mv
будет делать то, что вам нужно. Я вполне уверен, что он попытается переименовать (что может быть не работает в ОС без учета регистра), а затем добавит переименование в индекс. Это должно основываться на аргументах, а не на самом файле - я вижу rename_cache_entry_at(pos, dst);
во встроенном-mv.c.
Я не уверен, является ли это частью того, что вы просите, или нет, но в отношении вашего хаоса в ветвях, вот общий подход, который вы, вероятно, хотите использовать:
- Зафиксируйте исправление переименования во всех ваших "самых дальних" ветвях. Вероятно, это ветки темы и обслуживания - те, которые объединены в другие ветви, но никогда не объединяются с ними
- Объедините эти ветви в соответствии с вашим обычным рабочим процессом, исправляя любые конфликты, которые могут возникнуть в результате переименования.
- Поощряйте всех поторопиться в ближайшее время, на случай, если у проблемы будет способ дальнейшего распространения. Например, кто-то может работать с переименованным файлом, затем извлекать и исправлять конфликт переименования неправильным образом, что приводит к состоянию, которое воссоздает проблему при нажатии / извлечении.
У меня просто была проблема, похожая на эту, когда я просто хотел переименовать каталог, "Скрипты", в "Скрипты". В настоящее время я работаю в Cygwin, так что это было не так просто. Если я пытаюсь сделать это, как в GNU/Linux, я получаю сообщение об ошибке.
$ git mv foo Foo
fatal: renaming foo failed: Invalid argument
Однако я понял, что могу обойти то, что я считаю недостатками Windows, дважды переместившись сначала к имени, которое не сталкивается, а затем к фактически желаемому имени.
$ git mv foo Foo2 && git mv Foo2 Foo
Я спрятал свое рабочее дерево для этого изменения, поэтому я мог зафиксировать его отдельно и, очевидно, ничего не продумал, потому что теперь файлы из каталога, который я переместил, не могут сливаться из тайника в мое дерево.:-/ В моем случае это небольшая проблема (и, чтобы быть в безопасности, я пометил дерево, прежде чем пытаться это сделать, поэтому я всегда могу сделать это принудительным неверсированным способом...:P).
Я хотел бы отметить, что в качестве запасного варианта вы можете манипулировать записями в индексе (промежуточной области), откуда вы сможете фиксировать с помощью "git commit" (не "git commit -a") с использованием git update-index plumbing (низкий уровень) команда.
Ваш cygwin правильно распознает название группы пользователей? Я могу быть не признанным групповым вопросом. Возможно, вы захотите проверить, что этот chmod не может изменить разрешение группы на cygwin