Re: Document ability to disable template directory in git-init
- From
- Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
- Date
- Jul 4, 2025, 14:57 UTC
- Message-ID
- <c20e2e7b-8471-4398-9bfb-6534f8ad2b39@app.fastmail.com>
- In-Reply-To
- <boris.20250703161436@codesynthesis.com>
On Thu, Jul 3, 2025, at 16:40, Boris Kolpackov wrote:
Show 62 quoted lines
> Hello,
>
> Looking at the git-init(1) man page, there doesn't appear to be a way
> to disable copying the contents of the default template directory, other
> than passing a path pointing to an empty directory.
>
> However, if one passes an empty path, for example with the --template
> option, then git does not complain and does not copy anything:
>
> git init --template=
>
> Looking at the code, this undocumented (AFAICS) behavior appears to
> be there at least from git 2.1:
>
>
> static void copy_templates(const char *template_dir)
> {
> ...
>
> if (!template_dir)
> template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
> if (!template_dir)
> template_dir = init_db_template_dir;
> if (!template_dir)
> template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
> if (!template_dir[0])
> return;
>
>
> For reference, the corresponding code in 2.50:
>
>
> static void copy_templates(const char *option_template)
> {
> const char *template_dir = get_template_dir(option_template);
>
> ...
>
> if (!template_dir || !*template_dir)
> return;
>
>
> I would like to suggest that we document this behavior so that it can
> be relied upon. The motivation for omitting the default template are
> repositories created by tools, such as package managers, for the sole
> purpose of fetching some information from remotes. In this case all
> the stuff copied from the template (such as hooks) is an unnecessary
> waste of time and space.
>
> Looking at the git-init(1) man page, the TEMPLATE DIRECTORY section
> seems like the natural place to document this semantics. For example,
> we could add the following sentence after the list of all the places
> where the template directory can be specified:
>
> "If the specified template directory is an empty path (for example,
> --template=), then no template will be copied."
>
> Let me know what you think.
>
>
> Thanks,
> BorisYou can apparently pass `--no-templates`
``` git init --template=$HOME/git-template --no-templates ```
I had a distinct `description` in the template directory. That was not used in the above.