Formatting conflicts
On May 28th, 2024, we introduced automated formatting with ruff-format
and pre-commit
. This changed almost every file in the project.
If you forked or branched off before these changes and now try to synchronize your fork/branch with princeton-nlp/SWE-agent:main
, you will
see a lot of merge conflicts.
To solve this, you need to apply the same formatting to your code. Here's how you can do it.
First let's add the official remote (if it exists, you've probably already added it and you can ignore the warning).
git remote add upstream https://github.com/princeton-nlp/SWE-agent.git
git fetch upstream
Now, you need the updated pyproject.toml
and .pre-commit-config.yaml
files.
We can get them from princeton-nlp/SWE-agent:main
:
git checkout upstream/main -- .pre-commit-config.yaml pyproject.toml
git commit -m "Update formatting instructions" --no-verify
Let's assume that your changes are on branch FEATURE_BRANCH
, for example, if you've committed to main
:
export FEATURE_BRANCH="main"
Next we create a copy of this branch (so we don't further modify it):
git branch "${FEATURE_BRANCH}" "${FEATURE_BRANCH}_REBASED"
And now comes the tricky bit: We rebase your changes on top of upstream/mean
, while applying
the formatting fixes at every step:
git rebase upstream/main "${FEATURE_BRANCH}_REBASED" \
-Xtheirs \
--exec 'git reset --soft HEAD^; pre-commit run; pipx run ruff check --fix --unsafe-fixes; git add -u; git commit -C HEAD@{1} --no-verify'
Understanding the last command
Here's what is happening:
git rebase upstream/main "${FEATURE_BRANCH}_REBASED"
applies every commit from"${FEATURE_BRANCH}_REBASED"
on top ofupstream/main
.-Xtheirs
tells git to always take your changes for merge conflicts (rather than the format changes).- After every commit, the command from
--exec
is being called.git reset --soft HEAD^
undos thegit commit
action (while leaving the changes staged),- then we apply the formatting, and
- finally we commit the formatted changes again.
Still merge conflicts?
It's possible that there are non-formatting-related merge conflicts that you are encountering.
In this case, git rebase
will stop every time it cannot resolve the conflict.
Simply fix the merge conflicts as you would normally do (edit the file, commit once done),
and then run git rebase --continue
.
You can now open a PR from ${FEATURE_BRANCH}_REBASED
or make it your new default branch.
-
Something broken? Report bug
-
Something unclear? Ask question