index.md (3139B)
1 How to maintain dwm configuration and customization in git 2 ========================================================== 3 Customizations can be managed directly in git. 4 5 The concept 6 ----------- 7 By recording changes and applied patches as commits in a special branch they 8 can be rebased on top of the master branch when required. 9 10 Cloning the repository 11 ---------------------- 12 You need to have the [Git VCS](http://git-scm.com/) installed first. Then clone 13 the upstream repository locally 14 15 git clone git://git.suckless.org/dwm 16 17 Recording customizations 18 ------------------------ 19 Create a special branch where all the customizations will be kept. It doesn't 20 matter what the name is, it just needs to be something different than `master`. 21 22 git branch my_dwm 23 24 Now switch to the new branch. This will do nothing at the moment as the 25 branches are the same. 26 27 git checkout my_dwm 28 29 Now make your changes. If you want to apply one of the [contributed 30 patches](//dwm.suckless.org/patches/) you can use the `git apply` command 31 32 git apply some_patch.diff 33 34 Note that many patches make changes `config.def.h` instead of `config.h`. 35 Either move those changes also to `config.h`, or add `rm config.h` to the 36 `clean` target in the `Makefile`. 37 38 Then record the changes as commits 39 40 # tell git to add the changes in the given file(s) to be recorded 41 git add some_file.ext 42 # git will ask you to provide a message describing your changes, 43 # while showing a diff of what's being commited. 44 git commit -v 45 46 ### Experimenting with different combinations of customizations 47 48 If you plan on experimenting with different combinations of customizations it 49 might be easier to record the commits in separate feature branches by first 50 creating and checking out a branch and then recording the changes as commits. 51 Having patches in different branches also helps to keep their dependencies 52 transparent by creating branches based on other patch branches. 53 54 Then merge the selected combination of changes into your branch 55 56 git merge some_feature_branch 57 git merge other_feature_branch 58 59 If you some conflicts occur, resolve them and then record the changes and 60 commit the result. `git mergetool` can help with resolving the conflicts. 61 62 Updating customizations after new release 63 ----------------------------------------- 64 When the time comes to update your customizations after a new release of dwm or 65 when the dwm repository contains a commit fixing some bug, you first pull the 66 new upstream changes into the master branch 67 68 git checkout master 69 git pull 70 71 Then rebase your customization branch on top of the master branch 72 73 git checkout my_dwm 74 git rebase --preserve-merges master 75 76 The `--preserve-merges` option ensures that you don't have to resolve conflicts 77 which you have already resolved while performing merges again. 78 79 In case there are merge conflicts anyway, resolve them (possibly with the help 80 of `git mergetool`), then record them as resolved and let the rebase continue 81 82 git add resolved_file.ext 83 git rebase --continue 84 85 If you want to give up, you can always abort the rebase 86 87 git rebase --abort 88 89 Author 90 ------ 91 * [Ondřej Grover](mailto:ondrej.grover@gmail.com)