Github: Зеркальное отображение gh-страниц для освоения - PullRequest
67 голосов
/ 27 апреля 2011

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

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

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

Cheers

Ответы [ 8 ]

106 голосов
/ 19 сентября 2011

Добавьте следующие 2 строки в раздел [remote "origin"] в .git/config:

push = +refs/heads/master:refs/heads/gh-pages
push = +refs/heads/master:refs/heads/master

Каждый раз, когда вы push, он также автоматически передает мастер на gh-страницы. Я использую это для проекта jQuery Lifestream .

66 голосов
/ 29 апреля 2011
git checkout gh-pages
git merge master
git push origin gh-pages
27 голосов
/ 08 апреля 2014

Не делайте того, что предлагает 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.
9 голосов
/ 20 января 2015

Я добавляю дальнейшие объяснения к @ denbuzze и @ MCSDWVL ответам.

Если вы хотите автоматически нажимать на master и gh-pages каждый раз, когда вы запускаете git push origin, вы, вероятно, захотите добавить Refspec в конфигурацию git вашего репозитория.

Итак, согласно git-scm book , вы можете добавить два 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 обновить ссылку, даже если это не перемотка вперед.

2 голосов
/ 21 января 2017

ИЛИ вы можете просто использовать приведенный ниже cmd, это переведет вашу локальную ветку master в ветку gh-pagesgit push -f origin master:gh-pages

2 голосов
/ 17 мая 2014

Мне лично нравится оборачивать это в псевдоним:

alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"

Это отражает вашего мастера на gh-pages, толкает на github, затем переключает обратно предыдущую ветку, над которой вы работали.

1 голос
/ 04 июня 2015

ОБНОВЛЕНИЕ : GitHub теперь позволяет публиковать страницы из любой ветки и директории, которую вы хотите.


Мне было намного проще использоватьgh-pages ветка как мастер.В «мастере» нет ничего волшебного;это просто название другой ветви. - это нечто магическое в gh-страницах, потому что именно здесь GitHub ищет index.html для обслуживания вашей страницы.

Подробнее читайте в мой другой ответ по этой теме .

Использование gh-pages в качестве мастера также проще, чем поддеревьев, которые проще, чем зеркалирование.Вы можете использовать git subtree, как описано здесь или здесь : если у вас есть каталог, содержащий вашу демонстрационную версию, вы можете переместить этот каталог в gh-branch с помощью одной команды.Допустим, вы называете каталог gh-pages, чтобы прояснить ситуацию.Затем, после того как вы зафиксировали и передали свои изменения в master, запустите следующую команду, чтобы обновить gh-pages:

git subtree push --prefix gh-pages origin gh-pages

Проблема в том, что ваши файлы в gh-pages ссылаются на файлы в других каталогах вне его,Симлинки не работают, поэтому вам придется копировать файлы в каталог, который служит gh-страницами.

Если вы используете gh-pages в качестве мастера, эта проблема не возникнет.

1 голос
/ 19 августа 2014

commit и push to master.

затем:

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
...