除非一个repo由几个独立的项目组成,否则在repo的根目录中只有一个.gitignore文件似乎比在整个repo中包含多个.gitignore文件要简单得多。在这方面是否有一个标准的最佳实践,或者在线分析什么时候一种方法比另一种更好?
当前回答
顺便说一句,如果您希望在工作副本中有一个从未打算提交的额外目录,那么具有多个.gitignore文件的能力是非常有用的。只要在该目录中放入一个1字节的.gitignore(只包含一个星号),它就永远不会显示在git状态中等等。
其他回答
在很多情况下,你想要提交一个目录到你的Git repo,但其中没有文件,例如日志,缓存,上传目录等。
所以我总是在这些目录中添加一个.gitignore文件,内容如下:
# this directory is intentionally ignored
/*
!/.gitignore
使用这个.gitignore文件,Git将不会跟踪这些目录中的任何文件,但仍然允许我将.gitignore文件以及目录本身添加到repo。
您可以有多个.gitignore,当然每个都在自己的目录中。 要检查哪个gitignore规则负责忽略一个文件,请使用git check-ignore: git check-ignore -v——afile。
每个分支可以有不同版本的.gitignore文件:我已经见过这种配置,可以确保一个分支忽略一个文件,而另一个分支不会:例如,请参阅这个问题。
如果你的repo包含几个独立的项目,最好将它们作为子模块引用。 这将是实际的最佳实践,允许每个项目独立克隆(使用它们各自的.gitignore文件),同时被全局父项目中的特定修订引用。 有关更多信息,请参阅子模块的真实性质。
注意,自从git 1.8.2(2013年3月)以来,你可以执行git check-ignore -v——yourfile来查看哪个gitignore运行(从哪个.gitignore文件开始)被应用到'yourfile',并更好地理解为什么该文件被忽略。 参见"哪个gitignore规则忽略了我的文件"
子文件夹中.gitignore的另一个用例是在monorepos中,每个repo可能更适合指定哪些文件应该被忽略,而不是将它们全部移动到单个mega .gitignore中,从而向下延伸到每个项目中。
例子:我们有一个基于nx构建系统的monorepo。在这个文件夹中,我们有一个工具文件夹,其中包含各种实用程序,其中一些是独立的小项目。在这种情况下,似乎每个工具(都有自己的包)都是合适的。Json)也有一个单独的。gitignore。它更容易维护,也更容易让开发人员看到发生了什么。
顺便说一句,如果您希望在工作副本中有一个从未打算提交的额外目录,那么具有多个.gitignore文件的能力是非常有用的。只要在该目录中放入一个1字节的.gitignore(只包含一个星号),它就永远不会显示在git状态中等等。
我可以想到至少有两种情况,您希望在不同(子)目录中有多个.gitignore文件。
不同的目录有不同类型的文件需要忽略。例如,项目顶部目录中的.gitignore会忽略生成的程序,而Documentation/. gitignore会忽略生成的程序。Gitignore忽略生成的文档。 只忽略给定(sub)目录下的给定文件(你可以在.gitignore中使用/sub/foo)。
请记住,.gitignore文件中的模式递归应用于该文件所在的(子)目录及其所有子目录,除非pattern包含'/'(例如,pattern name应用于给定目录中任何名为name的文件及其所有子目录,而/name仅应用于给定目录中该名称的文件)。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别