Я ищу эффективный способ получить список уникальных авторов коммитов для репозитория SVN в целом или для заданного пути к ресурсу. Мне не удалось найти команду SVN специально для этого (и не ожидаю ее), но я надеюсь, что может быть лучший способ, чем то, что я пробовал до сих пор в Терминале (в OS X):
svn log --quiet | grep "^r" | awk '{print $3}'
svn log --quiet --xml | grep author | sed -E "s:</?author>::g"
Любой из них даст мне по одному имени автора в строке, но оба требуют отфильтровывать изрядное количество дополнительной информации. Они также не обрабатывают дубликаты одного и того же автора, поэтому при большом количестве коммитов несколькими авторами по сети течет тонна избыточности. Чаще всего я просто хочу увидеть уникальные имена пользователей авторов. (На самом деле может быть удобно при случае вывести количество фиксаций для каждого автора, но даже в этих случаях было бы лучше, если бы вместо этого отправлялись агрегированные данные.)
Обычно я работаю с доступом только для клиента, поэтому svnadmin
команды менее полезны, но при необходимости я мог бы попросить особую услугу у администратора репозитория, если это строго необходимо или гораздо более эффективно. В репозиториях, с которыми я работаю, есть десятки тысяч коммитов и много активных пользователей, и я не хочу никому причинять неудобства.
Ответы:
Для того, чтобы отфильтровать дубликаты, возьмите выход и через трубу:
sort | uniq
. Таким образом:Я не удивлюсь, если это будет способ сделать то, о чем вы просите. Инструменты Unix часто ожидают, что пользователь будет выполнять сложную обработку и анализ с помощью других инструментов.
PS Если задуматься, можно объединить
grep
иawk
...PPS Пер Кевин Рид ...
P 3 .S. Per kan, используя вертикальные полосы вместо пробелов в качестве разделителей полей, чтобы правильно обрабатывать имена с пробелами (также обновлены примеры Python) ...
Для большей эффективности вы можете сделать однострочную версию Perl. Я не так хорошо знаю Perl, поэтому я бы сделал это на Python:
Или, если вы хотите подсчетов:
Тогда вы бы бежали:
источник
sort
но не зналuniq
, и, похоже, последний принимает-c
параметр, а не добавляет количество вхождений для каждой строки. Я все еще надеюсь на более эффективный (и масштабируемый) способ, но в крайнем случае это помогает.//author/text()
будетsvn log --xml
надежно извлекать только имена авторов . (В Mac OS X естьxpath
команда, которая почти выполняет эту работу, но выдает посторонний текст и не может быть сконфигурирована для этого. Может быть, есть что-то еще.)awk -F " \\\\| " '{print $2}'
svn log --quiet | awk -F ' \\\\| ' '/^r/ {print $3}' | sort -u
иначе я просто получал пустую строкуВ PowerShell укажите местоположение рабочей копии и используйте эту команду.
Формат вывода
svn.exe log --quiet
выглядит следующим образом:Отфильтруйте горизонтальные правила с помощью
? { $_ -notlike '-*' }
.Разделить на,
' \| '
чтобы превратить запись в массив.Второй элемент - это имя.
Составьте массив из каждой строки и выберите второй элемент с помощью
% { ($_ -split ' \| ')[1] }
.Возвращать уникальные вхождения с помощью
Sort -Unique
. Это сортирует вывод как побочный эффект.источник
Sort -Unique
нечувствителен к регистру, вы должны использоватьSort-Object | Get-Unique –AsString
илиSelect-Object -Unique
вместо него, чтобы получить проверку с учетом регистра.([xml](svn log --xml)).SelectNodes('//author') | % {$_.InnerText} | Select -Unique
Мне пришлось сделать это в Windows, поэтому я использовал порт Super Sed для Windows ( http://www.pement.org/sed/ ) - и заменил команды AWK и GREP:
При этом используется «сортировка» окон, которая может присутствовать не на всех машинах.
источник
Один удаленный репозиторий, который вы можете использовать:
источник
git svn --help
), Это действительно полезно в качестве проверки только для выполнения этой команды может занять слишком много времени.У этой команды есть дополнительная
grep '|'
функция, исключающая ложные значения. В противном случае случайные коммиты, начиная с'r'
get включены, и, таким образом, возвращаются слова из сообщений фиксации.источник
--quiet
или-q
используется в других предложениях. Это печатает только заголовки журнала (редакция, автор и дата, время)Решение для windows 10.
printAllAuthor.bat
sort
командойPS:
источник
Powershell поддерживает XML, что устраняет необходимость синтаксического анализа вывода строк.
Вот быстрый скрипт, который я использовал на Mac, чтобы получить уникальный список пользователей в нескольких репозиториях.
#!/usr/bin/env pwsh $repos = @( 'Common/' 'Database/' 'Integration/' 'Reporting/' 'Tools/' 'Web/' 'Webservices/' ) foreach ($repo in $repos) { $url = "https://svn.example.com:8443/svn/$repo" $users += ([Xml](svn log $url --xml)).log.logentry.author | Sort-Object -Unique } $users | Sort-Object -Unique
источник
Более простая альтернатива:
источник