Добавить, зафиксировать и отправить в 2 удаленных репозитория GitHub

1. Вкратце

Я не нахожу, как быстро добавить, зафиксировать и отправить изменения в 2 репозитория GitHub, что мне не нужно добавлять, фиксировать и отправлять изменения в 2 репозитория GitHub каждый раз отдельно.


2. Пример рабочего пространства

Локальное рабочее пространство:

SashaSource
    .git
    SashaSourceSubfolder1
    SashaSourceSubfolder2
    SashaOutput.github.io
        .git
        index.html
        SashaAnother.html

У меня есть 2 удаленных репозитория GitHub:

  • SashaSource - для SashaSource локального каталога;
  • SashaOutput.github.io - для SashaOutput.github.io локального каталога, расположение моего сайта GitHub Pages.

Я использую генератор статических сайтов Pelican. Я вношу изменения в SashaSourceSubfolder1 или SashaSourceSubfolder2 folder → делаю сборку (использую инструменты make, fabric или команду pelican content) → получаю результат в папке SashaOutput.github.io. (Я установил Пеликан, эта SashaOutput.github.io/.git папка не меняется, если я сделаю сборку).

Теперь я хочу отправить свои изменения в SashaSource и SashaOutput.github.io удаленные репозитории.


3. Фактическое поведение

Мне нужно бежать

git add . && git commit -m "Example commit description" && git push

в SashaSource репозитории, чем мне нужно запустить ту же команду для SashaOutput.github.io репозитория.


4. Ожидаемое поведение

Я печатаю в терминале любую команду → git push изменения в удаленные репозитории SashaSource и SashaOutput.github.io с одинаковым описанием фиксации, этому пользователю не нужно запускать одну и ту же команду 2 раза каждый раз.


5. Не помогло

  1. Я читал о подмодулях git , но я не знаю, как мне решить свою проблему.
  2. Я нахожу, как отправить изменения в 2 удаленных репозитория. Ставлю git remotegit add . && git commit -m "Example commit description" → получаю вывод:

    D:\SashaSource\>git push all
    To https://github.com/Kristinita/SashaOutput.github.io.git
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'https://github.com/Kristinita/SashaOutput.github.io.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.
    Counting objects: 4, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 770 bytes | 0 bytes/s, done.
    Total 4 (delta 3), reused 0 (delta 0)
    remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
    To https://github.com/Kristinita/SashaSource
       dc36727..3e5d63b  master -> master
    

    Мои изменения переносятся в 1 удаленный репозиторий. Я думаю, что мне нужно добавить и зафиксировать изменения в SashaOutput.github.io перед отправкой, но я не знаю, как это сделать.

  3. Я прочитал другой Stack Overflow вопросы о передаче в 2 или более репозиториев, но я не нашел в нем, как пользователь может добавлять и фиксировать изменения в 2 репозиториях.

  4. Я не понимаю, как я могу написать сценарий ожидаемого поведения в моей Windows. Описание коммита - это переменная, как ее использовать в скрипте?


6. Не предлагать

  1. Мне нужен отдельный репозиторий для вывода SashaOutput.github.io, потому что страницы GitHub не поддерживают исходный код для Pelican и должны находиться в каталоге вывода в корне репозитория. Пожалуйста, не предлагайте использовать 1 удаленный репозиторий GitHub для моего сайта, а не 2.
  2. Пожалуйста, не предлагайте, что мне нужно использовать Jekyll.

7. Окружающая среда

Операционная система и версия:
Windows 10 Enterprise LTSB 64-разрядная RU
git:
версия 2.12.0.windows.1


person Саша Черных    schedule 23.03.2017    source источник
comment
Напишите сценарий (или псевдоним), который автоматизирует эту работу.   -  person LeGEC    schedule 23.03.2017
comment
Вы действительно используете -m "message" аргумент командной строки? или вы действительно набираете сообщение о фиксации в редакторе, открытом с помощью git?   -  person LeGEC    schedule 23.03.2017
comment
К вашему сведению, я обнаружил, что проще всего было использовать, например, Трэвису запустить CI-сборку на обновлениях исходного репо и отправить только выходной каталог в репозиторий GHP. Это означает, что в исходном репозитории нет сгенерированных файлов, а в репозитории GHP нет исходных файлов. См., Например, github.com/textbook/textbook.github.io-source, мой собственный Пеликан сайт; Я создал платформу, которую вы можете использовать для разветвления: github.com/textbook/pelican_scaffold   -  person jonrsharpe    schedule 23.03.2017
comment
@LeGEC: я использую аргумент -m "message" в командной строке. Спасибо.   -  person Саша Черных    schedule 23.03.2017
comment
@jonrsharpe: спасибо за ответ. Вы отправляете свои изменения в исходный репозиторий и не нуждаетесь в отправке изменений в репозиторий сайта? Правильно ли я понял? // Если я правильно понял, это хорошо, но У меня проблема с CSS и JavaScript для отдельных страниц. Мне нужно изменить мой Makefile используйте инструмент Windows. Travis CI не поддерживает Windows, AppVeyor не поддерживает сценарии UNIX, а я не знаю Linux. Спасибо.   -  person Саша Черных    schedule 23.03.2017
comment
Правильно, я отправляю изменения в исходное репо, что запускает сборку. Сборка запускает пеликан и отправляет результат в репозиторий сайта. Я предполагаю, что вы могли бы сделать что-то подобное с AppVeyor, я никогда не пробовал. Вы можете начать с предложенного @LeGEC, написав его локально, а затем использовать его для перехода к CI.   -  person jonrsharpe    schedule 23.03.2017


Ответы (1)


Решение для пользователей Windows.


1. Ожидаемое поведение

Сценарий в разделе 3 добавляет, фиксирует и отправляет изменения в удаленный исходный репозиторий (рассматриваемый SashaSource), затем добавляет, фиксирует и отправляет изменения в удаленный выходной репозиторий (рассматриваемый SashaOutput.github.io). Для сообщения фиксации для обоих репозиториев будет установлена ​​переменная (%SASHAMESSAGE% в ответе).


2. Установить сообщение фиксации

Распечатайте в предпочитаемом вами терминале:

SET SASHAMESSAGE=[Test] Sasha Princess of the Universe!
  • SASHAMESSAGE - переменная для сообщения фиксации;
  • [Test] Sasha Princess of the Universe! - пример сообщения фиксации.

3. Пакетный файл

Создайте файл с расширением bat, например, GitPush2Repositories.bat:

git add .
git commit -m "%SASHAMESSAGE%"
git push
cd SashaOutput.github.io
git add .
git commit -m "%SASHAMESSAGE%"
git push
  • SashaOutput.github.io - ваша выходная папка.

4. Запустить пакет

Откройте терминал в исходной папке (SashaSource в вопросе) → распечатайте в терминале:

"D:\SashaBatch\GitPush2Repositories.bat"
  • D:\SashaBatch\GitPush2Repositories.bat - путь к вашему bat файлу.

Вы должны добиться ожидаемого поведения.


5. Дополнительные ссылки

person Саша Черных    schedule 23.03.2017