действия github: обновление подмодулей из вышестоящего потока с помощью перебазирования

#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