How to fix conflicts due to the clang-format reformatting of the Nektar++ codebase
MR !1359 (merged) modifies the way source code is formatted. In practice, it modifies allm the Nektar++ source code files to apply the new standard code layout.
If your Merge Request is based on changes made before commit , theses changes will conflict with the reformatting on the
master branch. To fix these conflicts, you can follow the procedure below. If your changes are based on commit or child commit, you can ignore this issue.
First things first, you'll need
clang-format version 11.
sudo apt update && sudo apt install clang-format-11
dnf install clang-format-11
port install llvm-11 # use `clang-format-11`
brew install clang-format@11
Now, conflicts due to formatting can be fixed with:
- Make sure you are not currently running any merge operation
git merge --abort
- Fetch the latest changes on the upstream
git fetch origin master
- If you have local changes (staged or unstaged), commit them or stash them.
git statusshould print something close to
nothing added to commit [but untracked files present (use "git add" to track)]
- Merge the last commit before the reformatting branch was merged in the
masterbranch. If you haven't updated your local branch in a while, it is likely that you will have to fix conflicts.
git merge fedf53148fd4f0f5387b40f34fd8de6401446bde
clang-format-11to files modified since branching off from
git diff $(git merge-base origin/master HEAD) --name-only -- "*.cpp" "*.h" ".hpp" ".hxx" | xargs clang-format-11 -i
origin refers to the
email@example.com:nektar/nektar.git remote. You may have named it in a different way, .e.g
Important: Use clang-format version 11. On some platforms the name of the executable may differ; for example MacPorts installations should use the command
- Stage and commit the changes
git commit -am "[formatting] Apply clang-format-11"
- Merge the reformat commit into your branch, marking your version as the correct one in case of conflicting changes
git merge 6a3e03cf6 -s recursive -Xours
You branch is now up to date with the state of the
master branch right after the reformatting was introduced. If your branch is still conflicting with the
master branch, it is because your local changes conflict with changes made on the
master branch after the reformatting was introduced. In other words these are normal conflicts, unrelated to the reformatting of the code base.