#git #github-actions #git-submodules
Вопрос:
Я хочу обновить свои подмодули репозитория, перейти к их соответствующим вилкам, а затем зафиксировать изменения в моем основном репозитории и нажать его.
Вот мое действие на github yml:
--- name: Auto Update Submodules # yamllint disable-line rule:truthy on: push: # schedule: # # Run every Wednesday at 4 AM. # - cron: "0 4 * * WED" jobs: auto-update: runs-on: ubuntu-latest steps: # Create private key to access private repos. - uses: webfactory/ssh-agent@v0.5.3 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - uses: actions/checkout@v2 with: ref: '15.0' submodules: true ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} persist-credentials: true - name: Update submodules from origin run: | git submodule update --recursive --remote --merge --init --rebase - name: Update from upstream and commit run: | git config --global user.name 'bot' git config --global user.email 'bot@users.noreply.github.com' cd src/odoo git checkout 15.0 git remote add upstream git@github.com:odoo/odoo.git git fetch upstream 15.0 git rebase upstream/15.0 git push cd ../enterprise git checkout 15.0 git remote add upstream git@github.com:odoo/enterprise.git git fetch upstream 15.0 git rebase upstream/15.0 git push cd ../.. git add . git commit -m "[SUB] odoo/enterprise" || echo "No changes to commit" git push origin 15.0
Это то, что я получаю, когда срабатывает действие:
git submodule update --recursive --remote --merge --init --rebase shell: /usr/bin/bash -e {0} env: SSH_AUTH_SOCK: /tmp/ssh-VxFJiDzXtsoG/agent.2130 SSH_AGENT_PID: 2131 Rebasing (1/1) warning: Cannot merge binary files: stock_barcode/static/img/barcodes_demo.pdf (HEAD vs. 944ae3a4 ([I18N] Update translation terms from Transifex)) CONFLICT (add/add): Merge conflict in worksheet/i18n/sv.po Auto-merging worksheet/i18n/sv.po CONFLICT (add/add): Merge conflict in worksheet/i18n/de.po Auto-merging worksheet/i18n/de.po CONFLICT (add/add): Merge conflict in website_twitter_wall/i18n/zh_TW.po Auto-merging website_twitter_wall/i18n/zh_TW.po CONFLICT (add/add): Merge conflict in website_twitter_wall/i18n/vi.po Auto-merging website_twitter_wall/i18n/vi.po CONFLICT (add/add): Merge conflict in website_twitter_wall/i18n/th.po Auto-merging website_twitter_wall/i18n/th.po ... ... Error: Process completed with exit code 2.
Если я получаю изменения только из восходящего потока и использую их для фиксации в основном репо, он обновляет его. Но затем дальнейший рабочий процесс прерывается, потому что он не может найти эти коммиты (которые поступают непосредственно из вышестоящих репозиториев).
Я попытался обновить свои подмодули из восходящего потока локально (с моего компьютера), и это работает нормально. Никаких конфликтов, никаких ошибок, с (даже не нужно заставлять нажимать, потому что у меня нет никаких пользовательских изменений):
git fetch upstream 15.0 git rebase upstream/15.0 git push
src/odoo
и src/enterprise
являются путями к подмодулям.
Что я делаю не так с действиями github, что он ведет себя по-другому?
Может ли быть так, что он получает только поверхностную копию, и из-за этого все ломается?
Комментарии:
1. Я не присматривался к этому внимательно, но
git submodule update --remote --merge --rebase
определенно ошибаюсь:--merge
и--rebase
здесь есть эксклюзивные варианты. Я думаю, что последнее переопределяет, так что вы получаете--rebase
поведение, но я бы не хотел на это рассчитывать.2. (Между тем: да, вероятно, здесь речь идет о мелком клоне. Учитывая ваш собственный ответ, который я сейчас просмотрел, вы, вероятно, могли бы сделать это
--merge --rebase
, полностью отказавшись от него.)3. На самом деле сначала я пытался обновить без явного обновления подмодуля, как в моем вопросе, но у меня была та же проблема.
4. И да, я думаю, вы правы, я должен использовать перебазирование или слияние, но не то и другое вместе.
Ответ №1:
Решил эту проблему, обновив подмодули отдельно (как обычные репозитории), а затем извлекая принудительные изменения из подмодулей:
--- name: Auto Update Submodules # yamllint disable-line rule:truthy on: push: # schedule: # # Run every Wednesday at 4 AM. # - cron: "0 4 * * WED" jobs: auto-update: runs-on: ubuntu-latest steps: # Create private key to access private repos. - uses: webfactory/ssh-agent@v0.5.3 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - uses: actions/checkout@v2 with: repository: my/odoo ref: '15.0' ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} # Sync submodules (separately). - name: Sync odoo repo run: | git remote add upstream git@github.com:odoo/odoo.git git fetch upstream 15.0 git rebase upstream/15.0 git push - uses: actions/checkout@v2 with: repository: my/enterprise ref: '15.0' ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Sync enterprise repo run: | git remote add upstream git@github.com:odoo/enterprise.git git fetch upstream 15.0 git rebase upstream/15.0 git push # Update synced submodules on main repo. - uses: actions/checkout@v2 with: ref: '15.0' submodules: true ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Update submodules from origin run: | git submodule update --recursive --remote --merge --init --rebase - name: Commit updated submodules. run: | git config --global user.name 'bot' git config --global user.email 'bot@users.noreply.github.com' git add . git commit -m "[SUB] odoo/enterprise" || echo "No changes to commit" git push origin 15.0