diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Version 0.6.5 released 28 Aug 2020
+
+* Removed data files in extra.
+* Add git post-update script as a ByteString literal in
+  Data.FileStore.Git (Justus Adam).  This will facilitate
+  making gitit independent of data files.
+
 Version 0.6.4 released 21 Nov 2019
 
 * Data.File.Generic now exports PolyDiff(..) as well as Diff,
diff --git a/Data/FileStore/Git.hs b/Data/FileStore/Git.hs
--- a/Data/FileStore/Git.hs
+++ b/Data/FileStore/Git.hs
@@ -34,7 +34,6 @@
 import System.FilePath ((</>), splitFileName)
 import System.Directory (createDirectoryIfMissing, doesDirectoryExist, executable, getPermissions, setPermissions)
 import Control.Exception (throwIO)
-import Paths_filestore
 import qualified Control.Exception as E
 
 -- | Return a filestore implemented using the git distributed revision control system
@@ -79,12 +78,10 @@
      then do
        -- Add the post-update hook, so that changes made remotely via git
        -- will be reflected in the working directory.
-       postupdatepath <- getDataFileName $ "extra" </> "post-update"
-       postupdatecontents <- B.readFile postupdatepath
        let postupdatedir = repo </> ".git" </> "hooks"
        createDirectoryIfMissing True postupdatedir
        let postupdate = postupdatedir </> "post-update"
-       B.writeFile postupdate postupdatecontents
+       B.writeFile postupdate postUpdate
        perms <- getPermissions postupdate
        setPermissions postupdate (perms {executable = True})
        -- Set up repo to allow push to current branch
@@ -369,3 +366,93 @@
 
 pcErr :: forall a. String -> IO a
 pcErr = throwIO . UnknownError . (++) "filestore parseChanges "
+
+postUpdate :: B.ByteString
+postUpdate =
+  B.pack 
+    "#!/bin/bash\n\
+    \#\n\
+    \# This hook does two things:\n\
+    \#\n\
+    \#  1. update the \"info\" files that allow the list of references to be\n\
+    \#     queries over dumb transports such as http\n\
+    \#\n\
+    \#  2. if this repository looks like it is a non-bare repository, and\n\
+    \#     the checked-out branch is pushed to, then update the working copy.\n\
+    \#     This makes \"push\" function somewhat similarly to darcs and bzr.\n\
+    \#\n\
+    \# To enable this hook, make this file executable by \"chmod +x post-update\".\n\
+    \\n\
+    \git-update-server-info\n\
+    \\n\
+    \is_bare=$(git-config --get --bool core.bare)\n\
+    \\n\
+    \if [ -z \"$is_bare\" ]\n\
+    \then\n\
+    \    # for compatibility's sake, guess\n\
+    \    git_dir_full=$(cd $GIT_DIR; pwd)\n\
+    \    case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac\n\
+    \fi\n\
+    \\n\
+    \update_wc() {\n\
+    \    ref=$1\n\
+    \    echo \"Push to checked out branch $ref\" >&2\n\
+    \    if [ ! -f $GIT_DIR/logs/HEAD ]\n\
+    \    then\n\
+    \        echo \"E:push to non-bare repository requires a HEAD reflog\" >&2\n\
+    \        exit 1\n\
+    \    fi\n\
+    \    if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)\n\
+    \    then\n\
+    \        wc_dirty=0\n\
+    \    else\n\
+    \        echo \"W:unstaged changes found in working copy\" >&2\n\
+    \        wc_dirty=1\n\
+    \        desc=\"working copy\"\n\
+    \    fi\n\
+    \    if git diff-index --cached HEAD@{1} >/dev/null\n\
+    \    then\n\
+    \        index_dirty=0\n\
+    \    else\n\
+    \        echo \"W:uncommitted, staged changes found\" >&2\n\
+    \        index_dirty=1\n\
+    \        if [ -n \"$desc\" ]\n\
+    \        then\n\
+    \            desc=\"$desc and index\"\n\
+    \        else\n\
+    \            desc=\"index\"\n\
+    \        fi\n\
+    \    fi\n\
+    \    if [ \"$wc_dirty\" -ne 0 -o \"$index_dirty\" -ne 0 ]\n\
+    \    then\n\
+    \        new=$(git rev-parse HEAD)\n\
+    \        echo \"W:stashing dirty $desc - see git-stash(1)\" >&2\n\
+    \        ( trap 'echo trapped $$; git symbolic-ref HEAD \"'\"$ref\"'\"' 2 3 13 15 ERR EXIT\n\
+    \        git-update-ref --no-deref HEAD HEAD@{1}\n\
+    \        cd $GIT_WORK_TREE\n\
+    \        git stash save \"dirty $desc before update to $new\";\n\
+    \        git-symbolic-ref HEAD \"$ref\"\n\
+    \        )\n\
+    \    fi\n\
+    \\n\
+    \    # eye candy - show the WC updates :)\n\
+    \    echo \"Updating working copy\" >&2\n\
+    \    (cd $GIT_WORK_TREE\n\
+    \    git-diff-index -R --name-status HEAD >&2\n\
+    \    git-reset --hard HEAD)\n\
+    \}\n\
+    \\n\
+    \if [ \"$is_bare\" = \"false\" ]\n\
+    \then\n\
+    \    active_branch=`git-symbolic-ref HEAD`\n\
+    \    export GIT_DIR=$(cd $GIT_DIR; pwd)\n\
+    \    GIT_WORK_TREE=${GIT_WORK_TREE-..}\n\
+    \    for ref\n\
+    \    do\n\
+    \        if [ \"$ref\" = \"$active_branch\" ]\n\
+    \        then\n\
+    \            update_wc $ref\n\
+    \        fi\n\
+    \    done\n\
+    \fi"
+
diff --git a/extra/post-update b/extra/post-update
deleted file mode 100644
--- a/extra/post-update
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-#
-# This hook does two things:
-#
-#  1. update the "info" files that allow the list of references to be
-#     queries over dumb transports such as http
-#
-#  2. if this repository looks like it is a non-bare repository, and
-#     the checked-out branch is pushed to, then update the working copy.
-#     This makes "push" function somewhat similarly to darcs and bzr.
-#
-# To enable this hook, make this file executable by "chmod +x post-update".
-
-git-update-server-info
-
-is_bare=$(git-config --get --bool core.bare)
-
-if [ -z "$is_bare" ]
-then
-	# for compatibility's sake, guess
-	git_dir_full=$(cd $GIT_DIR; pwd)
-	case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
-fi
-
-update_wc() {
-	ref=$1
-	echo "Push to checked out branch $ref" >&2
-	if [ ! -f $GIT_DIR/logs/HEAD ]
-	then
-		echo "E:push to non-bare repository requires a HEAD reflog" >&2
-		exit 1
-	fi
-	if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
-	then
-		wc_dirty=0
-	else
-		echo "W:unstaged changes found in working copy" >&2
-		wc_dirty=1
-		desc="working copy"
-	fi
-	if git diff-index --cached HEAD@{1} >/dev/null
-	then
-		index_dirty=0
-	else
-		echo "W:uncommitted, staged changes found" >&2
-		index_dirty=1
-		if [ -n "$desc" ]
-		then
-			desc="$desc and index"
-		else
-			desc="index"
-		fi
-	fi
-	if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
-	then
-		new=$(git rev-parse HEAD)
-		echo "W:stashing dirty $desc - see git-stash(1)" >&2
-		( trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
-		git-update-ref --no-deref HEAD HEAD@{1}
-		cd $GIT_WORK_TREE
-		git stash save "dirty $desc before update to $new";
-		git-symbolic-ref HEAD "$ref"
-		)
-	fi
-
-	# eye candy - show the WC updates :)
-	echo "Updating working copy" >&2
-	(cd $GIT_WORK_TREE
-	git-diff-index -R --name-status HEAD >&2
-	git-reset --hard HEAD)
-}
-
-if [ "$is_bare" = "false" ]
-then
-	active_branch=`git-symbolic-ref HEAD`
-	export GIT_DIR=$(cd $GIT_DIR; pwd)
-	GIT_WORK_TREE=${GIT_WORK_TREE-..}
-	for ref
-	do
-		if [ "$ref" = "$active_branch" ]
-		then
-			update_wc $ref
-		fi
-	done
-fi
diff --git a/filestore.cabal b/filestore.cabal
--- a/filestore.cabal
+++ b/filestore.cabal
@@ -1,5 +1,5 @@
 Name:                filestore
-Version:             0.6.4
+Version:             0.6.5
 Cabal-Version:       >= 1.10
 Build-type:          Simple
 Synopsis:            Interface for versioning file stores.
@@ -15,7 +15,7 @@
 Maintainer:          jgm@berkeley.edu
 Bug-Reports:         https://github.com/jgm/filestore/issues
 
-Data-Files:          extra/post-update, CHANGES
+Extra-Source-Files:  CHANGES
 
 Source-repository head
   type:          git
@@ -36,22 +36,26 @@
                          directory >= 1.0 && < 1.4,
                          parsec >= 2 && < 3.2,
                          process >= 1.0 && < 1.7,
-                         time >= 1.5 && < 1.10,
+                         time >= 1.5 && < 1.11,
                          xml >= 1.3 && < 1.4,
                          split >= 0.1 && < 0.3,
                          Diff >= 0.4 && < 0.5,
                          old-locale >= 1.0 && < 1.1
 
-    Exposed-modules:     Data.FileStore, Data.FileStore.Types, Data.FileStore.Git, Data.FileStore.Darcs, Data.FileStore.Mercurial,
-                         -- Data.FileStore.Sqlite3,
-                         Data.FileStore.Utils, Data.FileStore.Generic
-    Other-modules:       Paths_filestore,
-                         Data.FileStore.DarcsXml,
-                         Data.FileStore.MercurialCommandServer,
+    Exposed-modules:     Data.FileStore
+                         Data.FileStore.Types
+                         Data.FileStore.Git
+                         Data.FileStore.Darcs
+                         Data.FileStore.Mercurial
+                         -- Data.FileStore.Sqlite3
+                         Data.FileStore.Utils
+                         Data.FileStore.Generic
+    Other-modules:       Data.FileStore.DarcsXml
+                         Data.FileStore.MercurialCommandServer
                          Data.FileStore.Compat.Locale
-    Default-Extensions:  FlexibleInstances, CPP
+    Default-Extensions:  FlexibleInstances
     Default-Language:    Haskell98
-    if flag(maxcount) 
+    if flag(maxcount)
         cpp-options: -DUSE_MAXCOUNT
     if impl(ghc >= 6.12)
       Ghc-Options:       -Wall -fno-warn-unused-do-bind
