blob: 67e820e62cdca7ab12d4b2f18741d2d40d182bf5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#! /bin/sh
#
# usage: git-clone-into repository directory
#
set -euf
tempdir() {
set -- `tempnam $1`
mkdir $1
echo $1
}
## [prefix] -> tempnam
tempnam() {
until set -- $1 ${1-}`candnam` && ! test -e $2; do :; done
echo $2
}
candnam() {
uuidgen 2>/dev/null || date +%s%N
}
tmp_remote=`candnam`
tmp_branch=`candnam`
subdir=$2
if test -e $subdir; then
echo 'You are made of stupid!' >&2
exit 23
fi
tmpdir=`tempdir /tmp/tempdir-`
#trap "test -d $tmpdir && rm -vfR $tmpdir" EXIT
trap "test -d $tmpdir && rm -fR $tmpdir" EXIT
repository="${1-$repository}"
git clone "$repository" $tmpdir
(cd $tmpdir
subdir="$subdir" git filter-branch --tree-filter '
if ! test -d $subdir; then
mkdir -p $subdir
git ls-tree -z --name-only $GIT_COMMIT | xargs -I. --null mv . $subdir
fi
'
git checkout -b $tmp_branch)
git remote add $tmp_remote $tmpdir
git fetch $tmp_remote
git merge $tmp_remote/$tmp_branch # TODO configurable branch
|