乐闻世界logo
搜索文章和话题

How do i add an empty directory to a git repository

7 个月前提问
3 个月前修改
浏览次数53

6个答案

1
2
3
4
5
6

在Git中,空目录本身不会被包含在版本控制中。这是因为Git跟踪文件的变化,而不是目录。但是,常见的做法是在需要跟踪的空目录里添加一个名为 .gitignore 的文件。

以下是将空目录添加到Git存储库的步骤:

  1. 在你的本地文件系统中创建你想要跟踪的空目录。例如,你想跟踪名为 empty-folder 的目录:

    bash
    mkdir empty-folder
  2. 在这个空目录中创建一个 .gitignore 文件。这个文件可以包含一些规则来告诉Git忽略哪些文件,但在这种情况下,我们只是用它来保持目录的存在。打开文本编辑器,创建一个名为 .gitignore 的文件,并写入以下内容:

    shell
    # Ignore everything in this directory * # Except this file !.gitignore
  3. 这样,.gitignore 文件会告诉Git忽略该目录下的所有文件(* 表示所有文件),但不包括 .gitignore 文件自身(!.gitignore)。

  4. 将新建的 .gitignore 文件添加到版本控制中:

    bash
    git add empty-folder/.gitignore
  5. 提交更改到你的Git存储库:

    bash
    git commit -m "Add empty-folder with .gitignore"
  6. 将更改推送到远程仓库(如果有的话):

    bash
    git push

使用这种方法,虽然目录是空的,但其中的 .gitignore 文件确保了Git将目录包含在版本控制中。这是在Git中处理空目录的常见方式。

2024年6月29日 12:07 回复

使目录(在存储库中)保持(几乎)为空的另一种方法是.gitignore在该目录中创建一个包含以下四行的文件:

shell
# Ignore everything in this directory * # Except this file !.gitignore

那么您就不必像 m104 的解决方案中那样正确地获得订单。

这还有一个好处,即当您执行 git status 时,该目录中的文件不会显示为“未跟踪”。

使@GreenAsJade的评论持久化:

我认为值得注意的是,这个解决方案恰好满足了问题的要求,但可能不是许多查看这个问题的人所寻求的。此解决方案保证目录保持为空。它说“我真的不想在这里签入文件”。与“我这里还没有任何文件要签入,但我需要这里的目录,文件可能稍后会出现”相反。

2024年6月29日 12:07 回复

你不能。请参阅Git 常见问题解答

目前 git 索引(暂存区域)的设计仅允许列出文件,并且没有人有足够的能力进行更改以允许空目录,并且足够关心这种情况并进行补救。

在目录中添加文件时会自动添加目录。也就是说,目录永远不需要添加到存储库中,并且不会自行跟踪。

你可以说“ git add <dir>”,它就会在其中添加文件。

如果您确实需要在结账中存在一个目录,您应该在其中创建一个文件。.gitignore 非常适合此目的;您可以将其留空,或填写您希望在目录中显示的文件的名称。

2024年6月29日 12:07 回复

.gitkeep在目录中创建一个名为的空文件,然后git add将其命名为.

默认情况下,这将是类 Unix 系统上的隐藏文件,但它会强制 Git 承认该目录的存在,因为它现在有内容。

另请注意,该文件的名称没有什么特别之处。您可以将其命名为您想要的任何名称。Git 关心的只是文件夹中有东西。

2024年6月29日 12:07 回复

您始终可以在该目录中放置一个自述文件,并解释为什么您希望在存储库中使用此目录(否则为空目录)。

2024年6月29日 12:07 回复

touch .placeholder

在 Linux 上,这会创建一个名为 的空文件.placeholder。就其价值而言,这个名称与 git 无关,并且这种方法用于系统中的其他各个地方,例如/etc/cron.d/.placeholder. 其次,正如另一位用户所指出的,.git可以为 Git 本身用于配置目的的文件和目录保留前缀约定。

或者,正如另一个答案中所述,该目录可以包含一个描述性README.md文件

无论哪种方式,这都要求文件的存在不会导致您的应用程序崩溃。

2024年6月29日 12:07 回复

你的答案