Ответ 1
git checkout gh-pages
git merge master
git push origin gh-pages
Я разрабатываю плагин jQuery, который размещается на GitHub. В нем есть демонстрационная версия, из которой я вручную копирую и нажимаю на ветвь gh-pages
, то, что я хотел бы сделать, так это, когда я нажимаю изменение на master
, он автоматически переносится на gh-pages
, или, по крайней мере, настройку, в которой они отражаются.
Я уже видел этот question, но не уверен, действительно ли он отвечает на мой вопрос в отношении этих требований:
Приветствия
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
, он автоматически нажимает master на gh-страницы.
Я использую это для проекта jQuery Lifestream.
Не делайте то, что предлагает denbuzze выше! Знак + (плюс) в нажатом состоянии позволяет спокойно принимать немедленные обновления. Я обнаружил, что это может безвозвратно заставить работу быть потерянной, приводя к оборванным. Простое удаление плюсовых знаков делает это более безопасным.
push = refs/heads/master:refs/heads/gh-pages
push = refs/heads/master:refs/heads/master
теперь вместо того, чтобы вызвать обновление силы, это вызовет предупреждение и предложение pull
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 book, вы можете добавить два RefSpecs, добавив два значения push
в конфигурационный файл repo .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
по умолчанию.
Примечание: с помощью +
перед тем, как spec вызывает принудительное нажатие на репо. Используйте его с осторожностью:
Формат 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
UPDATE: GitHub теперь позволяет публиковать страницы из любой отрасли и каталога, который вы хотите.
Мне было гораздо легче использовать ветвь gh-pages
как master. Там нет ничего волшебного о "хозяине"; это просто другое название ветки. В 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
как мастер, эта проблема не будет возникать.
ИЛИ вы можете просто использовать приведенный ниже cmd, это приведет к тому, что ваша локальная ведущая ветвь будет связана с главной ветвью gh-pages.
git push -f origin master:gh-pages