Setting it to 'true' enables multi threaded checkout. Default is false. --- Documentation/config.txt | 8 ++++++++ cache.h | 1 + config.c | 5 +++++ environment.c | 3 +++ unpack-trees.c | 3 +++ 5 files changed, 20 insertions(+), 0 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 21ea165..22ac76b 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -422,6 +422,14 @@ relatively high IO latencies. With this set to 'true', git will do the index comparison to the filesystem data in parallel, allowing overlapping IO's. +core.threadedcheckout:: + Enable parallel checkout for operations like 'git checkout' ++ +This can speed up operations like 'git clone' and 'git checkout' especially +on filesystems like NFS that have relatively high IO latencies. With this +set to 'true', git will write the checked out files to disk in parallel, +allowing overlapping IO's. + alias.*:: Command aliases for the linkgit:git[1] command wrapper - e.g. after defining "alias.last = cat-file commit HEAD", the invocation diff --git a/cache.h b/cache.h index 231c06d..0777597 100644 --- a/cache.h +++ b/cache.h @@ -512,6 +512,7 @@ extern size_t delta_base_cache_limit; extern int auto_crlf; extern int fsync_object_files; extern int core_preload_index; +extern int core_threaded_checkout; enum safe_crlf { SAFE_CRLF_FALSE = 0, diff --git a/config.c b/config.c index 790405a..819693e 100644 --- a/config.c +++ b/config.c @@ -495,6 +495,11 @@ static int git_default_core_config(const char *var, const char *value) return 0; } + if (!strcmp(var, "core.threadedcheckout")) { + core_threaded_checkout = git_config_bool(var, value); + return 0; + } + /* Add other config variables here and to Documentation/config.txt. */ return 0; } diff --git a/environment.c b/environment.c index e278bce..2450b65 100644 --- a/environment.c +++ b/environment.c @@ -46,6 +46,9 @@ enum rebase_setup_type autorebase = AUTOREBASE_NEVER; /* Parallel index stat data preload? */ int core_preload_index = 0; +/* Parallel checkout? */ +int core_threaded_checkout = 0; + /* This is set by setup_git_dir_gently() and/or git_default_config() */ char *git_work_tree_cfg; static char *work_tree; diff --git a/unpack-trees.c b/unpack-trees.c index 30b9862..635b7dc 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -165,6 +165,9 @@ static int threaded_checkout(struct index_state *index, int update, struct progr struct thread_data data[MAX_PARALLEL]; int errs = 0; + if (!core_threaded_checkout) + return 0; + threads = index->cache_nr / THREAD_COST; if (threads > MAX_PARALLEL) threads = MAX_PARALLEL; -- 1.6.0.4.1116.gc5d7 -- 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