]>
git.madduck.net Git - code/myrepos.git/blobdiff - mrconfig.git-fake-bare
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
# An example of how to add a new revision control system type to mr.
# An example of how to add a new revision control system type to mr.
-# git fake bare repositories have a detached workspace. This file adds
+# git fake bare repositories have a detached workspace. One potential
+# application is storing dotfiles in git, keeping them checked out in
+# one $HOME, but checked into different git repositories. This file adds
# support for them, separate from the normal git support.
# To make mr use this file, add a line like this inside the [DEFAULT]
# section of your ~/.mrconfig
#include = cat /path/to/mrconfig.git-fake-bare
# support for them, separate from the normal git support.
# To make mr use this file, add a line like this inside the [DEFAULT]
# section of your ~/.mrconfig
#include = cat /path/to/mrconfig.git-fake-bare
+lib =
+ # git doesn't have an easy way to check out such a repo, so
+ # do it by hand
+ git_fake_bare_checkout() {
+ set -x
+ url="$1"
+ repo="$2"
+ worktree="${3%%/}/"
+ git clone --no-checkout "$url" "$repo"
+ cd "$repo"
+ git read-tree HEAD
+ git config core.worktree "$worktree"
+ git checkout-index -a --prefix="$worktree" || true
+ mv .git/* .
+ rmdir .git
+ }
+
git_fake_bare_test =
test -d "$MR_REPO"/refs/heads && test -d "$MR_REPO"/refs/tags &&
test -d "$MR_REPO"/objects && test -f "$MR_REPO"/config &&
git_fake_bare_test =
test -d "$MR_REPO"/refs/heads && test -d "$MR_REPO"/refs/tags &&
test -d "$MR_REPO"/objects && test -f "$MR_REPO"/config &&
mr -c "$MR_CONFIG" config "`pwd`" \
lib="GIT_WORK_TREE=$work_tree; export GIT_WORK_TREE"
echo "Registering git url: $url in $MR_CONFIG (with worktree $worktree)"
mr -c "$MR_CONFIG" config "`pwd`" \
lib="GIT_WORK_TREE=$work_tree; export GIT_WORK_TREE"
echo "Registering git url: $url in $MR_CONFIG (with worktree $worktree)"
- mr -c "$MR_CONFIG" config "`pwd`" \
- checkout=" \
- git clone --no-checkout $url $MR_REPO && \
- cd $MR_REPO && \
- git read-tree HEAD && \
- git checkout-index -a --prefix='$work_tree' || true; \
- git config core.worktree '$worktree' && \
- mv .git/* . && \
- rmdir .git"
+ mr -c "$MR_CONFIG" config "`pwd`" checkout="git_fake_bare_checkout '$url' '$MR_REPO' '$worktree'"