Полная переработка вопроса
Поэтому я думал, что объясняю этот вопрос очень просто и прямо, но кажется, что я слишком упростил, так что вот все дополнительные детали. Надеюсь, это поможет всем увидеть, что это тоже не дубликат.
У меня есть репозиторий (проект), в котором я хотел бы автоматизировать процесс отправки коммитов из одного каталога ветки в другую ветку; что-то я еще не сталкивался с SO.
Вот мой проект с полной структурой:
[PROJECT MASTER BRANCH]
|- gh-pages (directory)
|- css (directory)
|- index.html (file)
|- readme.md (file)
[PROJECT gh-pages BRANCH]
|- (empty at the moment)
Что я надеюсь сделать, так это создать хук, который будет автоматически обрабатывать изменения в моем каталоге gh-pages из ветки master, и копировать/клонировать/заменять их (в зависимости от того, какой термин использовать правильно) в ветку gh-pages, проекты ветка сайта. Вот пример со всеми остальными файлами:
[PROJECT MASTER BRANCH]
|- gh-pages (directory) <=== SEE UPDATE BELOW [A]
| |- css (directory)
| | |- style.css (file)
| |- index.html (file)
[PROJECT gh-pages BRANCH]
|- css (directory) <=== SEE UPDATE BELOW [B]
| |- style.css (file)
|- index.html (file)
Я совершенно новичок в этом уровне Git Hub. Обычно я просто придерживаюсь основ и никогда не использую терминал/оболочку. Итак, чтобы прояснить, что я надеюсь сделать, я хотел бы:
- Работать нужно только в [Master Branch]. Все изменения, которые мне нужно внести в [Ветвь gh-pages], я делаю в каталоге gh-pages [Главной ветки].
- Предпочтительно выполнить это, добавив простой файл, который кажется перехватчиком после получения?
Вот некоторый код хука после получения, который я пытался использовать (я сделал его, изучив несколько вещей), но он не работает:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
git checkout gh-pages
git checkout master -- gh-pages
git add gh-pages
git commit -m "Updating project website from 'master' branch."
fi
done
ПРИМЕЧАНИЕ
Как упоминалось в моем комментарии: это не дубликат. Это не вопрос о том, как нажать, а скорее о том, как добавить другие команды, которые автоматически запускаются, когда я делаю обычное нажатие. Эти команды будут выполнять дополнительную работу, упомянутую в моем OP.
ОБНОВЛЕНИЕ
Я добавил эти стрелки в части кода, на которые я ссылаюсь ниже: ‹===
[A] Здесь должно произойти то, что Git должен рекурсивно читать директорию gh-pages главной ветки и копировать из нее только то, что было обновлено (или все, что проще) в ветку gh-pages.
[B] Таким образом, если каталог gh-pages в master имеет файл index.html, а папка css с файлом style.css должна копировать только эту структуру, а не сам каталог gh-pages. Ниже приведен пример плохого хука, который также копирует каталог gh-pages:
[PROJECT gh-pages BRANCH]
|- gh-pages (Directory) <=== NOT SUPPOSED TO HAPPEN
| |- css (directory)
| | |- style.css (file)
| |- index.html (file)
Кроме того, хук не должен копировать какие-либо другие файлы, кроме того, что находится внутри gh-страниц. Даже если несколько других файлов изменились в ветке master, следует скопировать только файлы каталога gh-pages.
[C] НОВЫЙ КОД - работает, но вызывает ошибку:
#!/bin/bash
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "master" == "$branch" ]; then
git fetch && git checkout gh-pages
git checkout master -- gh-pages/*
git add -A
git commit -m "Updating project website from 'master' branch."
git push -u origin gh-pages
fi
Это не сработает по двум причинам. 1) Если репо отстает от коммитов, оно не может с этим справиться, оно выдаст ошибку; если вместо извлечения используется извлечение, локальное репо стирается следующим образом:
Если я оставлю выборку, локальное репо останется таким, каким должно быть:
2) Весь каталог gh-pages по-прежнему копируется в ветку gh-pages, а не только файлы внутри него.
submodule add
. Снова клонируйте репозиторий и повторите эти шаги. (только в командной строке. GitHub Desktop — это графический интерфейс, который обертывает и запутывает то, что происходит на самом деле: он вам не нужен) 11.02.2016git submodule add
иgit config push.recurseSubmodules on-demand
. Все остальное можно сделать из графического интерфейса. Однако не из GitHub Desktop. 11.02.2016