Проблемы с переименованием Git - PullRequest
6 голосов
/ 29 марта 2012

Мы с другом работаем отдельно над проектом. Сначала я нажал на папку с именем old-name, а он вытащил из нее. В середине этого я решил переименовать папку old-name в new-name, чтобы лучше отличать ее от других проектов (скажем, old-name слишком универсальный, а new-name более конкретный). Поэтому я сказал своему другу переименовать папку его проекта в new-name. А потом мы работаем отдельно.

Теперь он отправляет то, что он сделал, на удаленный сервер (в папке new-name), когда я пытаюсь получить данные с сервера, возникают все эти конфликты (переименование / добавление), и, очевидно, существует одна дополнительная копия каждого отдельного файла. в проекте new-name сейчас.

new-name/index.php (MINE)
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe)

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

Спасибо

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Просто добавьте все свои файлы. Все, что является простым переименованием, будет идентифицировано как не имеющее различий и удалено из индекса. Таким образом, даже если «git status» показывает множество проблем, после «git add -A» их останется немного (и все, что останется, будет иметь реальные различия). Вы должны сразу же оформить новую ветку (до 'git add -A'), чтобы вы могли легко вернуться, если она идет на юг.

1 голос
/ 29 марта 2012

Просто предположение, но мне кажется, что обнаружение переименования в Git не обнаружило переименования при слиянии. Много ли в этом каталоге файлов? Были ли все файлы сильно изменены?

Попробуйте повторить объединение / извлечение после увеличения значения настроек конфигурации merge.renameLimit или diff.renameLimit. От git help config:

diff.renameLimit
    The number of files to consider when performing the copy/rename
    detection; equivalent to the git diff option -l.

merge.renameLimit
    The number of files to consider when performing rename detection
    during a merge; if not specified, defaults to the value of
    diff.renameLimit.

Вы также можете попробовать -Xrename-threshold=70, чтобы снизить порог обнаружения подобия переименования. От git help merge (также в git help pull):

rename-threshold=<n>
    Controls the similarity threshold used for rename detection.
    See also git-diff(1) -M.

С git help diff:

-M[<n>], --find-renames[=<n>]
    Detect renames. If n is specified, it is a threshold on the
    similarity index (i.e. amount of addition/deletions compared to the
    file’s size). For example, -M90% means git should consider a
    delete/add pair to be a rename if more than 90% of the file hasn’t
    changed.

Обратите внимание, что я не уверен, что происходит, когда окончания строк преобразуются между стилем Unix и стилем Windows. Git может подумать, что файлы отличаются на 100%, даже если единственное отличие - это окончания строк, поэтому убедитесь, что вы используете одинаковые окончания строк.

0 голосов
/ 29 марта 2012

Вы должны развернуть новую рабочую копию в новую локальную папку, прямо рядом с кодом, над которым вы работали в первую очередь.Затем с помощью инструмента Diff style сравните и объедините свою работу с новой локальной копией.Затем внесите изменения в новый раскрывающийся список, и bam, ваши изменения будут зафиксированы.Я знаю, что это не сохраняет весь ваш журнал изменений в том, что вы делали, но если вы делаете это вручную, это не вариант, это следующая лучшая вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...