{"id":1047,"date":"2018-02-15T00:23:57","date_gmt":"2018-02-15T00:23:57","guid":{"rendered":"http:\/\/blog.datentraeger.li\/?p=1047"},"modified":"2018-02-15T00:25:01","modified_gmt":"2018-02-15T00:25:01","slug":"git-hooks","status":"publish","type":"post","link":"https:\/\/blog.datentraeger.li\/?p=1047","title":{"rendered":"git hooks&#8230;"},"content":{"rendered":"<p>Es ist jetzt schon bald <a href=\"https:\/\/blog.datentraeger.li\/?p=339\" target=\"_blank\" rel=\"noopener\">ganze 7 Jahre her<\/a>, als ich das letzte mal von git-hooks geschrieben hab, aber grad eben finde ich es wieder geil \ud83d\ude09<\/p>\n<p>Da ich meine dotfiles ja in git verwalte, ist es nat\u00fcrlich angenehm, wenn z.B. die Xdefaults neu gesourct werden, wenn das File sich \u00e4ndert. Easy mit git hooks (eigentlich sind nur die letzten Zeilen interessant&#8230;und ja, ich weiss, man verwendet heutzutage .Xresources&#8230;):<\/p>\n<pre class=\"lang:default decode:true \">#!\/usr\/bin\/env bash\r\n# GPL foo.li systeme + software\r\n\r\n# git hook to run a command after `git pull` if a specified file was changed\r\n# Run `chmod +x post-merge` to make it executable then put it into `.git\/hooks\/`.\r\n\r\nchanged_files=\"$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)\"\r\n\r\ncheck_run() {\r\n        echo \"$changed_files\" | grep --quiet \"$1\" &amp;&amp; eval \"$2\"\r\n}\r\n\r\n# usage\r\n# run `xrdb .Xdefaults` if Xdefaults changed\r\ncheck_run Xdefaults \"xrdb ~\/.Xdefaults\"\r\n# reload i3 config if changed\r\ncheck_run config\/i3\/config \"i3-msg reload\"<\/pre>\n<p>Das File Xdefaults hier liegt \u00fcbrigens im git-root und ist ein symlink nach ~\/.Xdefaults. Zugegebenermassen &#8211; i3 (ebenfalls ein symlink) hab ich noch nicht getestet, aber ich nehme an, dass auch das problemlos funktioniert und i3 die Config neu ladet, wenn sie sich \u00e4ndert&#8230;<\/p>\n<p>Damit git-hooks auch bei einem clonen des Repos mitbeachtet werden, muss aber noch &#8220;Hand angelegt werden&#8221; (bisher hab ich&#8217;s einfach via scp kopiert, aber das kanns ja auch nicht sein). Eine kurze Recherche hat <a href=\"https:\/\/stackoverflow.com\/questions\/427207\/can-git-hook-scripts-be-managed-along-with-the-repository\" target=\"_blank\" rel=\"noopener\">zwar L\u00f6sungen<\/a> ergeben, aber auch das hab ich bisher nicht angeschaut&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"Es ist jetzt schon bald ganze 7 Jahre her, als ich das letzte mal von git-hooks geschrieben hab, aber grad eben finde ich es wieder geil \ud83d\ude09 Da ich meine dotfiles ja in git verwalte, ist es nat\u00fcrlich angenehm, wenn z.B. die Xdefaults neu gesourct werden, wenn das File sich&hellip;\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-1047","post","type-post","status-publish","format-standard","hentry","category-git"],"_links":{"self":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/1047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1047"}],"version-history":[{"count":9,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/1047\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/1047\/revisions\/1056"}],"wp:attachment":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}