Understanding Git and Empty Directories
Git, a widely-used distributed version control system, fundamentally tracks content. This means it’s designed to manage changes to files and their histories. A core principle is that Git doesn’t inherently track empty directories. This can be a source of confusion when you need to include a directory in your repository that currently has no files, perhaps for future organization or configuration.
Why Git Ignores Empty Directories
Git’s design decision to not track empty directories stems from efficiency and simplicity. Tracking directories without content would add unnecessary overhead to the repository and complicate the tracking process. The system focuses on changes to files – if a directory contains no files, there’s no “content” to track.
How to Include an Empty Directory in Your Repository
While Git doesn’t directly support tracking empty directories, there are several workarounds to achieve the desired outcome. The key is to introduce a file within the directory, effectively giving Git something to track. Here are the most common approaches:
1. The .gitkeep
File
This is a widely used convention. Create an empty file named .gitkeep
inside the directory you want to track.
touch directory_name/.gitkeep
git add directory_name/.gitkeep
git commit -m "Add empty directory with .gitkeep"
The .gitkeep
file serves as a placeholder, signaling that the directory should be included in the repository. It’s a common practice, and many developers will recognize its purpose.
2. The .placeholder
File
Similar to .gitkeep
, you can use .placeholder
as a placeholder file.
touch directory_name/.placeholder
git add directory_name/.placeholder
git commit -m "Add empty directory with .placeholder"
3. Using a README.md
File
A descriptive README.md
file within the directory is another excellent approach, especially if you anticipate adding files later. It documents the purpose of the directory and can contain instructions or notes.
touch directory_name/README.md
git add directory_name/README.md
git commit -m "Add empty directory with README.md"
4. The .gitkeep
with .gitignore
Approach (For Truly Empty Directories)
If you want to ensure the directory remains empty in the repository (meaning you don’t want any future untracked files appearing as "untracked"), you can combine .gitkeep
with a .gitignore
file.
-
Create
.gitkeep
(as described above). -
Create a
.gitignore
file inside the same directory with the following content:* !.gitignore
This tells Git to ignore all files in that directory except the
.gitignore
file itself, ensuring the directory stays essentially empty.
Important Considerations:
- File Naming: The name of the placeholder file (e.g.,
.gitkeep
,.placeholder
,README.md
) is not critical. Git only cares that the directory contains a tracked file. - Hidden Files: Files starting with a
.
(dot) are considered hidden files in Unix-like systems (Linux, macOS). This is a standard convention for configuration and metadata files. - Purpose: Choose the placeholder file that best reflects the intent of the directory.
README.md
is useful if you plan to document the directory’s purpose, while.gitkeep
is a general-purpose indicator that the directory should be present.