Github: Зеркальное отображение gh-страниц для освоения

Я разрабатываю плагин jQuery, который размещается на GitHub. Там есть демо, которое я вручную копирую и отправляю в ветку gh-pagesчто я хотел бы сделать, так это когда я нажимаю изменения master он автоматически выдвигается к gh-pagesили, по крайней мере, установка, где они отражаются.

Я уже видел этот вопрос, но не уверен, что он действительно отвечает на мой вопрос в отношении этих требований:

  1. Я использую Tower, я не против использования терминала (Mac) для внесения изменений в конфигурацию, если решение работает с этим графическим интерфейсом.
  2. Я хочу, чтобы это "зеркальное отображение" было только для определенных репозиториев, но не для всех из них на моей машине.

ура

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 чтобы:

  1. Толчок местный master филиал к удаленному master ветка
  2. Толчок местный 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 как мастер, эта проблема не возникнет.

Другие вопросы по тегам