Я в исследовательских задачах часто забываю создать репозиторий. А если создам, то забываю коммитить. А потом хочется посмотреть, что было раньше - а истории-то и нет. В результате стал добавлять такой код в конце маркдаунов. С помощью пакета git2r он:
- Инициализирует репо, если его нет
- Создает .gitignore файл, если его нет
- При каждом рендеринге markdown-файла коммитит изменения
- В конце документа будет его версия в системе контроля версий
А если делаем модель, удобно добавить в сообщение коммита текущее значение метрики модели.
# здесь мы автоматически записываем изменения в git
# таким способом можно будет отслеживать все модификации расчетов
if(!git2r::in_repository()){
# если мы не в репозитории, то создаем его
git2r::init()
}
# задаем пользователя, от которого будем коммитить
git2r::config(user.name = "user", user.email = "user@email.org")
if(!file.exists(".gitignore")){
# если не существует файла .gitignore, то создаем его
writeLines(c(".Rproj.user", ".Rhistory", ".RData", ".Ruserdata", "data/", "secret"),
con = ".gitignore")
}
# добавляем все файлы для коммита
git2r::add(path = "*")
git_status = git2r::status()
# проверяем, есть ли что коммитить
if(length(git_status$staged)>0){
# если есть что коммитить, то коммитим
commit_info = git2r::commit(message = paste("Autocommit", Sys.time()), all = TRUE)
} else {
# если все по-старому, то в качестве версии берем последний коммит
commit_info = git2r::last_commit()
}
commit_info = format(commit_info)
cat("Версия", commit_info, "\n")