Возможно ли отредактировать сообщение фиксации коммита, которое не является последним, с использованием libgit2sharp?Редактировать старые сообщения фиксации с помощью LibGit2Sharp
ответ
Аналогия git filter-branch
является Repository.Refs.RewriteHistory
.
В качестве примера, позволяет переписать все сообщения фиксации, которые содержат foo
заменой foo
с StackoverFlow
:
repo.Refs.RewriteHistory (new RewriteHistoryOptions {
OnError = OnError,
OnSucceeding = OnSucceeding,
CommitHeaderRewriter = c =>
CommitRewriteInfo.From (c, c.Message.Replace ("foo", "StackOverflow")),
}, commitsToRewrite);
Pre-переписан:
git log --oneline
b859690 Commit foo 3
327f702 Commit foo 2
75ac0b8 Commit foo 1
после переписывания:
git log --oneline
dc156e3 Commit StackOverflow 3
587f6c3 Commit StackOverflow 2
894361f Commit StackOverflow 1
Примечания: Как вы увидите в выводе выше журнала, то ПОР изменился, так же, как они будут с помощью git filter-branch
так что вы должны сил любых толчков к ПУлЬТам ...
Я высоко рекомендую идти через испытательный стенд FilterBranchFixture.cs
, как это лучшая документация RewriteHistory
и вы найдете различные классы переписывания, как переписывание родителей фиксации, используются здесь и как ошибки обрабатываются ...
WARNING! Переписанная история будет иметь разные имена объектов для всех объектов и не будет сходиться к исходной ветке. Вы, , не сможете легко нажимать и распространять переписанную ветку на в верхней части исходной ветви. Пожалуйста, не используйте эту команду, если вы делаете , не знаете полных последствий и не используйте ее в любом случае, если достаточно простого одиночного фиксажа , чтобы исправить вашу проблему. (См "RECOVERING от входа Rebase" секции в GIT-Rebase (1) для получения дополнительной информации о перезаписи опубликованной истории.)
Вырезать/Вставить Пример:
using System;
using LibGit2Sharp;
namespace gitrewrite
{
class MainClass
{
private static bool succeeding;
private static Exception error;
public static void Main (string[] args)
{
var repo = new Repository ("/Users/sushi/code/XamTests/RepoTestBed");
// Assuming you might pre-filter, but for this example take ALL commits
var commitsToRewrite = repo.Commits;
repo.Refs.RewriteHistory (new RewriteHistoryOptions {
OnError = OnError,
OnSucceeding = OnSucceeding,
CommitHeaderRewriter = c =>
CommitRewriteInfo.From (c, c.Message.Replace ("foo", "StackOverflow")),
}, commitsToRewrite);
}
private static Action OnSucceeding {
get {
succeeding = false;
return() => succeeding = true;
}
}
private static Action<Exception> OnError {
get {
error = null;
return ex => error = ex;
}
}
}
}
Удивительный ответ! :) – nulltoken
Lol, Спасибо! ;-) Мне пришлось написать множество настраиваемых фильтров * Rewriter для контрактной работы, я знаю, что код reaaaalllllyyyy хорошо. :-p – SushiHangover
Отличный ответ! Я должен был добавить сообщение: 'в' CommitRewriteInfo.From (c, message: c.Message.Replace ("foo", "StackOverflow")), чтобы заставить его работать. – Toast
- 1. LibGit2Sharp получает все фиксации, начиная с {Hash}
- 2. Git список фиксации текущей ветви с libgit2sharp
- 3. C# Как читать время фиксации с помощью libgit2Sharp
- 4. Как отредактировать старые сообщения фиксации и push на сервер?
- 5. Как отправить старые сообщения с помощью Websockets
- 6. Выяснить, что филиал принадлежит фиксации в LibGit2Sharp?
- 7. Retrive firstparentonly на хозяин с помощью libgit2sharp
- 8. Закрыть проблему с помощью сообщения фиксации
- 9. редактировать сообщения с помощью экспресс-REST API
- 10. Laravel Редактировать содержание сообщения с помощью CKeditor
- 11. Git filter-branch: можно обновить сообщения фиксации, чтобы ссылаться на старые идентификаторы фиксации?
- 12. Git - Ветвление от мастера, используя старые фиксации
- 13. Филиалы отделенные после старой фиксации редактировать
- 14. Как хранить старые сообщения
- 15. ActiveMQ предупреждает старые сообщения
- 16. Очистить старые сообщения activemq
- 17. Редактировать сообщение фиксации после раздавливания
- 18. Что такое сообщения фиксации?
- 19. Правильные сообщения о фиксации
- 20. Получить файлы, измененные/добавлено/удалено от фиксации в LibGit2Sharp
- 21. LibGit2Sharp - Лучший способ для создания и фиксации файлов
- 22. Написание мерзавец сообщения фиксации
- 23. git подсветка сообщения фиксации
- 24. Как получить список удаленных филиалов, которые содержат фиксации в libgit2sharp
- 25. Как узнать идентификатор фиксации аннотированного тега на удаленном компьютере с помощью LibGit2Sharp?
- 26. Редактировать нажатое сообщение фиксации в EGit
- 27. Сделайте экспорт с libgit2sharp
- 28. Как частично сгенерировать файл с помощью LibGit2Sharp?
- 29. Выполните попытку без проверки с помощью Libgit2sharp
- 30. libgit2sharp разрешить конфликт файлов с помощью их
_ "заменить определенное слово во всех сообщениях фиксации в репозитории ». _ - Вероятно, вы хотите узнать, как сделать« git filter-branch »с библиотекой под рукой. Пример использования фильтра-ветви: https://help.github.com/articles/remove-sensitive-data/. Обратите внимание, что это перепишет всю вашу ветку, поскольку каждая фиксация должна быть перезаписана. – cubrr
Я просто понял, что это плохой пример, поэтому я удалил его. Мой вариант использования - пройти через все транзакции в репо, сгенерировать текст из diff (эта часть уже работает) и установить его как сообщение фиксации. @cubrr – Toast