git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 01/11] sparse-checkout: create builtin with 'list' subcommand

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Sep 19, 2019, 14:43 UTC
Message-ID
<dbaf3de88e036fb23d7760582030726f32581a4d.1568904188.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.316.v2.git.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>

The sparse-checkout feature is mostly hidden to users, as its only documentation is supplementary information in the docs for 'git read-tree'. In addition, users need to know how to edit the .git/info/sparse-checkout file with the right patterns, then run the appropriate 'git read-tree -mu HEAD' command. Keeping the working directory in sync with the sparse-checkout file requires care.

Begin an effort to make the sparse-checkout feature a porcelain feature by creating a new 'git sparse-checkout' builtin. This builtin will be the preferred mechanism for manipulating the sparse-checkout file and syncing the working directory.

The `$GIT_DIR/info/sparse-checkout` file defines the skip- worktree reference bitmap. When Git updates the working directory, it updates the skip-worktree bits in the index based on this file and removes or restores files in the working copy to match.

The documentation provided is adapted from the "git read-tree" documentation with a few edits for clarity in the new context. Extra sections are added to hint toward a future change to a more restricted pattern set.

Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 .gitignore                            |  1 +
 Documentation/git-read-tree.txt       |  2 +-
 Documentation/git-sparse-checkout.txt | 90 +++++++++++++++++++++++++++
 Makefile                              |  1 +
 builtin.h                             |  1 +
 builtin/sparse-checkout.c             | 86 +++++++++++++++++++++++++
 git.c                                 |  1 +
 t/t1091-sparse-checkout-builtin.sh    | 51 +++++++++++++++
 8 files changed, 232 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/git-sparse-checkout.txt
 create mode 100644 builtin/sparse-checkout.c
 create mode 100755 t/t1091-sparse-checkout-builtin.sh
diff --git a/.gitignore b/.gitignore
index 4470d7cfc0..5ccc3d00dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -156,6 +156,7 @@
 /git-show-branch
 /git-show-index
 /git-show-ref
+/git-sparse-checkout
 /git-stage
 /git-stash
 /git-status
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.txt
index d271842608..da33f84f33 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.txt
@@ -436,7 +436,7 @@ support.
 SEE ALSO
 --------
 linkgit:git-write-tree[1]; linkgit:git-ls-files[1];
-linkgit:gitignore[5]
+linkgit:gitignore[5]; linkgit:git-sparse-checkout[1];
 
 GIT
 ---
diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.txt
new file mode 100644
index 0000000000..cdef451642
--- /dev/null
+++ b/Documentation/git-sparse-checkout.txt
@@ -0,0 +1,90 @@
+git-sparse-checkout(1)
+=======================
+
+NAME
+----
+git-sparse-checkout - Initialize and modify the sparse-checkout
+configuration, which reduces the checkout to a set of directories
+given by a list of prefixes.
+
+
+SYNOPSIS
+--------
+[verse]
+'git sparse-checkout <subcommand> [options]'
+
+
+DESCRIPTION
+-----------
+
+Initialize and modify the sparse-checkout configuration, which reduces
+the checkout to a set of directories given by a list of prefixes.
+
+
+COMMANDS
+--------
+'list'::
+	Provide a list of the contents in the sparse-checkout file.
+
+
+SPARSE CHECKOUT
+----------------
+
+"Sparse checkout" allows populating the working directory sparsely.
+It uses the skip-worktree bit (see linkgit:git-update-index[1]) to tell
+Git whether a file in the working directory is worth looking at. If
+the skip-worktree bit is set, then the file is ignored in the working
+directory. Git will not populate the contents of those files, which
+makes a sparse checkout helpful when working in a repository with many
+files, but only a few are important to the current user.
+
+The `$GIT_DIR/info/sparse-checkout` file is used to define the
+skip-worktree reference bitmap. When Git updates the working
+directory, it resets the skip-worktree bit in the index based on this
+file. If an entry
+matches a pattern in this file, skip-worktree will not be set on
+that entry. Otherwise, skip-worktree will be set.
+
+Then it compares the new skip-worktree value with the previous one. If
+skip-worktree turns from set to unset, it will add the corresponding
+file back. If it turns from unset to set, that file will be removed.
+
+## FULL PATTERN SET
+
+By default, the sparse-checkout file uses the same syntax as `.gitignore`
+files.
+
+While `$GIT_DIR/info/sparse-checkout` is usually used to specify what
+files are included, you can also specify what files are _not_ included,
+using negative patterns. For example, to remove the file `unwanted`:
+
+----------------
+/*
+!unwanted
+----------------
+
+Another tricky thing is fully repopulating the working directory when you
+no longer want sparse checkout. You cannot just disable "sparse
+checkout" because skip-worktree bits are still in the index and your working
+directory is still sparsely populated. You should re-populate the working
+directory with the `$GIT_DIR/info/sparse-checkout` file content as
+follows:
+
+----------------
+/*
+----------------
+
+Then you can disable sparse checkout. Sparse checkout support in 'git
+read-tree' and similar commands is disabled by default. You need to
+set `core.sparseCheckout` to `true` in order to have sparse checkout
+support.
+
+SEE ALSO
+--------
+
+linkgit:git-read-tree[1]
+linkgit:gitignore[5]
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index f58bf14c7b..f3322b75dd 100644
--- a/Makefile
+++ b/Makefile
@@ -1121,6 +1121,7 @@ BUILTIN_OBJS += builtin/shortlog.o
 BUILTIN_OBJS += builtin/show-branch.o
 BUILTIN_OBJS += builtin/show-index.o
 BUILTIN_OBJS += builtin/show-ref.o
+BUILTIN_OBJS += builtin/sparse-checkout.o
 BUILTIN_OBJS += builtin/stash.o
 BUILTIN_OBJS += builtin/stripspace.o
 BUILTIN_OBJS += builtin/submodule--helper.o
diff --git a/builtin.h b/builtin.h
index ec7e0954c4..d517068faa 100644
--- a/builtin.h
+++ b/builtin.h
@@ -223,6 +223,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix);
 int cmd_show(int argc, const char **argv, const char *prefix);
 int cmd_show_branch(int argc, const char **argv, const char *prefix);
 int cmd_show_index(int argc, const char **argv, const char *prefix);
+int cmd_sparse_checkout(int argc, const char **argv, const char *prefix);
 int cmd_status(int argc, const char **argv, const char *prefix);
 int cmd_stash(int argc, const char **argv, const char *prefix);
 int cmd_stripspace(int argc, const char **argv, const char *prefix);
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
new file mode 100644
index 0000000000..eed9625a05
--- /dev/null
+++ b/builtin/sparse-checkout.c
@@ -0,0 +1,86 @@
+#include "builtin.h"
+#include "config.h"
+#include "dir.h"
+#include "parse-options.h"
+#include "pathspec.h"
+#include "repository.h"
+#include "run-command.h"
+#include "strbuf.h"
+
+static char const * const builtin_sparse_checkout_usage[] = {
+	N_("git sparse-checkout [list]"),
+	NULL
+};
+
+static char *get_sparse_checkout_filename(void)
+{
+	return git_pathdup("info/sparse-checkout");
+}
+
+static void write_patterns_to_file(FILE *fp, struct pattern_list *pl)
+{
+	int i;
+
+	for (i = 0; i < pl->nr; i++) {
+		struct path_pattern *p = pl->patterns[i];
+
+		if (p->flags & PATTERN_FLAG_NEGATIVE)
+			fprintf(fp, "!");
+
+		fprintf(fp, "%s", p->pattern);
+
+		if (p->flags & PATTERN_FLAG_MUSTBEDIR)
+			fprintf(fp, "/");
+
+		fprintf(fp, "\n");
+	}
+}
+
+static int sparse_checkout_list(int argc, const char **argv)
+{
+	struct pattern_list pl;
+	char *sparse_filename;
+	int res;
+
+	memset(&pl, 0, sizeof(pl));
+
+	sparse_filename = get_sparse_checkout_filename();
+	res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL);
+	free(sparse_filename);
+
+	if (res < 0) {
+		warning(_("this worktree is not sparse (sparse-checkout file may not exist)"));
+		return 0;
+	}
+
+	write_patterns_to_file(stdout, &pl);
+	clear_pattern_list(&pl);
+
+	return 0;
+}
+
+int cmd_sparse_checkout(int argc, const char **argv, const char *prefix)
+{
+	static struct option builtin_sparse_checkout_options[] = {
+		OPT_END(),
+	};
+
+	if (argc == 2 && !strcmp(argv[1], "-h"))
+		usage_with_options(builtin_sparse_checkout_usage,
+				   builtin_sparse_checkout_options);
+
+	argc = parse_options(argc, argv, prefix,
+			     builtin_sparse_checkout_options,
+			     builtin_sparse_checkout_usage,
+			     PARSE_OPT_STOP_AT_NON_OPTION);
+
+	git_config(git_default_config, NULL);
+
+	if (argc > 0) {
+		if (!strcmp(argv[0], "list"))
+			return sparse_checkout_list(argc, argv);
+	}
+
+	usage_with_options(builtin_sparse_checkout_usage,
+			   builtin_sparse_checkout_options);
+}
diff --git a/git.c b/git.c
index c2eec470c9..e775fbad42 100644
--- a/git.c
+++ b/git.c
@@ -576,6 +576,7 @@ static struct cmd_struct commands[] = {
 	{ "show-branch", cmd_show_branch, RUN_SETUP },
 	{ "show-index", cmd_show_index },
 	{ "show-ref", cmd_show_ref, RUN_SETUP },
+	{ "sparse-checkout", cmd_sparse_checkout, RUN_SETUP | NEED_WORK_TREE },
 	{ "stage", cmd_add, RUN_SETUP | NEED_WORK_TREE },
 	/*
 	 * NEEDSWORK: Until the builtin stash is thoroughly robust and no
diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
new file mode 100755
index 0000000000..46e7b2dded
--- /dev/null
+++ b/t/t1091-sparse-checkout-builtin.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+test_description='sparse checkout builtin tests'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	git init repo &&
+	(
+		cd repo &&
+		echo "initial" >a &&
+		mkdir folder1 folder2 deep &&
+		mkdir deep/deeper1 deep/deeper2 &&
+		mkdir deep/deeper1/deepest &&
+		cp a folder1 &&
+		cp a folder2 &&
+		cp a deep &&
+		cp a deep/deeper1 &&
+		cp a deep/deeper2 &&
+		cp a deep/deeper1/deepest &&
+		git add . &&
+		git commit -m "initial commit"
+	)
+'
+
+test_expect_success 'git sparse-checkout list (empty)' '
+	git -C repo sparse-checkout list >list 2>err &&
+	test_line_count = 0 list &&
+	test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err
+'
+
+test_expect_success 'git sparse-checkout list (populated)' '
+	test_when_finished rm -f repo/.git/info/sparse-checkout &&
+	cat >repo/.git/info/sparse-checkout <<-EOF &&
+		/folder1/*
+		/deep/
+		**/a
+		!*bin*
+	EOF
+	git -C repo sparse-checkout list >list &&
+	cat >expect <<-EOF &&
+		/folder1/*
+		/deep/
+		**/a
+		!*bin*
+	EOF
+	test_cmp expect list
+'
+
+test_done
+
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Elijah Newren
Message 35 of 196 in “[RFC] New sparse-checkout builtin and "cone" mode”
  1. 0/9 [RFC] New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Aug 20, 2019
  2. 1/9 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Aug 20, 2019
  3. Elijah NewrenAug 23, 2019
  4. 4/9 sparse-checkout: 'add' subcommandDerrick Stolee via GitGitGadget, Aug 20, 2019
  5. Elijah NewrenAug 23, 2019
  6. Derrick StoleeSep 18, 2019
  7. Elijah NewrenSep 18, 2019
  8. Derrick StoleeSep 18, 2019
  9. 2/9 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Aug 20, 2019
  10. Elijah NewrenAug 23, 2019
  11. Derrick StoleeSep 11, 2019
  12. Derrick StoleeSep 11, 2019
  13. 3/9 clone: add --sparse modeDerrick Stolee via GitGitGadget, Aug 20, 2019
  14. Elijah NewrenAug 23, 2019
  15. Derrick StoleeSep 18, 2019
  16. 5/9 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Aug 20, 2019
  17. Elijah NewrenAug 23, 2019
  18. 6/9 trace2:experiment: clear_ce_flags_1Jeff Hostetler via GitGitGadget, Aug 20, 2019
  19. Elijah NewrenAug 24, 2019
  20. 9/9 sparse-checkout: init and add in cone modeDerrick Stolee via GitGitGadget, Aug 20, 2019
  21. Elijah NewrenAug 24, 2019
  22. 8/9 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Aug 20, 2019
  23. Elijah NewrenAug 24, 2019
  24. 7/9 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Aug 20, 2019
  25. Elijah NewrenAug 24, 2019
  26. Elijah NewrenAug 21, 2019
  27. Derrick StoleeAug 22, 2019
  28. Derrick StoleeAug 22, 2019
  29. Elijah NewrenAug 24, 2019
  30. Derrick StoleeAug 26, 2019
  31. Elijah NewrenAug 26, 2019
  32. Derrick StoleeAug 26, 2019
  33. Eric SunshineSep 2, 2019
  34. 00/11 New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Sep 19, 2019
  35. 01/11 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Sep 19, 2019
  36. Elijah NewrenOct 5, 2019
  37. 02/11 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Sep 19, 2019
  38. Elijah NewrenOct 5, 2019
  39. 03/11 clone: add --sparse modeDerrick Stolee via GitGitGadget, Sep 19, 2019
  40. Elijah NewrenOct 5, 2019
  41. Derrick StoleeOct 7, 2019
  42. 05/11 sparse-checkout: add '--stdin' option to set subcommandDerrick Stolee via GitGitGadget, Sep 19, 2019
  43. 04/11 sparse-checkout: 'set' subcommandDerrick Stolee via GitGitGadget, Sep 19, 2019
  44. Elijah NewrenOct 5, 2019
  45. Elijah NewrenOct 6, 2019
  46. Derrick StoleeOct 7, 2019
  47. Elijah NewrenOct 11, 2019
  48. 07/11 trace2: add region in clear_ce_flagsJeff Hostetler via GitGitGadget, Sep 19, 2019
  49. Elijah NewrenOct 6, 2019
  50. 08/11 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Sep 19, 2019
  51. Elijah NewrenOct 6, 2019
  52. Derrick StoleeOct 7, 2019
  53. 09/11 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Sep 19, 2019
  54. Derrick StoleeSep 19, 2019
  55. Derrick StoleeSep 20, 2019
  56. 06/11 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Sep 19, 2019
  57. Elijah NewrenOct 6, 2019
  58. Derrick StoleeOct 7, 2019
  59. 11/11 unpack-trees: hash less in cone modeDerrick Stolee via GitGitGadget, Sep 19, 2019
  60. 10/11 sparse-checkout: init and set in cone modeDerrick Stolee via GitGitGadget, Sep 19, 2019
  61. Derrick StoleeOct 1, 2019
  62. Elijah NewrenOct 1, 2019
  63. Derrick StoleeOct 1, 2019
  64. Junio C HamanoOct 3, 2019
  65. 00/17 New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Oct 7, 2019
  66. 01/17 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Oct 7, 2019
  67. Elijah NewrenOct 11, 2019
  68. 03/17 clone: add --sparse modeDerrick Stolee via GitGitGadget, Oct 7, 2019
  69. Elijah NewrenOct 11, 2019
  70. 04/17 sparse-checkout: 'set' subcommandDerrick Stolee via GitGitGadget, Oct 7, 2019
  71. Elijah NewrenOct 11, 2019
  72. Elijah NewrenOct 11, 2019
  73. 06/17 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Oct 7, 2019
  74. 02/17 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Oct 7, 2019
  75. Elijah NewrenOct 11, 2019
  76. Derrick StoleeOct 14, 2019
  77. 05/17 sparse-checkout: add '--stdin' option to set subcommandDerrick Stolee via GitGitGadget, Oct 7, 2019
  78. Elijah NewrenOct 11, 2019
  79. Derrick StoleeOct 14, 2019
  80. 09/17 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Oct 7, 2019
  81. 10/17 sparse-checkout: init and set in cone modeDerrick Stolee via GitGitGadget, Oct 7, 2019
  82. 07/17 trace2: add region in clear_ce_flagsJeff Hostetler via GitGitGadget, Oct 7, 2019
  83. 13/17 read-tree: show progress by defaultDerrick Stolee via GitGitGadget, Oct 7, 2019
  84. Elijah NewrenOct 12, 2019
  85. Derrick StoleeOct 14, 2019
  86. 11/17 unpack-trees: hash less in cone modeDerrick Stolee via GitGitGadget, Oct 7, 2019
  87. 08/17 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Oct 7, 2019
  88. 12/17 unpack-trees: add progress to clear_ce_flags()Derrick Stolee via GitGitGadget, Oct 7, 2019
  89. 15/17 sparse-checkout: update working directory in-processDerrick Stolee via GitGitGadget, Oct 7, 2019
  90. Elijah NewrenOct 12, 2019
  91. Derrick StoleeOct 14, 2019
  92. 14/17 sparse-checkout: sanitize for nested foldersDerrick Stolee via GitGitGadget, Oct 7, 2019
  93. 16/17 sparse-checkout: write using lockfileDerrick Stolee via GitGitGadget, Oct 7, 2019
  94. Elijah NewrenOct 12, 2019
  95. Derrick StoleeOct 14, 2019
  96. 17/17 sparse-checkout: cone mode should not interact with .gitignoreDerrick Stolee via GitGitGadget, Oct 7, 2019
  97. Elijah NewrenOct 12, 2019
  98. Elijah NewrenOct 12, 2019
  99. 00/17 New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Oct 15, 2019
  100. 02/17 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Oct 15, 2019
  101. 01/17 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Oct 15, 2019
  102. Elijah NewrenOct 16, 2019
  103. Derrick StoleeOct 21, 2019
  104. SZEDER GáborOct 18, 2019
  105. Derrick StoleeOct 21, 2019
  106. 03/17 clone: add --sparse modeDerrick Stolee via GitGitGadget, Oct 15, 2019
  107. 04/17 sparse-checkout: 'set' subcommandDerrick Stolee via GitGitGadget, Oct 15, 2019
  108. 09/17 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Oct 15, 2019
  109. SZEDER GáborOct 18, 2019
  110. Derrick StoleeOct 21, 2019
  111. 08/17 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Oct 15, 2019
  112. 06/17 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Oct 15, 2019
  113. SZEDER GáborOct 18, 2019
  114. 05/17 sparse-checkout: add '--stdin' option to set subcommandDerrick Stolee via GitGitGadget, Oct 15, 2019
  115. 07/17 trace2: add region in clear_ce_flagsJeff Hostetler via GitGitGadget, Oct 15, 2019
  116. 11/17 unpack-trees: hash less in cone modeDerrick Stolee via GitGitGadget, Oct 15, 2019
  117. 17/17 sparse-checkout: cone mode should not interact with .gitignoreDerrick Stolee via GitGitGadget, Oct 15, 2019
  118. 10/17 sparse-checkout: init and set in cone modeDerrick Stolee via GitGitGadget, Oct 15, 2019
  119. 16/17 sparse-checkout: write using lockfileDerrick Stolee via GitGitGadget, Oct 15, 2019
  120. 15/17 sparse-checkout: update working directory in-processDerrick Stolee via GitGitGadget, Oct 15, 2019
  121. SZEDER GáborOct 18, 2019
  122. SZEDER GáborOct 18, 2019
  123. Derrick StoleeOct 21, 2019
  124. 14/17 sparse-checkout: sanitize for nested foldersDerrick Stolee via GitGitGadget, Oct 15, 2019
  125. 12/17 unpack-trees: add progress to clear_ce_flags()Derrick Stolee via GitGitGadget, Oct 15, 2019
  126. 13/17 read-tree: show progress by defaultDerrick Stolee via GitGitGadget, Oct 15, 2019
  127. Elijah NewrenOct 16, 2019
  128. Jon SimonsOct 17, 2019
  129. Derrick StoleeOct 21, 2019
  130. 00/17 New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Oct 21, 2019
  131. 02/17 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Oct 21, 2019
  132. SZEDER GáborNov 19, 2019
  133. SZEDER GáborNov 20, 2019
  134. SZEDER GáborNov 21, 2019
  135. SZEDER GáborNov 21, 2019
  136. Derrick StoleeNov 21, 2019
  137. SZEDER GáborNov 21, 2019
  138. Derrick StoleeNov 21, 2019
  139. SZEDER GáborNov 21, 2019
  140. Elijah NewrenNov 21, 2019
  141. Derrick StoleeNov 21, 2019
  142. 04/17 sparse-checkout: 'set' subcommandDerrick Stolee via GitGitGadget, Oct 21, 2019
  143. SZEDER GáborNov 19, 2019
  144. Derrick StoleeNov 21, 2019
  145. SZEDER GáborNov 21, 2019
  146. 03/17 clone: add --sparse modeDerrick Stolee via GitGitGadget, Oct 21, 2019
  147. 01/17 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Oct 21, 2019
  148. SZEDER GáborNov 19, 2019
  149. 05/17 sparse-checkout: add '--stdin' option to set subcommandDerrick Stolee via GitGitGadget, Oct 21, 2019
  150. SZEDER GáborNov 21, 2019
  151. Derrick StoleeNov 21, 2019
  152. 09/17 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Oct 21, 2019
  153. 11/17 unpack-trees: hash less in cone modeDerrick Stolee via GitGitGadget, Oct 21, 2019
  154. 08/17 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Oct 21, 2019
  155. SZEDER GáborNov 19, 2019
  156. 07/17 trace2: add region in clear_ce_flagsJeff Hostetler via GitGitGadget, Oct 21, 2019
  157. 12/17 unpack-trees: add progress to clear_ce_flags()Derrick Stolee via GitGitGadget, Oct 21, 2019
  158. 10/17 sparse-checkout: init and set in cone modeDerrick Stolee via GitGitGadget, Oct 21, 2019
  159. SZEDER GáborNov 19, 2019
  160. Derrick StoleeNov 21, 2019
  161. 16/17 sparse-checkout: write using lockfileDerrick Stolee via GitGitGadget, Oct 21, 2019
  162. 15/17 sparse-checkout: update working directory in-processDerrick Stolee via GitGitGadget, Oct 21, 2019
  163. SZEDER GáborNov 19, 2019
  164. 14/17 sparse-checkout: sanitize for nested foldersDerrick Stolee via GitGitGadget, Oct 21, 2019
  165. 17/17 sparse-checkout: cone mode should not interact with .gitignoreDerrick Stolee via GitGitGadget, Oct 21, 2019
  166. 06/17 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Oct 21, 2019
  167. SZEDER GáborNov 19, 2019
  168. Derrick StoleeNov 21, 2019
  169. 13/17 read-tree: show progress by defaultDerrick Stolee via GitGitGadget, Oct 21, 2019
  170. Phillip WoodOct 21, 2019
  171. Derrick StoleeOct 21, 2019
  172. Junio C HamanoOct 23, 2019
  173. Derrick StoleeOct 23, 2019
  174. Phillip WoodOct 24, 2019
  175. Phillip WoodOct 24, 2019
  176. Junio C HamanoOct 23, 2019
  177. 00/19 New sparse-checkout builtin and "cone" modeDerrick Stolee via GitGitGadget, Nov 21, 2019
  178. 02/19 sparse-checkout: create 'init' subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  179. 01/19 sparse-checkout: create builtin with 'list' subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  180. 03/19 clone: add --sparse modeDerrick Stolee via GitGitGadget, Nov 21, 2019
  181. 04/19 sparse-checkout: 'set' subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  182. 09/19 sparse-checkout: use hashmaps for cone patternsDerrick Stolee via GitGitGadget, Nov 21, 2019
  183. 08/19 sparse-checkout: add 'cone' modeDerrick Stolee via GitGitGadget, Nov 21, 2019
  184. 06/19 sparse-checkout: create 'disable' subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  185. 05/19 sparse-checkout: add '--stdin' option to set subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  186. 07/19 trace2: add region in clear_ce_flagsJeff Hostetler via GitGitGadget, Nov 21, 2019
  187. 10/19 sparse-checkout: init and set in cone modeDerrick Stolee via GitGitGadget, Nov 21, 2019
  188. 11/19 unpack-trees: hash less in cone modeDerrick Stolee via GitGitGadget, Nov 21, 2019
  189. 13/19 sparse-checkout: sanitize for nested foldersDerrick Stolee via GitGitGadget, Nov 21, 2019
  190. 12/19 unpack-trees: add progress to clear_ce_flags()Derrick Stolee via GitGitGadget, Nov 21, 2019
  191. 17/19 sparse-checkout: cone mode should not interact with .gitignoreDerrick Stolee via GitGitGadget, Nov 21, 2019
  192. 14/19 sparse-checkout: update working directory in-processDerrick Stolee via GitGitGadget, Nov 21, 2019
  193. 16/19 sparse-checkout: write using lockfileDerrick Stolee via GitGitGadget, Nov 21, 2019
  194. 15/19 sparse-checkout: use in-process update for disable subcommandDerrick Stolee via GitGitGadget, Nov 21, 2019
  195. 18/19 sparse-checkout: update working directory in-process for 'init'Derrick Stolee via GitGitGadget, Nov 21, 2019
  196. 19/19 sparse-checkout: check for dirty statusDerrick Stolee via GitGitGadget, Nov 21, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.