Re: Suggestion: Enhance git init with Language-Specific Templates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2025-03-04 at 11:49:14, Tech Kenya wrote:
> 
> 
> I would like to propose an enhancement to git init that allows users to specify a language or framework when initializing a repository, automatically applying an appropriate .gitignore template.
> 
> Proposal
> 
> Introduce a flag to git init that enables users to initialize a repository with a predefined .gitignore based on the project's language or framework. For example:
> 
> git init --golang
> git init --python
> git init --node
> 
> This would generate a .gitignore file using well-established templates, such as those from Toptal's Gitignore Generator https://www.toptal.com/developers/gitignore/ or GitHub's official .gitignore repository.

I think this is an interesting idea, but unfortunately, I think it's
going to be practically difficult to implement.  You've mentioned three
very common languages, but there are a lot of programming languages and
even more compiler environments, and it wouldn't be practical for us to
try to support them all.

For instance, I use Neovim, and the version I'm using ships with 693
different syntax files, which means that there's about 693 different
programming languages supported.  I was recently exposed at work to some
languages that I'd never heard about before and which are not supported
by Neovim, and presumably those users would also want similar
functionality.

That is compounded by the fact that there are a lot of OS- and
environment-specific configuration.  As an example, a C project on macOS
might want to ignore XCode-related files, but for a project that's only
on Linux, that wouldn't be necessary.  Similarly, that C project might
create shared libraries that should be ignored, but those might end up
with any of `.so`, `.sl`, `.dylib`, or `.dll` extensions.

You mentioned some possible sources for this configuration, but we try
not to prioritize specific outside projects.  So just because GitHub is
widely used and some GitHub employees contribute to Git doesn't mean we
give it special precedence or privileges, and we wouldn't want to
prioritize their specific collection (or any other), nor would be want
`git init` to attempt to make a network connection.  We also don't want
to maintain this collection ourselves, since it's very project specific.

What Git _does_ provide is a way to create a template of objects that
should be in the `.git` directory using the `--template` option.  It's
possible to create a template that contains an initial commit with a
`.gitignore` file.  I personally would not recommend this approach,
since it will not work gracefully with alternate ref formats or hash
algorithms, but it is an option for people who want to use it.  This was
in common use for setting up the default branch name before `git init`
added the `-b` option and it's related config, so it is well tested.
-- 
brian m. carlson (they/them or he/him)
Toronto, Ontario, CA

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux