我如何将一个空的目录(不包含文件)添加到一个Git存储库中?
当前回答
这里是一个黑客,但有趣的是它工作(Git 2.2.1) 类似于 @Teka 提出的,但更容易记住:
添加一个子模块到任何存储库(git 子模块添加 path_to_repo) 这将添加一个文件夹和一个文件.submodules. 执行一个更改. 删除.submodules 文件并执行更改。
现在,你有一个目录,当承诺被检查时创建。 有趣的是,如果你看看这个文件的木材对象的内容,你会得到:
致命: 没有有效的对象名称 b64338b90b4209263b50244d18278c0999867193
我不会鼓励使用它,因为它可能会停止在未来的版本的Git,这可能会让您的存储库腐败。
其他回答
警告:这个推文真的不像它出现的那样工作,对不起不舒服。
下面的原创文章:
这个解决方案是短暂的,似乎工作得很好(参见EDIT!),但它不那么容易记住......
空的树 SHA-1 可以通过创建一个新的空的 Git 存储库,CD 进入它,并发出 git 写作树,从而输出空的树 SHA-1.
编辑:
我一直在使用这个解决方案,因为我发现它. 它似乎工作正如创建一个子模块一样,除非没有模块被定义在任何地方. 这导致发行 git 子模块 init 更新时的错误. 问题是, git 更新指数将 040000 树部分重新编写到 160000 承诺。
但是,如果您已经(并且不会)在您的存储库中使用任何 Git 子模块,而“空白”文件夹将保持空白,或者如果您希望 Git 了解其存在并忽略其内容,您可以使用此推文。
但我建议:让一个构建脚本或部署脚本在网站上创建目录。
潜在问题:目录不再空。
现在,而不是试图得到 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
只需在您想要跟踪的空白目录中添加一个空白(没有内容).gitignore 文件。
例如,如果你想跟踪一个空的目录, /项目/内容/帖子,然后创建一个新的空的文件, /项目/内容/帖子/.gitignore
注意:.gitkeep 不是官方 Git 的部分:
此分類上一篇
这个解决方案为我工作了。
1. 将.gitignore 文件添加到您的空白目录中:
*
*/
!.gitignore
* 忽略文件夹中的所有文件 */ 忽略子指南!.gitignore 包含.gitignore 文件
然后删除您的缓存,步行您的文件,承诺并按下:
git rm -r --cached .
git add . // or git stage .
git commit -m ".gitignore fix"
git push
您可以! 查看 Git FAQ。
目前,Git指数的设计仅允许文件列出,并且没有人有足够的能力进行更改,以便空的目录对这种情况有足够的关注,以便解决它。
推荐文章
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?
- 如何列出提交,因为某些提交?
- 如何在不位于存储库的情况下执行Git命令?
- c#测试用户是否有对文件夹的写权限