How do you make Git ignore files without using .gitignore?
Solution 1:
Do not forget, according to gitignore, that there is an order of precedence in the different "ignore pattern sources" that Git consider:
- Patterns read from the command line for those commands that support them.
- Patterns read from a .gitignore file in the same directory as the path, or in any parent directory, with patterns in the higher level files (up to the root) being overridden by those in lower level files down to the directory containing the file.
- Patterns read from
$GIT_DIR/info/exclude
. - Patterns read from the file specified by the configuration variable
core.excludesfile
.
The last two can be a solution for your problem but:
- they are not replicated for a distant repository
- they can have their patterns overridden by the other sources
(See also this SO question)
The other two solutions involve updating the index (git update-index
):
-
git update-index --assume-unchanged
: see "Git: untrack a file in local repo only and keep it in the remote repo".
It is mentioned by Elijah Lynn in the comments.- You can even ignore a folder content: "
git update-index --assume-unchanged
on directory". - Use
--no-assume-unchange
to reverse the effect: See "Is it possible togit add
a file currently protected byassume-unchanged
?".
- You can even ignore a folder content: "
However, when you checkout another branch or when you git pull
, that "ignore" status might be reset. Hence the other option:
-
git update-index --skip-worktree
; see:- "ignore my changes in files but don't delete them from remote rep" and
- "Preserve git --assume-unchanged files between branch checkouts".
The difference between the two is explained in "Git - Difference Between 'assume-unchanged
' and 'skip-worktree
'".
Solution 2:
If you can modify .git/info/exclude
you can put the same rules there. But that file is within your local repo only.
Solution 3:
There are three ways to tell GIT which files to ignore:
-
.gitignore
files $GIT_DIR/.git/info/exclude
- Files pointed to via the
core.excludesfile
setting
The latter two points could solve your problem.
For further information, see gitignore(5).
Solution 4:
I have been in similar situations, so I'm adding my preferred solution that I don't see mentioned. The problem with git update-index --assume-unchanged
in this case is that you cannot do that for an untracked file. You said
I cannot modify the .gitignore of my repository.
I'm going to assume what you mean is that you can't push any changes to .gitignore
to origin. If that is the case what you can do is add the untracked file to your local .gitignore
, then do git update-index --assume-unchanged .gitignore
so that your change to .gitignore
is never pushed. Now you are ignoring the (possibly) untracked file, and not affecting the remote .gitignore
file.