Подтвердить что ты не робот

Как изменить регистр файла в git под cygwin?

Мы работаем в среде с чувствительной/нечувствительной к смешанному регистру (cywgin/linux), и сегодня кто-то создал небольшой хаос в нашем рабочем процессе, переименовав файл, изменив S на s. Это вызвало всевозможные интересные проблемы слияния по отраслям, и, честно говоря, никто не был полностью уверен в том, что произошло.

Каков наиболее подходящий способ изменить оболочку файла под git для cygwin? Я должен подчеркнуть, что мы чувствительны к регистру и обычно делаем это правильно - если бы не это S.

4b9b3361

Ответ 1

Подумав об этом через пару минут, кажется, очень вероятно, что git-mv сделает то, что вам нужно. Я уверен, что он попытается переименовать (что может быть не-операцией на нечувствительной к регистру ОС), а затем добавить переименование в индекс. Это должно основываться на аргументах, а не на фактическом файле - я вижу rename_cache_entry_at(pos, dst); в builtin-mv.c.

Я не уверен, что это часть того, что вы просите, или нет, но в отношении вашего хаоса в отрасли, вот общий подход, который вы, вероятно, хотите предпринять:

  • Зафиксируйте исправление переименования во всех ваших "самых дальнейших" ветвях. Это, вероятно, ветки темы и обслуживания - те, которые объединены в другие ветки, но никогда не объединяются с ними.
  • Объедините эти ветки в соответствии с обычным рабочим процессом, исправляя любые конфликты, которые могут возникнуть в результате переименования.
  • Поощряйте всех стремиться в ближайшее время, на всякий случай, если проблема будет способ дальнейшего распространения. Например, кто-то может работать над переименованным файлом, затем вытащить и исправить конфликт переименования неправильным образом, в результате чего будет создано состояние, которое воссоздало бы проблему при нажатии/вытягивании.

Ответ 2

У меня была проблема, похожая на эту проблему, когда я просто хотел переименовать каталог "Сценарии" в "скрипты". В настоящее время я работаю в Cygwin, поэтому было не так просто. Если я попытаюсь сделать это, как и в GNU/Linux, я получаю сообщение об ошибке.

$ git mv foo Foo
fatal: renaming foo failed: Invalid argument

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

$ git mv foo Foo2 && git mv Foo2 Foo

Я спрятал свое рабочее дерево для этого изменения, хотя я мог выполнить его отдельно и, видимо, не думал об этом, потому что теперь файлы под каталогом, которые я переехал, не слились с приложением к моему дереву.: -/В моем случае это небольшая проблема, хотя (и чтобы быть в безопасности, я набрал дерево перед тем, как попытаться это сделать, поэтому я всегда могу просто сделать это насильственно неверсированным способом...: P).

Ответ 3

Я хотел бы указать, что в качестве резервной копии вы можете манипулировать записями в индексе (промежуточной области), откуда вы могли бы совершить транзакцию с помощью "git commit" (не "git commit -a" ) с git update -index команда сантехники (низкий уровень).