Получение мерзавца подтвердить ранее перемещенные файлы

Чтобы заключить великим авторам в кавычки SICP,

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

я предпочитаю иметь оба метода 1 и 2 под рукой. Используя рубин как пример, это идет .include?, который используется как это

haystack.include? needle
=> returns true if the haystack includes the needle

Иногда, хотя, просто по причинам удобочитаемости, я хочу зеркально отразить его вокруг. Ruby не идет in? метод, но это - острота, таким образом, я часто делаю это:

needle.in? haystack
=> exactly the same as above

, Если "более важно" подчеркнуть стог сена или операцию поиска, я предпочитаю писать include?. Часто, хотя, ни один стог сена или поиск действительно, о чем Вы заботитесь о, просто что объект присутствует - в этом случае я нахожу in?, лучше передает значение программы.

66
задан Michael 16 September 2009 в 03:11
поделиться

3 ответа

Думаю, он уже делает это. Я могу ошибаться, но я читал, что git отслеживает файлы на основе их содержимого, а не на основе их положения в файловой системе или на основе дельты / различий. В стеке, я думаю, это показывает, как будто файлы удаляются, а затем снова добавляются, но я думаю, что я ' Я пробовал это однажды, и он по-прежнему поддерживает историю из-за вышеупомянутого способа, которым git отслеживает вещи.

Тем не менее, было бы полезно для кого-то проверить, прав я или нет. Извините, если я неправильно понял ваш вопрос.

22
ответ дан 24 November 2019 в 15:03
поделиться

git не отслеживает историю отдельных файлов и не ' • Особо относитесь к перемещению и копированию, т. е. нет специальных метаданных, указывающих, что перемещение или копирование произошло. Вместо этого каждый коммит git представляет собой полный снимок рабочего дерева.

Если вы хотите видеть ходы в журнале git , вы можете указать -M в дополнение к параметру, в котором перечислены какие файлы были изменены, например

git log --summary -M

git будет смотреть на соседние деревья в истории коммитов и определять, были ли какие-либо файлы перемещены каждой фиксацией.

Чтобы найти копии, а также переименовать, вы можете использовать -C , вы можете указать его дважды, чтобы git более тщательно искал возможные источники копирования за счет некоторой производительности.

git log --summary -M -C -C

Обратите внимание, что поскольку git не сохраняет историю файлов (только историю фиксации), даже если вы выполнили git rm и git mv файл, вы не потеряете никакой истории.

11
ответ дан 24 November 2019 в 15:03
поделиться

To better understand why Git does do rename detection instead of (more common) explicit rename tracking, and how git log path limiting works, you can read read Linus's ultimate content tracking tool blog post by Junio C Hamano, maintainer of Git (and references therein).

5
ответ дан 24 November 2019 в 15:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: