Random stuff, testing things, and so on.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
1.1 KiB

# Sparse-Checkout
This code tries to simulate the way `sparse-checkout` works in recent Git
versions.
## The Problem
The problem is that the behaviour of `sparse-checkout` changed somewhere in the
line. In most recent versions, `sparse-checkout init`, on a clone, will hide
every single file; older versions, though, will refuse to init the
`sparse-checkout` if that would leave the current directory empty.
## Solution
The idea is to push `update-index --skip-worktree` to tag a file as "being
ignored" (Git will always assume the file checksum is still the same as in the
index, no matter what you do with the file). Then, when a user wants to
re-enable the directory/file, use `update-index --no-skip-worktree`.
Although that sounds simple, there an issue that Git deals only with files and
not directories, and trying to disable/enable the file in the index requires to
pass the files; for example, on the re-enable, how to find the names of the
files we just deleted?
That requires a combination of use with `ls-files --cached [pattern]`. This way
we can get all the files that need to be pushed back/ignored, reading directly
from the Git information.