@null_object

Как изменить автора каждого коммита?

Есть локальный репозиторий, хочу поменять авторов каждого коммита, попробовал написать скрипт, но он не работает
<?php

$authors = [
    "test <test@gmail.com>",
     ....
];

$commitList = shell_exec("git rev-list --all");

$commits = explode("\n", trim($commitList));

foreach ($commits as $commit) {
    $author = $authors[array_rand($authors)];
    $command = "git commit --amend --author \"{$author}\" --no-edit -c {$commit}";

    shell_exec($command);
}
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Изменение автора каждого коммита в локальном репозитории с использованием инструмента git filter-repo может выглядеть следующим образом:

#!/bin/bash

authors=("test <test@gmail.com>" "another <another@example.com>")

for commit in $(git rev-list --all); do
    author=${authors[$RANDOM % ${#authors[@]}]}
    git filter-repo --commit-callback "commit.author_name = '$author'; commit.author_email = '$author'" --path-commit $commit
done


В этом примере массив authors содержит список новых авторов в формате "Имя <адрес-электронной-почты>". Скрипт выбирает случайного автора из этого списка для каждого коммита и использует инструмент git filter-repo для изменения автора коммита.

Алгоритм будет работать медленно, так как весь репозиторий будет перестраиваться на каждом шаге цикла.

Примечание: Убедитесь, что у вас установлена последняя версия git filter-repo, поскольку инструмент может быть доступен как отдельный пакет или как часть Git.

И код я не проверял, не обещаю что он заработает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы