我如何将一个空的目录(不包含文件)添加到一个Git存储库中?
当前回答
有时我有文件夹的存储库,这些文件只会永远包含被认为是“内容”的文件 - 也就是说,它们不是我关心被版本的文件,因此不应该被承诺。 使用 Git 的.gitignore 文件,你可以忽略整个目录。
我过去所做的是把一个.gitignore 文件放在我的 repo 的根上,然后排除文件夹,如下:
/app/some-folder-to-exclude
/another-folder-to-exclude/*
但是,这些文件夹然后不会成为 repo的一部分. 你可以添加一些东西,如一个 README 文件在那里. 但然后你必须告诉你的应用程序不要担心处理任何 README 文件。
如果您的应用程序依赖于文件夹存在(尤其是空白),您可以简单地将.gitignore 文件添加到该文件夹中,并使用它来实现两个目标:
*
!.gitignore
其他回答
The Ruby on Rails 登录文件夹创建方式:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
现在日志目录将被列入树上,在部署时非常有用,所以你不需要写一个日常来创建日志目录。
登记文件可以通过发行,
echo log/dev.log >> .gitignore
但你可能知道这一点。
基本上,一个源代码管理系统的目的是管理源代码,空的目录不是源代码,Git也经常被描述为内容跟踪器,再次,空的目录不是内容(相反的,实际上),所以它们不被跟踪。
PowerShell 版本:
在目录中找到所有空的文件夹 添加一个空的.gitkeep 文件在那里
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
警告:这个推文真的不像它出现的那样工作,对不起不舒服。
下面的原创文章:
这个解决方案是短暂的,似乎工作得很好(参见EDIT!),但它不那么容易记住......
空的树 SHA-1 可以通过创建一个新的空的 Git 存储库,CD 进入它,并发出 git 写作树,从而输出空的树 SHA-1.
编辑:
我一直在使用这个解决方案,因为我发现它. 它似乎工作正如创建一个子模块一样,除非没有模块被定义在任何地方. 这导致发行 git 子模块 init 更新时的错误. 问题是, git 更新指数将 040000 树部分重新编写到 160000 承诺。
但是,如果您已经(并且不会)在您的存储库中使用任何 Git 子模块,而“空白”文件夹将保持空白,或者如果您希望 Git 了解其存在并忽略其内容,您可以使用此推文。
另一种方式让一个目录保持(几乎)空白(在存储库中)是创建一个.gitignore 文件在该目录内,其中包含以下四行:
# Ignore everything in this directory
*
# Except this file
!.gitignore
然后你不需要得到订单正确的方式,你必须在m104的解决方案。
此外,这还提供了该目录中的文件不会在您进行 git 状态时显示为“不受吸引”的好处。
让 @GreenAsJade的评论持久:
我认为值得注意的是,这个解决方案正是问题所提出的,但并不确定许多人正在寻找什么。这个解决方案保证目录仍然是空的. 它说“我真的从来不想要文件在这里检查”。 相反,“我没有任何文件在这里检查,但是,我需要目录在这里,文件可能会出现。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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日志日期格式