8

I read from this post which explains that to make git to track a folder there must atleast an empty file:

Currently the design of the Git index (staging area) only permits files 
to be listed and nobody competent enough to make the change to allow 
empty directories has cared enough about this situation to remedy it.

Directories are added automatically when adding files inside them. 
That is, directories never have to be added to the repository, 
and are not tracked on their own. You can say "git add <dir>" and it 
will add the files in there.

If you really need a directory to exist in checkouts you should
create a file in it.

I have faced some problems because git not tracking empty folders, i am list a few:

Problem1:

I have a apache/log directory in one of my git repository.

when I pushed it to server and run the website it didn't worked. Where it worked fine in my localsystem. after a lot of research i found out that git push did n't pushed the empty folder /log. the serve checked folder log to create logfiles. since folder log did not exist, it is not possible to automatically create a folder and put these files. That is why the error.

Problem2:

I have lots of branch. Only one of my particular branch say frontend have folder caps.

Sometime one of a folder in the directory my_git_repo/caps/html/home/ will be empty.

branch master doesn't have folder caps

if i make git checkout master it will have empty folder ie caps/html/home/tmp so i want to manually delete the folder caps sometimes it will create confusion.

usually i solve these problems by putting an empty file(README) in the folder.

So I would like to make git to track all empty folders. is it possible by editing .git/config or something?

Any help will be appriciated.:))

Charles
  • 50,943
  • 13
  • 104
  • 142
suhailvs
  • 20,182
  • 14
  • 100
  • 98
  • 1
    Isn't the usual solution just to put a .keepme file in there? – mvw Sep 03 '13 at 12:15
  • @mvw ys adding a empty file is what i usually do. but most times when i do `git checkout` there will be a lot of empty folders. that is a really trouble – suhailvs Sep 03 '13 at 12:20
  • `git` doesn't track folders at all, whether they're empty or not. Folders are incidental artifacts of the path names of the files that `git` is tracking. – twalberg Sep 03 '13 at 15:42

2 Answers2

6

With a really empty folder, the answer is no. It's not possible because of how Git technically handles data.

BUT, if you're OK to accept some compromise: just create some file, like .gitignore or whatever inside the directory you want be seen, and you're done. README file can be a solution, but I would personnally not use that name because that would create confusion with people thinking there's content inside those files.

See How can I add an empty directory to a Git repository? for a very similar question.

Community
  • 1
  • 1
Baptiste Mathus
  • 888
  • 2
  • 11
  • 18
3

Personally I usually solve this by having a file called dir.info in every directory that has some text stating what the directory is there for.

However, if you need to create specific, empty, directories after a checkout with those directories possibly being specific to specific branches I would suggest git post-checkout hooks are made to order - you can have a list in your top level directory of the empty directories that are needed and not needed and with about 5 lines of python you can create them if required and delete those that are not.

I would probably do something like having - or + in the first char depending on which should be removed or added.

Something like, (with the error handling added):

import os

dirlist = open("Dirlist.Name", "rt")
for line in dirlist:
    flag = line[0]
    name = line[1:].strip()
    if flag == '+':
        os.makedirs(name)
    elif flag == '-':
        os.removedirs(name)
    else:
        print "Ignored:", line
Steve Barnes
  • 27,618
  • 6
  • 63
  • 73