開始されたコミットを変更することになっているgithubアクションを設定しました。これは好きです
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Do some computations
run: |
# Create some new files that should be added to the commit
dvc repro
- name: Commit Results
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add .
git commit --amend --no-edit
git Push --force
アクションの実行中にブランチにアップデートがない場合は、これは正常に機能します。いくつかの小さなオフセットで実行されていて、結果を組み合わせるために次の操作を実行しようとすると、より複雑になります。
- name: Commit Results
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
CIREVISION=$(git rev-parse HEAD)
# stash changes
git add .
git stash
# update for new commit
git pull --rebase
# start rebase only on the commit of this CI run
GIT_SEQUENCE_EDITOR="sed -i -re '0,/pick/{s/pick/edit/}'" git rebase -i "$CIREVISION^"
# update files and commit
git stash pop
git add .
git commit --amend --no-edit
# finish rebase <- this fails with a merge conflict
git rebase --continue
git Push --force
単一の変更ファイルの場合metrics.json
が失敗する
Auto-merging metrics.json
CONFLICT (content): Merge conflict in metrics.json
Rebasing (2/3)
error: could not apply ABCD123... TEST01
hint: Resolve all conflicts manually, mark them as resolved with
git status | grep both | awk '{print $3}' | xargs git checkout --ours .
のようなものを使用しようとしましたが、マージされないが、常に現在のブランチに存在するファイルのバージョンを受け入れましたが、マージの競合を解決できませんでした。
私はGitHub CIを一緒に使用しています cml.dev バージョン管理には、研究データの完全な再現性を可能にしています。パラメータファイルを更新します。更新されたパラメータでコミットするが、古いメトリックが実行できないため、元のコミットを変更する必要があります。
私はそれが持っている結果を知っています、リポジトリへのプッシュを強制的にそして私は危険を冒しても構わないと思っています。
私は通常ソフトウェア開発のためにgitを使い、既存のGIT構造体を変更していないので、私は通常これをやりたくないので。
必要なのは、アップストリーム変更に関係なく現在の状態をコミットすることがfetch
とreset
:
BRANCH=experiment
git fetch --all
git reset --mixed Origin/$BRANCH
git add .
git commit -m "a new experiment"
git Push Origin HEAD:$BRANCH
_
当然Push
は失敗する可能性があるため、全体がリトライループにあるべきです。これにより、CIの怖いが--force
プッシュします。