Github: Зеркальное отображение gh-страниц для освоения
Я разрабатываю плагин jQuery, который размещается на GitHub. Там есть демо, которое я вручную копирую и отправляю в ветку gh-pages
что я хотел бы сделать, так это когда я нажимаю изменения master
он автоматически выдвигается к gh-pages
или, по крайней мере, установка, где они отражаются.
Я уже видел этот вопрос, но не уверен, что он действительно отвечает на мой вопрос в отношении этих требований:
- Я использую Tower, я не против использования терминала (Mac) для внесения изменений в конфигурацию, если решение работает с этим графическим интерфейсом.
- Я хочу, чтобы это "зеркальное отображение" было только для определенных репозиториев, но не для всех из них на моей машине.
ура
8 ответов
git checkout gh-pages
git merge master
git push origin gh-pages
Добавьте следующие 2 строки в [remote "origin"]
раздел .git/config
:
push = +refs/heads/master:refs/heads/gh-pages
push = +refs/heads/master:refs/heads/master
Каждый раз, когда вы push
это также автоматически подтолкнет мастера к gh-страницам. Я использую это для проекта jQuery Lifestream.
Не делайте того, что предлагает denbuzze выше!! Знак + (плюс) в push-уведомлении позволяет спокойно принимать обновления без переадресации. Я выяснил, каким трудным образом это может безвозвратно привести к потере работы, что приведет к висящим коммитам. Простое удаление знаков плюс делает этот подход более безопасным.
push = refs/heads/master:refs/heads/gh-pages
push = refs/heads/master:refs/heads/master
Теперь вместо принудительного обновления это вызовет предупреждение
To https://github.com/someuser/repo.git
! [rejected] master -> gh-pages (fetch first)
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/someuser/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Я добавляю дальнейшие объяснения к ответам @denbuzze и @MCSDWVL.
Если вы хотите подтолкнуть оба к master
а также gh-pages
автоматически при каждом запуске git push origin
Вы, вероятно, хотите добавить Refspec в конфигурацию git вашего репозитория.
Итак, согласно книге git-scm, вы можете добавить два RefSpecs, добавив два push
значения в файл конфигурации репо .git/config
:
[remote "origin"]
url = https://github.com/<github_user>/<repo_name>
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/master
push = refs/heads/master:refs/heads/gh-pages
Это вызовет git push origin
чтобы:
- Толчок местный
master
филиал к удаленномуmaster
ветка - Толчок местный
master
филиал к удаленномуgh-pages
ветка
по умолчанию.
Примечание: используя +
до того, как спецификация вызовет принудительный толчок к репо. Используйте это с осторожностью:
Формат refspec является необязательным
+
, с последующим<src>:<dst>
, где<src>
это шаблон для ссылок на удаленной стороне и<dst>
где эти ссылки будут написаны локально.+
говорит Git обновить ссылку, даже если это не перемотка вперед.
Мне лично нравится оборачивать это в псевдоним:
alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"
Это отражает ваш мастер gh-pages
, толкает к github, затем переключает обратно предыдущую ветку, над которой вы работали.
совершить и подтолкнуть к мастеру..
затем:
git checkout gh-pages // -> go to gh-pages branch
git rebase master // bring gh-pages up to date with master
git push origin gh-pages // commit the changes
git checkout master // return to the master branch
ИЛИ вы можете просто использовать приведенный ниже cmd, это подтолкнет вашу локальную основную ветвь к главной ветви gh-pages. git push -f origin master:gh-pages
ОБНОВЛЕНИЕ: GitHub теперь позволяет публиковать страницы из любой ветки и директории, которую вы хотите.
Мне было гораздо проще использовать gh-pages
филиал как мастер. В "мастере" нет ничего волшебного; это просто название другой ветви. В gh-страницах есть что-то волшебное, потому что именно здесь GitHub ищет index.html для обслуживания вашей страницы.
Читайте больше в моем другом ответе на эту тему.
С помощью gh-pages
так как мастер также проще, чем поддеревья, которые легче, чем зеркалирование. Вы могли бы использовать git subtree
как описано здесь или здесь: если у вас есть каталог, содержащий вашу демонстрационную версию, вы можете отправить этот каталог в gh-branch
с одной командой. Допустим, вы называете каталог gh-pages
прояснить ситуацию. Затем, после того как вы зафиксировали и отправили свои изменения в master
, запустите это, чтобы обновить gh-страницы:
git subtree push --prefix gh-pages origin gh-pages
Проблема в том, если ваши файлы в gh-pages
обратитесь к файлам в других каталогах за его пределами. Симлинки не работают, поэтому вам придется копировать файлы в каталог, который служит gh-страницами.
Если вы используете gh-pages
как мастер, эта проблема не возникнет.