sparse-checkout: 'set' subcommand
[git] / Documentation / git-sparse-checkout.txt
1 git-sparse-checkout(1)
2 ======================
3
4 NAME
5 ----
6 git-sparse-checkout - Initialize and modify the sparse-checkout
7 configuration, which reduces the checkout to a set of paths
8 given by a list of atterns.
9
10
11 SYNOPSIS
12 --------
13 [verse]
14 'git sparse-checkout <subcommand> [options]'
15
16
17 DESCRIPTION
18 -----------
19
20 Initialize and modify the sparse-checkout configuration, which reduces
21 the checkout to a set of paths given by a list of patterns.
22
23 THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR, AND THE BEHAVIOR OF OTHER
24 COMMANDS IN THE PRESENCE OF SPARSE-CHECKOUTS, WILL LIKELY CHANGE IN
25 THE FUTURE.
26
27
28 COMMANDS
29 --------
30 'list'::
31         Provide a list of the contents in the sparse-checkout file.
32
33 'init'::
34         Enable the `core.sparseCheckout` setting. If the
35         sparse-checkout file does not exist, then populate it with
36         patterns that match every file in the root directory and
37         no other directories, then will remove all directories tracked
38         by Git. Add patterns to the sparse-checkout file to
39         repopulate the working directory.
40 +
41 To avoid interfering with other worktrees, it first enables the
42 `extensions.worktreeConfig` setting and makes sure to set the
43 `core.sparseCheckout` setting in the worktree-specific config file.
44
45 'set'::
46         Write a set of patterns to the sparse-checkout file, as given as
47         a list of arguments following the 'set' subcommand. Update the
48         working directory to match the new patterns. Enable the
49         core.sparseCheckout config setting if it is not already enabled.
50
51 SPARSE CHECKOUT
52 ---------------
53
54 "Sparse checkout" allows populating the working directory sparsely.
55 It uses the skip-worktree bit (see linkgit:git-update-index[1]) to tell
56 Git whether a file in the working directory is worth looking at. If
57 the skip-worktree bit is set, then the file is ignored in the working
58 directory. Git will not populate the contents of those files, which
59 makes a sparse checkout helpful when working in a repository with many
60 files, but only a few are important to the current user.
61
62 The `$GIT_DIR/info/sparse-checkout` file is used to define the
63 skip-worktree reference bitmap. When Git updates the working
64 directory, it updates the skip-worktree bits in the index based
65 on this file. The files matching the patterns in the file will
66 appear in the working directory, and the rest will not.
67
68 ## FULL PATTERN SET
69
70 By default, the sparse-checkout file uses the same syntax as `.gitignore`
71 files.
72
73 While `$GIT_DIR/info/sparse-checkout` is usually used to specify what
74 files are included, you can also specify what files are _not_ included,
75 using negative patterns. For example, to remove the file `unwanted`:
76
77 ----------------
78 /*
79 !unwanted
80 ----------------
81
82 Another tricky thing is fully repopulating the working directory when you
83 no longer want sparse checkout. You cannot just disable "sparse
84 checkout" because skip-worktree bits are still in the index and your working
85 directory is still sparsely populated. You should re-populate the working
86 directory with the `$GIT_DIR/info/sparse-checkout` file content as
87 follows:
88
89 ----------------
90 /*
91 ----------------
92
93 Then you can disable sparse checkout. Sparse checkout support in 'git
94 checkout' and similar commands is disabled by default. You need to
95 set `core.sparseCheckout` to `true` in order to have sparse checkout
96 support.
97
98 SEE ALSO
99 --------
100
101 linkgit:git-read-tree[1]
102 linkgit:gitignore[5]
103
104 GIT
105 ---
106 Part of the linkgit:git[1] suite