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

Переместить файл/каталог, но все же легко слить изменения?

Я читал в различных часто задаваемых вопросах, что git явно не отслеживает переименования/перемещения, предпочитая искать идентичные (или в некоторых ситуациях похожие?) файлы. Это здорово, но справится ли это с ситуацией: у другого удаленного репозитория есть новая функция (i18n) с участием некоторых новых файлов в debian/po/*.po. У меня есть собственная версия этого проекта, и я хочу объединить эту функцию, но поместив файлы только в po/*.po (я могу сделать это как две коммиты или что-то еще необходимо). Я ожидаю, что удаленное репо продолжит получать обновления для этой функции, и я хочу просто слить/вишнево выбрать эти коммиты и применить их к файлам в моем новом местоположении. Может ли git сделать это, возможно, с каким-то отображением "эти файлы переместились сюда сейчас"? Или это больнее, чем стоит, и должен ли я просто принять немного странный путь debian в моем репо?

4b9b3361

Ответ 1

используйте git mv, и все будет AOK.

Почему бы просто не попробовать, а не спрашивать? Вы всегда можете reset легко в git.:)

Ответ 2

Git отсутствует механизм, указывающий, что вы ожидаете, что там будут переименования и обновления путей при выполнении разницы между двумя проектами/ветвями и т.д.

Существуют различные варианты переименования файлов (например, -M и -patience), но могут быть медленными.

Как уже говорилось, переименования путей не влияют на сам репозиторий, поскольку это просто снимок вашего контента (blobs) и структуры (узлы дерева). Если все, что вы сделали, добавлено дополнительным каталогом верхнего уровня, тогда все деревья и капли ниже не изменяются и требуют нулевого дополнительного хранилища. Все, что вам нужно, это одно дерево node для вашей фиксации и одно дерево node для нового tld. Мертвый легко. Git обрабатывает эту часть без проблем.

Это только тогда, когда вы хотите сделать сравнение (и любые исправления), которое имеет значение. Было бы неплохо сказать, что параметр -P указывает, что вы ожидаете, что некоторые переименования путей и для diff будут таким образом легко справляться. Это не хорошо видно 200 удалений файлов и 200 новых файлов; -)

Поиск того, как добавить параметр -P, - это еще один из моих элементов списка дел (надеюсь, у меня найдется время для этого).

Ответ 3

В качестве альтернативы переименуйте файлы с помощью mv и вызовите git add --all, чтобы выполнить все операции удаления и добавить неиспользуемые файлы (имена новых файлов). Без --all вы должны явно выполнять операции удаления и новые имена файлов отдельно. Не используйте git add --update, так как это будет выполнять все операции удаления, но не будет добавлять новые имена файлов.

Обратите внимание, что вы, скорее всего, захотите выполнить эти операции в локальной ветке, чтобы вы не случайно push их в свою ветку мастера-хозяина, или ваш друг не отправил pull их в свою главную ветвь.