index.md - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       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)