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

8

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

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: 我有一个apache/log目录在我的git仓库中。当我将其推送到服务器并运行网站时,没有工作。在我的本地系统上它很好用。经过大量的研究,我发现git push没有推送空文件夹log。服务器检查文件夹log以创建日志文件。由于文件夹log不存在,因此不可能自动创建一个文件夹并放置这些文件。这就是错误的原因。 问题2: 我有很多分支。只有一个特定的分支frontend有文件夹caps。有时目录my_git_repo/caps/html/home/中的某个文件夹为空。master分支没有caps文件夹。如果我执行git checkout master,他将有一个空文件夹caps/html/home/tmp,所以我想手动删除文件夹caps,有时会造成混淆。
通常我通过在文件夹中放置一个空文件(README)来解决这些问题。

所以我想让git跟踪所有空文件夹。通过编辑.git/config或类似的方法是否可行?

任何帮助都将不胜感激。 :)

1
通常的解决方案不就是在那里放一个.keepme文件吗? - mvw
@mvw ys 添加一个空文件是我通常做的事情。但大多数时候,当我执行 git checkout 命令时,会出现很多空文件夹。这真的很麻烦。 - suhailvs
git根本不跟踪文件夹,无论它们是否为空。文件夹只是git跟踪的文件路径名称的附属产物。 - twalberg
2个回答

6
对于一个完全空的文件夹来说,答案是否定的。由于Git技术处理数据的方式,这是不可能的。
但是,如果你能接受一些妥协:只需在要显示的目录内创建一些文件,如.gitignore或其他文件,就可以解决问题。README文件可能是一个解决方案,但我个人不会使用该名称,因为这会让人们认为这些文件中有内容。
请参见如何将空目录添加到Git存储库?以获得非常相似的问题。

3

个人通常通过在每个目录中拥有一个名为dir.info的文件来解决这个问题,其中包含一些文本说明该目录的用途。

但是,如果您需要在检出后创建特定的空目录,并且这些目录可能针对特定分支,则建议使用git post-checkout hooks - 您可以在顶级目录中列出所需和不需要的空目录,然后使用大约5行Python代码创建必要的目录并删除那些不需要的目录。

我可能会像以下这样,以-+作为第一个字符,具体取决于应删除还是添加哪个:

类似以下内容(已添加错误处理):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接