Ответ 1
Если вы можете использовать инструмент GUI, лучшее, что я пробовал, это WinMerge - с открытым исходным кодом.
Если нет, то diff является вашим другом.
Я перемещаю репозиторий из sourcesafe в subversion, и мне нужно обеспечить равные жизненные точки. Является ли какой-либо существующей командой/инструментом для окон, которая позволяет мне сравнивать два дерева папок, которые они равны (имеет одинаковую структуру папок и файлы одного и того же содержимого)? Идеал будет чем-то вроде командной строки:
some_cool_compare c:\current_vss c:\current_svn -exclude .svn;*.vspscc;*.scc
Есть ли какой-нибудь инструмент/команда или мне нужно написать script из моих собственных?
Если вы можете использовать инструмент GUI, лучшее, что я пробовал, это WinMerge - с открытым исходным кодом.
Если нет, то diff является вашим другом.
Помимо сравнения, вы можете сделать это и многое другое.
Это один из тех инструментов, с которыми я не могу жить.
Посмотрите здесь для справки по параметрам сценариев
Поскольку я неохотно устанавливаю новые программы в свою машину, этот PowerShell script (из Эй, блог сценариста!) помог мне решить мою проблему. Я только изменил путь в соответствии с моим случаем:
$fso = Get-ChildItem -Recurse -path F:\songs
$fsoBU = Get-ChildItem -Recurse -path D:\songs
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU
Как и в OP, я искал инструмент для разграничения папок Windows, в частности тот, который мог обрабатывать очень большие деревья (100 с гигабайт данных). Спасибо Lieven Keersmaekers за указатель BeyondCompare, который я нашел очень быстрым (примерно в 10-100 раз быстрее), чем предыдущий старый школьный инструмент windiff.
Кстати, у BeyondCompare в дополнение к графическому интерфейсу есть режим командной строки.
Вы также можете выполнить tree > tree.txt
в обеих папках, а затем разбить оба файла tree.txt любым файловым инструментом diff (git diff).
SyncToy - это бесплатное приложение от Microsoft с режимом "Просмотр" для сравнения двух путей. Например:
Затем вы можете выбрать один из трех режимов ( "Синхронизировать", "Эхо" и "Внести" ), чтобы устранить различия.
Наконец, он поставляется с SyncToyCmd
для создания и синхронизации пар папок из CLI или запланированной задачи.
Вы можете использовать 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