Вы, похоже, не знаете о жесткости этой проблемы, поэтому я хотел бы указать, почему это так сложно.
Учитывая два каталога, которые равны в начале и оба содержат, скажем, 1000 файлов. Теперь вы переименовываете, скажем, 500 файлов в один из каталогов. Переименование может сильно различаться. Первоначально файл с именем foobar.txt
можно назвать DSC-3457.orig.jpg
. Команда diff не может действительно найти ее снова, не имея представления о том, что было переименовано в что.
Кроме того, файл с именем x
может быть переименован в y
, в то время как файл с именем y
может быть переименован в x
. В этом случае даже сомнительно, следует ли это рассматривать как простое переименование или просто передается содержимое обоих файлов.
Это означает, что в общем у вас возникнут большие проблемы для этого. Стандартные инструменты не будут делать это из коробки.
Это говорит о том, что у меня есть два аспекта, которые я хочу указать, что может вам помочь.
файла Размеры
Вы можете сортировать все файлы по размерам файлов, а затем diff
каждая пара из двух каталогов. Это может работать отлично, если все изменения у вас есть только переименований, и если все файлы имеют разный размер. Если у вас есть несколько файлов одинакового размера (возможно, по чистой случайности или потому, что они имеют одинаковый формат с фиксированным размером), у вас снова возникают проблемы, и вам придется сравнивать каждую возможную пару одинакового размера группа.
Git-Diff
Вы упомянули git-diff
в тегах. git
фактически сохраняет запись в случае переименования файла. Поэтому, если вы намерены использовать git diff
, вы можете в некоторой степени полагаться на способность git обнаруживать переименования. Обычно это работает, если файл удаляется и добавляется с новым именем в одном коммите. Если он добавляется с новым именем в одном коммите, а затем старая версия удаляется в другом коммите, это не будет работать должным образом. Намного больше узнать о переименованиях в git diff
; см. man git diff
и ищите rename
, в этом случае есть около десятка мест, о которых упоминается, поэтому я не буду пытаться обобщить это здесь сам.
EDIT: вы можете использовать команду, как git diff --find-renames --diff-filter=ACDMTUX
(то есть вы позволяете всем видам изменений проходить фильтр, за исключением переименований).
Что, на ваш взгляд, означает сравнивать папки, когда файлы не называются одинаковыми? Если папка1 содержит файлы a, b и c, а folder2 содержит x, y и z, какие файлы следует сравнивать с другими файлами? Следует ли сравнивать с z, или ... что? Как это должно работать? –
Это репозиторий git, помогает ли это игнорировать изменения имени файла? – RegUser
Это репозиторий git, но вы различаете состояния дерева и репозитория. Например, вы отличаетесь между текущим состоянием вашего рабочего дерева и некоторой фиксацией? Из того, что вы написали, похоже, что вы все еще различаете две папки, и неясно, что 'git' будет иметь для этого какое-то значение. 'git diff' имеет опцию' --find-renames', но неясно, работает ли это для вашего прецедента. –