我如何将一个空的目录(不包含文件)添加到一个Git存储库中?
当前回答
假设你需要一个空的目录,称为tmp:
$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp
换句话说,你需要将.gitignore 文件添加到指数之前,你可以告诉 Git 忽略它(以及所有其他在空的目录中)。
其他回答
将.gitkeep 文件添加到空的目录中,并承诺。
touch .gitkeep
这是Git跟随的标准。
警告:这个推文真的不像它出现的那样工作,对不起不舒服。
下面的原创文章:
这个解决方案是短暂的,似乎工作得很好(参见EDIT!),但它不那么容易记住......
空的树 SHA-1 可以通过创建一个新的空的 Git 存储库,CD 进入它,并发出 git 写作树,从而输出空的树 SHA-1.
编辑:
我一直在使用这个解决方案,因为我发现它. 它似乎工作正如创建一个子模块一样,除非没有模块被定义在任何地方. 这导致发行 git 子模块 init 更新时的错误. 问题是, git 更新指数将 040000 树部分重新编写到 160000 承诺。
但是,如果您已经(并且不会)在您的存储库中使用任何 Git 子模块,而“空白”文件夹将保持空白,或者如果您希望 Git 了解其存在并忽略其内容,您可以使用此推文。
我也面临着空的目录的问题. 使用存储文件的问题是,你需要创建它们,并删除它们,如果它们不再需要(因为后来添加了子目录或文件。
这就是为什么我决定写一个开源工具,可以自动管理创建/删除此类存储文件。 它是为.NET 平台写的,并在 Mono (.NET for Linux) 和 Windows 中运行。
只需看看: http://code.google.com/p/markemptydirs
touch .placeholder
在Linux上,它创建了一个名为.placeholder 的空白文件. 值得一提的是,这个名称是 agnostic 到 git,并在系统中的其他地方使用这种方法,例如 /etc/cron.d/.placeholder. 第二,正如另一个用户指出的那样,.git 预定协议可以为 Git 自己用于配置目的的文件和目录进行备份。
否则,正如另一个答案中所指出的那样,目录可能包含一个描述的 README.md 文件。
无论如何,这都需要文件的存在不会导致您的应用程序破裂。
正如其他答案中所描述的那样,Git 无法在其排序区域中代表空的目录(见 Git FAQ ) 但是,如果为您的目的,一个目录是空的,如果它只包含一个.gitignore 文件,那么您只能通过:
find . -type d -empty -exec touch {}/.gitignore \;
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 如何复制在bash所有目录和文件递归?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式