I created an Android project, added it to my git repo, comitted and pushed my clone to the master. Later I tried checking out the project and Eclipse complained about missing src folders. I checked my repo and the master repo and the src folders are missing (Im sure they were there when I created the project). So can someone explain what happened here? Im new to git so maybe I missed something?
6 Answers
Git doesn't ignore empty directories. It ignores all directories. In Git, directories exist only implicitly, through their contents. Empty directories have no contents, therefore they don't exist.
Or to put it another way: Git is a content tracker. Empty directories are not content.
2 Comments
hasen
Not exactly. git has a concept of "tree" (which corresponds to a directory), and the tree actually has a sha1 hash, and thus has content: the list of blobs (files) and trees (sub-directories). So
git actually can (in theory) record empty directories. The problem lies in the index file (the staging area): it only lists files; and commits are built from the index file.Craig.C
And in unix land a directory like everything else is a type of file to further complicate the theory.
Yes, git ignores empty folders.
You can add an empty .gitignore or .gitkeep file to any folders you want included.
2 Comments
Alain Pannetier
Here is how to do it in one go...
find . -depth -not -path "*target*" -not -path "./.git/*" -type d -empty -print [... plenty of stuff here ...] find . -depth -not -path "*target*" -not -path "./.git/*" -type d -empty -exec touch {}/.gitignore \;fig
^ Nice - ta! :)
Yes, git ignores empty folders, some suggestions on how to solve that are:
- put a README file inside the folder and describe the folder content or why is the folder empty and must be kept
- put an empty file called .gitignore inside the folder
- (wich I like most) put an empty file called .gitkeep inside. This solution is contextual since if some one see the file will understand why is it in the folder