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

Каков наилучший способ сравнить 2 дерева папок на окнах?

Я перемещаю репозиторий из sourcesafe в subversion, и мне нужно обеспечить равные жизненные точки. Является ли какой-либо существующей командой/инструментом для окон, которая позволяет мне сравнивать два дерева папок, которые они равны (имеет одинаковую структуру папок и файлы одного и того же содержимого)? Идеал будет чем-то вроде командной строки:

some_cool_compare c:\current_vss c:\current_svn -exclude .svn;*.vspscc;*.scc

Есть ли какой-нибудь инструмент/команда или мне нужно написать script из моих собственных?

4b9b3361

Ответ 1

Если вы можете использовать инструмент GUI, лучшее, что я пробовал, это WinMerge - с открытым исходным кодом.

Если нет, то diff является вашим другом.

Ответ 2

Помимо сравнения, вы можете сделать это и многое другое.

Это один из тех инструментов, с которыми я не могу жить.
Посмотрите здесь для справки по параметрам сценариев

Ответ 3

Поскольку я неохотно устанавливаю новые программы в свою машину, этот PowerShell script (из Эй, блог сценариста!) помог мне решить мою проблему. Я только изменил путь в соответствии с моим случаем:

$fso = Get-ChildItem -Recurse -path F:\songs
$fsoBU = Get-ChildItem -Recurse -path D:\songs
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU

Ответ 4

Как и в OP, я искал инструмент для разграничения папок Windows, в частности тот, который мог обрабатывать очень большие деревья (100 с гигабайт данных). Спасибо Lieven Keersmaekers за указатель BeyondCompare, который я нашел очень быстрым (примерно в 10-100 раз быстрее), чем предыдущий старый школьный инструмент windiff.

Кстати, у BeyondCompare в дополнение к графическому интерфейсу есть режим командной строки.

Ответ 5

Вы также можете выполнить tree > tree.txt в обеих папках, а затем разбить оба файла tree.txt любым файловым инструментом diff (git diff).

Ответ 6

SyncToy - это бесплатное приложение от Microsoft с режимом "Просмотр" для сравнения двух путей. Например:

SyncToy Preview screenshot (источник: https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2010/06/synctoy-preview.png)

Затем вы можете выбрать один из трех режимов ( "Синхронизировать", "Эхо" и "Внести" ), чтобы устранить различия.

Наконец, он поставляется с SyncToyCmd для создания и синхронизации пар папок из CLI или запланированной задачи.

Ответ 7

Вы можете использовать git для этой цели. В принципе, вы создаете репозиторий git в папке A (репо находится в A/.git), затем скопируйте A/.git в B/.git, затем перейдите в папку B и сравните, просто запустив git diff, Функцию --exclude можно выполнить с помощью .gitignore.

Итак, придерживайтесь вашего примера (но используя оболочку bash в Linux):

# Create a Git repo in current_vss
pushd current_vss
printf ".svn\n*.vspscc\n*.scc" >> .gitignore
git init && git add . && git commit -m 'initial'
popd

# Copy the repo to current_svn and compare
cp -r current_vss/.git* current_svn/
pushd current_svn
git diff