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.
- Ubuntu/Debian
sudo apt update && sudo apt install clang-format-11
- Fedora/OpenSUSE
dnf install clang-format-11
- MacPorts
port install llvm-11 # use `clang-format-11`
- Homebrew
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
master
branch
git fetch origin master
- If you have local changes (staged or unstaged), commit them or stash them.
git status
should 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
master
branch. If you haven't updated your local branch in a while, it is likely that you will have to fix conflicts.
git merge fedf53148fd4f0f5387b40f34fd8de6401446bde
- Apply
clang-format-11
to files modified since branching off frommaster
git diff $(git merge-base origin/master HEAD) --name-only -- "*.cpp" "*.h" ".hpp" ".hxx" | xargs clang-format-11 -i
where origin
refers to the git@gitlab.nektar.info:nektar/nektar.git
remote. You may have named it in a different way, .e.g upstream
.
Important: Use clang-format version 11. On some platforms the name of the executable may differ; for example MacPorts installations should use the command clang-format-mp-11
.
- 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.