Подавайте результаты RMarkdown без контроля версий

#r #git #r-markdown #github-pages #bookdown

Вопрос:

Мы часто используем пакеты на основе RMarkdown для создания веб-сайтов с R ( bookdown , blogdown , distill …) и используем страницы github для представления html-файлов по URL username.github.io/repo -адресу .

При таком подходе исходящие (т. е. html / css) файлы также контролируются версиями и часто включаются в коммиты по ошибке ( git commit -a ). Это раздражает, так как эти файлы загромождают фиксацию и часто приводят к конфликтам фиктивных файлов.

В идеале выходные файлы вообще не будут контролироваться версией, так как двоичные файлы (изображения) дополнительно раздувают репозиторий. Поэтому я ищу решение, где:

  • Git полностью игнорирует выходные файлы, но предоставляет альтернативный (но сопоставимый 1) метод для gh-страниц для их обслуживания
  • Git временно игнорирует выходные файлы, а фиксация / отправка их на gh-страницы выполняется отдельной явной командой

1: Метод должен быть основан на командной строке и содержать удобный URL-адрес для доступа к веб-сайту

Ответ №1:

Вы могли бы .html .css проигнорировать и т. Д. main Во всех других ветвях , кроме ветви, например, gh-page ветви, из которой построена ваша страница github.

Git не поддерживает разные .ignore файлы в разных ветвях, поэтому вам придется настроить скрипт bash, который заменяет файл игнорирования каждый раз, когда вы проверяете новую ветвь. Смотрите здесь, как это сделать: https://gist.github.com/wizioo/c89847c7894ede628071

Возможно, это не то элегантное решение, на которое вы надеялись, но оно должно сработать.

Комментарии:

1. Спасибо вам за ваш ответ! Это казалось правдоподобным способом, но, если разобраться в сути, это казалось очень банальным решением с большими накладными расходами, которое я искал. В итоге я принял свой собственный ответ, решение, о котором я узнал случайно!

2. Ваше решение действительно выглядит аккуратно. Я мог бы попробовать это для своих собственных проектов!

Ответ №2:

Если у вас на компьютере установлена программа python, вы можете использовать импорт страниц GitHub, инструмент, разработанный специально для этой цели.

Вам нужна установка python, так как она должна быть установлена с помощью pip, но как только она установлена, она прекрасно интегрируется в рабочий процесс R / RMarkdown.

Как только он установлен ( pip install ghp-import ), вы можете запустить ghp-import docs его (при docs условии, что там хранятся ваши выходные данные RMarkdown).

Существует множество практических опций, которые вы можете использовать, в том числе -p для дополнительного переноса изменений на пульт дистанционного управления после фиксации.

Ответ №3:

Вам нужно сказать Git, чтобы он игнорировал папку, в которую встроена книга.

Так, например, по умолчанию bookdown помещает все встроенные файлы в папку под названием «_book».

Просто добавьте следующую строку в файл .gitignore в вашем проекте.

_book

Затем вы можете работать над своей книгой, создавать ее и вносить изменения, не беспокоясь об обновлении сайта.

Чтобы обновить сайт, вы хотите создать ветвь gh-страниц, которая используется только для размещенного контента. Сделайте это с помощью следующих команд из папки вашей книги:

 git checkout --orphan gh-pages
git rm -rf .

# create a hidden file .nojekyll
touch .nojekyll
git add .nojekyll

git commit -m"Initial commit"
git push origin gh-pages
 

Убедитесь (как только вы разместите содержимое своей книги в этой ветке), что GitHub настроен на использование этой ветки для размещения, а не папки, которую вы использовали раньше.

Затем вы можете переключиться обратно в свою основную ветвь с помощью следующей команды:

 git checkout master
 

Затем вы клонируете свою ветвь gh-страниц в свой основной проект:

 git clone -b gh-pages https://github.com/yourprojecturl.git book-output
 

Затем, когда у вас будет версия встроенной книги (в папке _book), готовая для использования в качестве живого сайта, используйте следующие команды, чтобы скопировать содержимое в папку вывода книги и отправить его в ветвь gh-страниц, где находится живой сайт:

 cd book-output
git rm -rf *
cp -r ../_book/* ./
git add --all *
git commit -m"Update the book"
git push -q origin gh-pages
 

Вы можете продолжать использовать этот последний набор команд всякий раз, когда в _book появится версия, которую вы готовы запустить вживую.

Комментарии:

1. Но как я буду использовать файлы в качестве веб-сайта?

2. Существует два способа использования страниц GitHub для размещения контента. Один из них-указать папку в вашей основной ветви, которая будет размещена. Другой вариант-использовать отдельную ветвь в качестве размещенного сайта. Это тот метод, который я рекомендую. Таким образом, вы игнорируете папку сборки, а затем, когда захотите, помещаете содержимое папки _book в ветвь gh-страниц. Инструкции можно найти здесь: bookdown.org/yihui/bookdown/github.html

3. Я также должен добавить, что технически невозможно использовать страницы GitHub для размещения вашего контента без какого-либо контроля версий. Но мой метод отделяет ваш основной код филиала от кода вашего веб-сайта, что вам нужно, чтобы он не мешал, не конфликтовал и т. Д.

4. > > Таким образом, вы игнорируете папку сборки, а затем, когда захотите, помещаете содержимое папки _book в ветку gh-pages .Я нахожу это очень интересным подходом, в котором я никогда не был уверен, что это возможно. Итак, как я могу зафиксировать / переместить игнорируемую папку в отдельный раздел? Ссылка, которую вы упомянули, не входит в это

5. Это происходит немного ниже. Я редактирую свой ответ, чтобы предоставить полную информацию.