Use .gitignore to Ignore Specific Files and Folders
Traducciones al EspañolEstamos traduciendo nuestros guías y tutoriales al Español. Es posible que usted esté viendo una traducción generada automáticamente. Estamos trabajando con traductores profesionales para verificar las traducciones de nuestro sitio web. Este proyecto es un trabajo en curso.
Git is a powerful version control system (VCS). It allows developers to manage, coordinate, and control the contents of their workspaces, but is not without complexity. Git users often struggle with untracked local files that complicate the output of commands like git status. This guide explains the .gitignore file, which provides a handy workaround to this problem. It also describes how to create a .gitignore file, how to add files and folders to gitignore, and how to use its powerful syntax.
gitignore refers to the .gitignore file. The full .gitignore name is always used in commands, outputs, and when referencing the full path of the file.What is gitignore?
In a Git repository, most files are either tracked or untracked. But the gitignore file enables a third category of files. Here’s an explanation of the three types of files in a Git repository:
- Tracked: These files are already added/staged or committed to the repository.
- Untracked: These files are not yet staged or committed. The developer intends to stage or commit them at some later time.
- Ignored: These are untracked files that a developer does not want to stage or commit. Git has been told to ignore these files, so they do not appear in the input of Git commands. As far as Git is concerned, these files do not exist.
To list the tracked and untracked files in a Git repository, use the git status command. It lists all tracked files that have changed, along with the untracked files. However, it does not list any ignored files or folders. These entities are hidden, and therefore no longer shown as untracked. This removes clutter from the Git commands and makes it easier to focus on changes to relevant files.
To ignore a file or folder, add it to a file named .gitignore. This is a text file normally located in the root directory of a Git repository, although it can reside elsewhere. The preceding . character indicates gitignore is a hidden file.
Git does not automatically create the gitignore file. It must be created manually.
Each line in the file represents a different pattern, or rule, describing the files Git should ignore. The gitignore syntax includes a series of special operators for developing patterns with much larger scopes. Unfortunately, there is no Git command to create or edit the gitignore file. These actions must be performed manually.
Developers should ignore files and folders they do not plan to push, rather than leaving them in an untracked state. This avoids confusion, reduces the chance of accidental commits, and helps developers structure their workplace. Here are some types of files that are good candidates for gitignore.
- Object files and compiled code, such as .ofiles.
- Build output directories.
- Caches.
- System files.
- Auto-generated files, including .lockand.tmpfiles.
- Personal configuration or IDE files.
- Temporary test data for unit testing.
- Placeholder or stub files used during early development.
- Files containing sensitive information like passwords and keys.
Before You Begin
- If you have not already done so, create a Linode account and Compute Instance. See our Getting Started with Linode and Creating a Compute Instance guides. 
- Follow our Setting Up and Securing a Compute Instance guide to update your system. You may also wish to set the timezone, configure your hostname, create a limited user account, and harden SSH access. 
- Ensure Git is installed on your Linode. For information on installing up Git, see the Linode guide to installing Git. Essentially: Debain / Ubuntu- sudo apt install gitAlmaLinux / CentOS Stream / Fedora / Rocky Linux- sudo dnf install git
- To provide an environment for testing - gitignorebehavior, create and initialize a test Git repository:- mkdir testgit cd testgit git init
- Create the example files and folders necessary to follow along with this guide: - mkdir {subdir1,subdir2,subdir3} && touch 1.bak a.bin b.bin file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir1/file7.txt subdir2/file8.txt subdir3/files.log
sudo. If you are not familiar with the sudo command, see the
Users and Groups guide.How to Use the gitignore file
gitignore is a normal text file. It contains a set of rules telling Git what files and folders to ignore. Users must create and edit it manually. The following sections explain how and where to create the file and how to ignore files and folders. The following examples use a sample Git repository named testgit. This repository has already been created using the git init command.
This guide is optimized for Linux and Ubuntu users, but the Git commands are common to all platforms. The gitignore syntax is platform independent.
How to Create the gitignore File
Most developers add the gitignore file to the root directory of the repository. However, it can be created in any directory. The patterns in a gitignore file are always relative to the location of the gitignore directory. It is also possible to create multiple gitignore files. The rules in each file are cumulative and are processed in a relative manner.
There is no command for creating the .gitignore file. To create the .gitignore file, first, make sure you’re in the root directory of the Git project (i.e testgit). Then use a text editor, or simply the touchcommand, to create the file:
touch .gitignoreHow to Add Files to gitignore
The simplest use of gitignore is to ignore an individual file. Add the full name of the file to be ignored to the .gitignore file. Each new entry must appear on a separate line.
Git ignores all files with this name no matter where they are located in the repository. A later section discusses how to ignore multiple files matching a pattern. Here are the steps required to add a file to gitignore.
- Run the - git statuscommand to review the list of untracked files. Determine which files are not important and should not be listed.- git status- Untracked files: .gitignore 1.bak a.bin b.bin file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir1/ subdir2/ subdir3/
- Edit the - .gitignorefile:- nano .gitignore
- To ignore - file1.txt, add the full name of the file to- gitignore:- File: testgit/.gitignore
- 1- file1.txt
 - Note This pattern ignores any file named- file1.txtanywhere in the Git repository.
- Press CTRL+X to exit nano, Y to save, and Enter to confirm. 
- Run - git statusagain and confirm- file1.txtis no longer listed amongst the untracked files:- Untracked files: .gitignore 1.bak a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir1/ subdir2/ subdir3/
- A file in a specific directory is ignored in much the same way. Add the entire file path, relative to the - gitignorefile, as a new line in the file. For example, to ignore the file- file7.txtin the directory- subdir1, add another entry to- gitignore, like so:- File: testgit/.gitignore
- 1 2- file1.txt subdir1/file7.txt
 
- Run - git statusagain:- Untracked Files: .gitignore 1.bak a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir2/ subdir3/- Here, - subdir1is not listed because its only contents was- file7.txt., which is now ignored.
How to Add Folders to gitignore
gitignore can also be used to ignore entire directories, along with any files and subdirectories in the directory. To ignore a specific directory, append a / symbol to the end of the directory name.
/ symbol is not added to the end of the rule, Git ignores all files and directories matching the pattern. / restricts the rule so it only applies to directories.This example explains how to ignore the subdir2 directory in gitignore.
- Add a new entry to - gitignoreconsisting of the name of the directory to ignore:- File: testgit/.gitignore
- 1 2 3- file1.txt subdir1/file7.txt subdir2/
 
- Confirm the directory is now on the ignore list. Neither the directory nor the files it contains should be listed under - untracked files:- git status- Untracked files: .gitignore 1.bak a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir3/
Debugging gitignore
Git provides a debug command for determining why a file is being ignored or considered. Use the check-ignore command and the -v verbose flag. Git lists every rule that applies to the file.
git check-ignore -v subdir2/file8.txt.gitignore:3:subdir2/    subdir2/file8.txtgitignore Syntax and Patterns
gitignore is equipped with a powerful and flexible set of special operators for filtering files on a highly granular level. The gitignore syntax uses wildcard and exclude symbols to add multiple files or remove other files from the set of ignored files.
This section describes the different characters comprising the gitignore syntax. The check-ignore command illustrates how the gitignore syntax affects different files. For more extensive information about the syntax, consult the gitignore documentation.
The Wildcard Symbols
The * symbol matches zero or more characters, excluding only the / character. For example, the rule *.bak ignores all files with the .bak extension, including 1.bak and one.bak. Wildcards can be used in both file and folder names.
- Add a new line to - .gitignore:- File: testgit/.gitignore
- 1 2 3 4- file1.txt subdir1/file7.txt subdir2/ *.bak
 
- Use - git-statusto confirm both- .bakfiles are unlisted:- Untracked Files: .gitignore a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt subdir3/
- A closely-related filter is the - ?character. This matches any single character. The rule- ?.bakmatches- 1.bak, but not- one.bak. Modify the last change to- .gitignoreto look like so:- File: testgit/.gitignore
- 1 2 3 4- file1.txt subdir1/file7.txt subdir2/ ?.bak
 
- Use - git check-ignoreto look for- 1.bak:- git check-ignore -v 1.bak- .gitignore:4:?.bak 1.bak
- Use - git statusagain to confirm that- one.bakis listed as untracked:- Untracked Files: .gitignore a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak subdir3/
The Double Asterisk Symbol
The ** character matches any number of directories or files. This is often used to ignore certain files in a specific directory anywhere in the repository. For instance, the pattern **/backup/*.log matches any files ending in .log in any directory named backup.
The ** works slightly differently in different contexts. The pattern **/dirname matches all instances of the directory. The pattern dirname/**/filename matches files named filename inside dirname or any of its subdirectories.
- Add a new line to - .gitignore:- File: testgit/.gitignore
- 1 2 3 4 5- file1.txt subdir1/file7.txt subdir2/ ?.bak **/subdir3/*.log
 
- Use - git check-ignoreto look for the- files.logfile:- git check-ignore -v subdir3/files.log- .gitignore:5:**/subdir3/*.log subdir3/files.log
- Now use - git statusto confirm that the- files.logfile’s otherwise empty parent directory- subdir3is now unlisted:- Untracked Files: .gitignore a.bin b.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak
The Negation Symbol
The negation symbol removes some of the files or folders that match an earlier rule enforcing an ignored state. If the rule *.bin ignores all .bin files, then the rule !a.bin overrides this rule for a.bin. It tells Git to stop ignoring these files and move them back to the untracked state.
a, then negate subset b out of a, then ignore subset c from b. It is possible to build a long chain of nested rules using this strategy. However, this structure can be difficult to debug and should normally be avoided.This example demonstrates how the rule !a.bin overrides the *.bin rule. The file b.bin is still ignored, but a.bin is listed as untracked.
- Add two new lines in - .gitignore:- File: testgit/.gitignore
- 1 2 3 4 5 6 7- file1.txt subdir1/file7.txt subdir2/ ?.bak **/subdir3/*.log *.bin !a.bin
 
- Use - git check-ignoreto look for- b.bin:- git check-ignore -v b.bin- .gitignore:6:*.bin b.bin
- Now look for - a.bin:- git check-ignore -v a.bin- .gitignore:7:!a.bin a.bin
- Use - git statusto confirm that- a.binis still untracked, but- b.binis unlisted:- Untracked Files: .gitignore a.bin file2.txt file3.txt file4.txt file5.txt file6.txt one.bak
The Range Symbol
The square brackets [] are used to specify a numerical or alphabetical range. There are several permutations of this symbol.
- [0-9]matches any single character from the range, so any number between- 0and- 9. This is the same as any single digit.
- [01]matches any character from the set, in this case, either- 0or- 1.
- [!01]matches any character except the ones in the set.
- [a-m]is an alphabetic range. This range includes lower case letters from- ato- m.
As an example, the gitignore entry file[3-5].txt ignores file3.txt, file4.txt and file5.txt, but not file2.txt or file6.txt.
- Add - file[3-5].txtto your- gitignorefile:- File: testgit/.gitignore
- 1 2 3 4 5 6 7 8- file1.txt subdir1/file7.txt subdir2/ ?.bak **/subdir3/*.log *.bin !a.bin file[3-5].txt
 
- Use - git statusto confirm the removal of- file3.txt,- file4.txt, and- file5.txtfrom the list of untracked files:- .gitignore a.bin file2.txt file6.txt one.bak
- Use - git check-ignoreto look for- file3.txt:- git check-ignore -v file3.txt- .gitignore:8:file[3-5].txt file3.txt
The Comment Symbol
Any entry in the gitignore file beginning with the # symbol is a comment. Comments can help organize and explain highly complicated gitignore files.
Blank lines are also ignored. Developers can use them to separate the gitignore file into sections.
Combinations and Exceptions
There are a few puzzling exceptions to the gitignore rules. Certain patterns are also confusing. Here are some specific cases that might cause problems.
- For performance reasons, it is not possible to negate a file that belongs to an ignored directory. For example, if a rule ignores the backupdirectory, then Git does not acknowledge the subsequent pattern!backup/data.log. Thebackup/data.logfile is still ignored and does not appear as an untracked file ingit status.
- Prepending a directory separator /symbol to a rule indicates the rule is relative to the root directory containing thegitignorefile. Without the/symbol, the rule applies everywhere in the directory.
- Patterns specifying a particular file in a certain directory are always relative to the gitignorefile. This means the patternbackup/debug.logdoes not match the fileproject/backup/debug.log. This rule is equivalent to/backup/debug.log.
- Any pattern with a directory separator /symbol in the middle of a pattern is also relative to thegitignorefile.
- If there is a /symbol at the end of a pattern, it only matches directories. Otherwise it matches both directories and files.
- The \symbol is an escape character. It tells Git to treat the next character as a literal character and not a special symbol. The rulelog\[05\].txtis used to ignorelog[05].txt. Without the escape character, the rule would ignorelog0.txtandlog5.txt.
Ignoring Files in Special Circumstances
Ignoring Files Locally and Globally
The gitignore file is typically checked into the Git repository. This means it applies to every instance of the repository, but not to other repositories on the system. However, Git provides options to expand the rules to all repositories or only apply the rules locally.
- Local Repository Rules: Rules in the - .git/info/excludefile only apply in the local repository. This file is not checked in, so it does not apply to other copies of the repository. This is a good choice for special rules that only apply to your personal repository, including personal data or local environments. The regular- gitignorerules still apply in this context.
- Global gitignore Rules: To ignore files in all repositories on a particular system, use a global - .gitignorefile. Run the following command to register the file globally with Git, then add the rules to- ~/.gitignore.- git config --global core.excludesFile ~/.gitignore
Ignoring Checked-In Files
Git does not ignore any checked in files, even if they are covered by patterns in the gitignore file. To ignore a checked in file, first remove it from Git. Use this command to remove and ignore the file.
git rm --cached FILENAME-f option. Run the command git add -f FILENAME. After the file is checked in, Git no longer ignores it. However, this command is not recommended. It is better to create a gitignore pattern exempting the file, or to design the patterns so the file is never ignored in the first place.Conclusion
Git files are normally either tracked or untracked. However, Git provides a mechanism for ignoring untracked files that are not intended for check-in. This means they do not appear in the output of commands such as git status, resulting in a cleaner and better organized workspace.
Developers can ignore files and folders by adding them to the .gitignore file. gitignore is a plain text file normally located in the root directory of the repository. Powerful operators including wild card characters and exclusion characters allow users to define rules with wider or more granular scopes. For more information on how to ignore files in Git, see the Gitignore documentation.
More Information
You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.
This page was originally published on