Hi
I can't find a neat way to "git reset --hard" a subdirectory of a
checkout without reading in directories or files which are excluded by a
sparse checkout. This has been asked on StackOverflow in greater detail,
but the "right" answer is still missing:
http://stackoverflow.com/q/15404535/946850
The options I see are:
- git checkout . (will restore excluded directories)
- git reset --hard (won't accept a path argument)
- git diff | patch -R (awkward)
What's the proper way to do this in Git?
The script below illustrates the problem. The proper command should be
inserted below the "How to make files ..." comment -- the current
command "git checkout -- a" will restore the file a/c/ac which is
supposed to be excluded by the sparse checkout. Note that I do not want
to explicitly restore a/a and a/b, I only "know" a and want to restore
everything below. And I also don't "know" b, or which other directories
reside on the same level as a.
Thank you for your help.
Cheers
Kirill
#!/bin/sh
rm -rf repo; git init repo; cd repo
for f in a b; do
for g in a b c; do
mkdir -p $f/$g
touch $f/$g/$f$g
git add $f/$g
git commit -m "added $f/$g"
done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f
rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status
# How to make files a/* reappear without changing b and without
recreating a/c?
git checkout -- a
echo "After checkout:"
git status
find * -type f
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html