threads / discuss / 60611

Allow adding files from git submodule to parent git repo if they are in .gitignore in the submodule

Subject: Allow adding files from git submodule to parent git repo if they are in .gitignore in the submodule

## tl;dr

2 messages between Dec 13, 2023 and Dec 13, 2023.

replies: 1people: 2as markdown or json

Alexey Murz Korepov· Dec 13, 2023, 11:07 UTC · lore

Git submodules are pretty often used to "import" some external git repository into your git repository, to not manage its files in your git tree, that's good.

But very often we need to add some file to that submodule and manage it in our local git repository, and this file is usually in .gitignore in the submodule's git.

So, the example task is:

Copy a mysubmodule/config.example.yaml to mysubmodule/config.yaml (which is in .gitignore in the mysubmodule), make local changes, and store it in the local (parent) root git repo.

But the problem is that we can't add this mysubmodule/config.yaml file to our root git repository, because receiving an error: ``` $ git add -f mysubmodule/config.yaml fatal: Pathspec 'mysubmodule/config.yaml' is in submodule 'mysubmodule' ``` But I see no problems with doing this, if the file is in .gitignore of the mysubmodule submodule.

So, let's discuss the approach of how we can allow this in git?
Or will be glad to hear and discuss alternatives and workarounds for this task.
Junio C Hamano· Dec 13, 2023, 15:38 UTC · re: Alexey Murz Korepov · lore

Re: Allow adding files from git submodule to parent git repo if they are in .gitignore in the submodule

Alexey Murz Korepov <murznn@gmail.com> writes:
Show 8 quoted lines
> ```
> $ git add -f mysubmodule/config.yaml
> fatal: Pathspec 'mysubmodule/config.yaml' is in submodule 'mysubmodule'
> ```
> But I see no problems with doing this, if the file is in .gitignore of
> the mysubmodule submodule.
>
> So, let's discuss the approach of how we can allow this in git?

What should happen when mysubmodule/.gitignore changes? Who guarantees that such a file stolen by the superproject will stay in the .gitignore file in the submodule?

I do not think you want to go there, and I do not think I want to see such a behaviour in Git, as we would be the ones who will be blamed for the resulting mess.

The right solution probably is to keep such a file in a directory that is separate from the directory where you bind your submodule. Track the file in the superproject, and have a build procedure to copy it into the submodule directory (as an untracked file, of course).

← back to recent threads