Ну, учитывая, что у вас уже есть регулярное выражение, вы на полпути. Я бы подошел к этому, чтобы получить роли участника и отфильтровать те, которые соответствуют регулярному выражению. Затем я бы просто вызвал метод removeRoles
для пользователя, чтобы удалить все роли.
Ниже вы можете найти пример кода, попробовать его и дать мне знать, как он работает.
client.on("message", async message =>
{
// Get the user
let member = message.member;
// Get all the roles which match the regex
let filteredRoles = member.roles.filter((role) => /^#[0-9a-zA-Z]{6}$/.test(role.name));
// Remove the roles from the member
member.removeRoles(filteredRoles);
});
ОБНОВЛЕНИЕ 2 Начиная с Git 2.5.0 описанная ниже функция может быть включена на стороне сервера с помощью переменной конфигурации uploadpack.allowReachableSHA1InWant
, здесь запрос функции GitHub и фиксация GitHub, активирующая эту функцию . Обратите внимание, что некоторые серверы Git активируют эту опцию по умолчанию, например Сервер Bitbucket включил его с версии 5.5+ . См. Этот ответ на Stackexchange для примера того, как активировать параметр конфигурации.
ОБНОВЛЕНИЕ 1 Для версий Git 1.7
Если вы не хотите получать полный репозиторий, то вам, вероятно, не следует использовать clone
. Вы всегда можете просто использовать выборку, чтобы выбрать ветку, которую вы хотите получить.Я не эксперт по hg, поэтому я не знаю деталей -r
, но в git вы можете сделать что-то вроде этого.
# make a new blank repository in the current directory
git init
# add a remote
git remote add origin url://to/source/repository
# fetch a commit (or branch or tag) of interest
# Note: the full history up to this commit will be retrieved unless
# you limit it with '--depth=...' or '--shallow-since=...'
git fetch origin <sha1-of-commit-of-interest>
# reset this repository's master branch to the commit of interest
git reset --hard FETCH_HEAD
Я использую этот фрагмент вместе с GNU make, чтобы закрыть любой тег ревизии, ветвь или хеш
, который был протестирован в git версии 2.17.1
${dir}:
mkdir -p ${@D}
git clone --recursive --depth 1 --branch ${revison} ${url} ${@} \
|| git clone --recursive --branch ${revison} ${url} ${@} \
|| git clone ${url} ${@}
cd ${@} && git reset --hard ${revison}
ls $@
Если вы хотите получить все с самого начала и до определенного момента, ответ Чарльза Бейли идеален. Если вы хотите сделать обратное и получить подмножество истории, начиная с текущей даты, вы можете использовать git clone --depth [N]
, где N - количество оборотов истории, которые вам нужны. Однако:
--depth
Создайте неглубокий клон с историей, усечённой до указанного числа ревизий. Неглубокий репозиторий имеет ряд ограничений (вы не можете ни клонировать, ни извлекать из него, ни выталкивать из него или в него), но он подходит, если вас интересует только недавняя история большого проекта с длинной историей, и вы хотите присылать исправления в виде патчей.
Клонирование репозитория git точно клонирует весь репозиторий: нет способа выбрать только одну ревизию для клонирования. Однако после выполнения git clone
вы можете проверить конкретную ревизию, выполнив checkout
.