7

我从这篇文章中读到,它解释了要让 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不存在,因此无法自动创建文件夹并放置这些文件。这就是错误的原因。

问题2

我有很多branch. 只有我的一个特定分支说frontend有文件夹caps

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

分支master没有文件夹caps

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

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

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

任何帮助都会得到帮助。:))

4

2 回答 2

6

对于一个非常空的文件夹,答案是否定的。由于 Git 在技术上处理数据的方式,这是不可能的。

但是,如果您可以接受一些妥协:只需创建一些文件,例如 .gitignore 或您希望看到的目录中的任何内容,然后您就完成了。README 文件可能是一个解决方案,但我个人不会使用该名称,因为这会使人们误以为这些文件中有内容。

请参阅如何将空目录添加到 Git 存储库?对于一个非常相似的问题。

于 2013-09-03T12:21:58.363 回答
3

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

但是,如果您需要在结帐后创建特定的空目录,而这些目录可能特定于特定的分支,我建议您定制git post-checkout 挂钩- 您可以在空的顶级目录中有一个列表需要和不需要的目录以及大约 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
于 2013-09-03T14:42:08.357 回答