我如何将一个空的目录(不包含文件)添加到一个Git存储库中?


当前回答

您可以随时将 README 文件放入目录中,并解释为什么您想要此,否则空白,目录在存储库中。

其他回答

正如其他答案中所描述的那样,Git 无法在其排序区域中代表空的目录(见 Git FAQ ) 但是,如果为您的目的,一个目录是空的,如果它只包含一个.gitignore 文件,那么您只能通过:

find . -type d -empty -exec touch {}/.gitignore \;

但我建议:让一个构建脚本或部署脚本在网站上创建目录。



潜在问题:目录不再空。


现在,而不是试图得到 git 跟踪空的目录 允许探索其他选项. 也许(希望)你有一个部署脚本. 让部署脚本创建目录后 git 克隆. 或者你有一个构建脚本. 让构建脚本创建目录后编辑. 或者也许甚至修改工具本身检查并创建目录之前使用。

我认为这是对问题的更敏感的方法. 构建脚本和部署脚本是为了准备事物运行程序。 您的工具需要一个空的目录. 因此,使用这些脚本来创建空的目录。


独自行走是危险的,请遵循这些命令。

find -type d -empty

find -name .git -prune -o -type d -empty -print

下列命令可能会帮助您,如果您继承了一个包含“空白”目录的项目。

列出包含一个名为.gitkeep 的文件的每个目录:

find -type f -name .gitkeep

find -type f -printf "%h\n" | sort | uniq -c | sort -n

为什么我们需要空版本的文件夹

第一件事先:

一个空的目录不能在 Git 版本系统下成为树的一部分。

但有一些场景,在那里“版本”空的目录可能有意义,例如:

一些建议工作

放置一个 README 文件或其他包含某些内容的文件,以使目录不空,或创建一个.gitignore 文件,具有某种“逆逻辑”(即包含所有文件),最终服务于相同的目的的方法#1。

.Gitkeep方法

使用一个空白的文件称为.gitkeep 以强制文件夹在版本系统中的存在。

您使用一个文件,唯一的目的是保持文件夹. 您不会放置任何信息,你不想放置. 例如,您应该使用 READMEs 作为, 好, READMEs 有用的信息, 不是作为一个借口保持文件夹. 分离担忧总是一个好事, 你仍然可以添加一个.gitignore 忽略不需要的文件。

采用

这里是一个黑客,但有趣的是它工作(Git 2.2.1) 类似于 @Teka 提出的,但更容易记住:

添加一个子模块到任何存储库(git 子模块添加 path_to_repo) 这将添加一个文件夹和一个文件.submodules. 执行一个更改. 删除.submodules 文件并执行更改。

现在,你有一个目录,当承诺被检查时创建。 有趣的是,如果你看看这个文件的木材对象的内容,你会得到:

致命: 没有有效的对象名称 b64338b90b4209263b50244d18278c0999867193

我不会鼓励使用它,因为它可能会停止在未来的版本的Git,这可能会让您的存储库腐败。

只需在您想要跟踪的空白目录中添加一个空白(没有内容).gitignore 文件。

例如,如果你想跟踪一个空的目录, /项目/内容/帖子,然后创建一个新的空的文件, /项目/内容/帖子/.gitignore

注意:.gitkeep 不是官方 Git 的部分:

此分類上一篇