Как клонировать git-репозиторий с определенной ревизией / changeset?

Ну, учитывая, что у вас уже есть регулярное выражение, вы на полпути. Я бы подошел к этому, чтобы получить роли участника и отфильтровать те, которые соответствуют регулярному выражению. Затем я бы просто вызвал метод 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);
});
362
задан tshepang 30 May 2016 в 23:59
поделиться

4 ответа

ОБНОВЛЕНИЕ 2 Начиная с Git 2.5.0 описанная ниже функция может быть включена на стороне сервера с помощью переменной конфигурации uploadpack.allowReachableSHA1InWant , здесь запрос функции GitHub и фиксация GitHub, активирующая эту функцию . Обратите внимание, что некоторые серверы Git активируют эту опцию по умолчанию, например Сервер Bitbucket включил его с версии 5.5+ . См. Этот ответ на Stackexchange для примера того, как активировать параметр конфигурации.

ОБНОВЛЕНИЕ 1 Для версий Git 1.7 используйте git clone и git reset, как описано в ответ Вайбхава Баджпаи

Если вы не хотите получать полный репозиторий, то вам, вероятно, не следует использовать 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
177
ответ дан 23 November 2019 в 00:11
поделиться

Я использую этот фрагмент вместе с 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 $@




0
ответ дан 23 November 2019 в 00:11
поделиться

Если вы хотите получить все с самого начала и до определенного момента, ответ Чарльза Бейли идеален. Если вы хотите сделать обратное и получить подмножество истории, начиная с текущей даты, вы можете использовать git clone --depth [N], где N - количество оборотов истории, которые вам нужны. Однако:

--depth

Создайте неглубокий клон с историей, усечённой до указанного числа ревизий. Неглубокий репозиторий имеет ряд ограничений (вы не можете ни клонировать, ни извлекать из него, ни выталкивать из него или в него), но он подходит, если вас интересует только недавняя история большого проекта с длинной историей, и вы хотите присылать исправления в виде патчей.

32
ответ дан 23 November 2019 в 00:11
поделиться

Клонирование репозитория git точно клонирует весь репозиторий: нет способа выбрать только одну ревизию для клонирования. Однако после выполнения git clone вы можете проверить конкретную ревизию, выполнив checkout .

51
ответ дан 23 November 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: