2008-12-23 2 views
2

Единственная распределенная система контроля версий, которую я использовал в своих проектах, - базар. Я не знаю много о git и mercurial, кроме как делать выписки. Причина, по которой мне нравится базар, - это плагин automv. Он обнаруживает, когда я перемещал/удалял файлы вручную (из командной строки/ide и т. Д.), Которые я часто делаю, когда я спешу. Но базар действительно медленный, и я думаю о переходе на git. Есть ли у git что-то похожее на эту функциональность?Есть ли у git эквивалент для плагина automaza базара?

+1

Я считаю, что плагин automz для bzr сильно зависит от алгоритма git для автоматического обнаружения переименованных файлов. :-) – bialix

ответ

8

То, как Git работает в ситуации переезда/переименования, совершенно иная. Git отслеживает только контент, поэтому он знает, что файл X имел SHA1 хэш abc123... при одном коммите, а файл Y имел тот же хеш abc123... при следующем коммит. Таким образом, инструменты Git, при просмотре истории или что-то еще, заключают, что файл X должен был быть переименован в имя файла Y в этот момент.

Таким образом, Git восстанавливает действия, предпринятые для перехода от одной фиксации к следующей, без необходимости иметь это знание в момент фиксации. Это может привести к обнаружению ситуации, когда вы переименовываете файл и что-то измените в файле (конечно, это не делает это, сравнивая хэши SHA1, но проводя сравнение текста между файлами, которые были изменены в фиксации).

+0

Предположительно, он достаточно умен, чтобы предположить, что что-то было перемещением, если есть незначительные изменения (например, объявление пространства имен в файле C#)? Проверяю для себя, но не могу на этом ноутбуке ... –

+0

@Jon Skeet: Да, просто обновил свой ответ, чтобы отразить это. –

+0

Да, это прекрасно работает с git. Я полностью раздражен SVN, потому что он не может автоматически распознать эти вещи. –

2

Вы могли бы искать git add --all:

Обновление файлов, что мерзавец уже знает о (такой же, как --update) и добавить все файлы неотслеживаемые, которые не игнорируются .gitignore механизмом.

(выделено мной.)

1

Просто для информации только базар знает хода. SVN, Git, hg знают только копию с версией и удаляют. Я думаю, что different. Но, как упоминалось ранее, git обрабатывает automv очень хорошо (насколько я слышал), только быть настолько умным, чтобы совершать очень быстро после перемещения. Я слышал, что egit делает autocommit после переименования класса.

Смежные вопросы