是否可以让Git跟踪空文件夹?


Is it possible to make git to track empty folders?

本问题已经有最佳答案,请猛点这里访问。

我从这篇文章中了解到,要让Git跟踪文件夹,必须至少有一个空文件:

1
2
3
4
5
6
7
8
9
10
11
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.

我遇到了一些问题,因为Git没有跟踪空文件夹,我列出了一些:

问题1:

我的Git存储库中有一个apache/log目录。

当我把它推到服务器上运行这个网站时,它没有工作。在我的本地系统中它工作得很好。经过大量的研究,我发现git push没有推空文件夹/log。服务检查文件夹日志以创建日志文件。由于log文件夹不存在,因此无法自动创建文件夹并放置这些文件。这就是错误的原因。

问题2:

我有很多书。只有我的一个分支机构说frontendcaps文件夹。

有时目录my_git_repo/caps/html/home/中的一个文件夹将为空。

分支master没有文件夹caps

如果我做git checkout master,它会有一个空文件夹,即caps/html/home/tmp。所以我想手动删除caps文件夹,有时会造成混乱。

通常我通过在文件夹中放置一个空文件(README来解决这些问题。

所以我想让Git跟踪所有空文件夹。是否可以通过编辑.git/config或其他方式?

任何帮助都将被重视。:)


如果文件夹真的是空的,答案是"否"。这是不可能的,因为Git是如何处理数据的。

但是,如果您可以接受一些妥协:只需创建一些文件,比如.gitignore或目录中您希望看到的任何内容,就可以完成了。自述文件可以是一个解决方案,但我个人不会使用这个名称,因为这会使人们认为这些文件中有内容,从而产生混淆。

了解如何将空目录添加到Git存储库中?一个非常相似的问题。


就我个人而言,我通常通过在每个目录中都有一个名为dir.info的文件来解决这个问题,该文件中有一些文本说明目录的用途。

但是,如果您需要在签出之后创建特定的、空的目录,这些目录可能是特定于特定分支的目录,我建议按顺序创建git后签出挂钩-您可以在顶层目录中列出需要和不需要的空目录,并且使用大约5行python如果需要,请创建它们,并删除那些不需要的。

我可能会在第一个字符中使用-+,这取决于应该删除或添加哪个字符。

类似(添加了错误处理):

1
2
3
4
5
6
7
8
9
10
11
12
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