.gitignore文件是否适用于所有分支?

时间:2019-10-10 22:58:21

标签: git github

Master分支中的.gitignore文件是否适用于其他分支?

https://help.github.com/en/articles/ignoring-files的“创建本地.gitignore”部分中,它没有指定您应该位于哪个分支。

3 个答案:

答案 0 :(得分:3)

.gitignore适用于.gitignore文件所在的文件夹中的文件;当前选择哪个分支都没有关系。 .gitignore中指定的任何文件都将从Git中排除。

请注意,.gitignore中的引用是递归的,因此,如果您在项目的根目录下有一个.gitignore文件,它将把规则应用于项目中的所有文件和文件夹。 / p>

答案 1 :(得分:1)

不同的分支可能包含不同的.gitignore文件,并且每个文件都适用于它所在的分支。要制定适用于所有分支机构的规则,请编辑.git/info/exclude

gitignore documentation涵盖了多个文件,这些文件可以包含忽略模式。

  

放置模式的文件取决于模式的含义   使用。

     
      
  • 模式应受版本控制,并通过克隆(即所有开发人员都希望使用的文件)分发到其他存储库   忽略)应放入.gitignore文件中。

  •   
  • 特定于特定存储库但无需与其他相关存储库(例如,辅助存储库)共享的模式   存储库中的文件,但特定于一个用户的文件   工作流程)应进入$GIT_DIR/info/exclude文件。

  •   
  • 用户希望Git在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)   通常会进入用户的core.excludesFile指定的文件中   ~/.gitconfig。其默认值为$XDG_CONFIG_HOME/git/ignore。如果   $XDG_CONFIG_HOME未设置或为空,而是使用$HOME/.config/git/ignore

  •   

您的问题询问了master分支上的.gitignore文件,因此与第一个项目符号相对应。

忽略模式适用于它们出现的分支,更具体地说,适用于找到每个分支的目录子树,这些分支可能被更深目录中的.gitignore文件覆盖。同样来自文档:

  
      
  • 从与路径相同的目录或任何父目录中的.gitignore文件中读取的模式,较高级别文件(直到工作树的顶层)中的模式被较低级别文件中的模式覆盖将文件降级到包含文件的目录。这些模式相对于.gitignore文件的位置匹配。一个项目通常在其存储库中包含此类.gitignore文件,其中包含作为项目构建的一部分而生成的文件的模式。
  •   

答案 2 :(得分:0)

Obsidian Age said一样,它适用于以.gitignore文件出现为根的子树中的文件。

应该跟踪.gitignore文件 1 (即应存在于索引中),因此在每个提交中均以副本形式存在。这意味着每个提交都有其自己的.gitignore副本 2 如果您使用的是branch-1,而您git checkout branch-2,则显示出来不同 .gitignore文件,其 内容现在适用于文件夹和子文件夹。如果您随后git checkout branch-1带回branch-1文件,包括branch-1的{​​{1}}版本,则那些内容现在适用。


1 这不是硬性要求,但不是提交.gitignore文件意味着您可能不应该使用.gitignore文件完全没有通过为自己创建一个全局gitignore或为此仓库创建一个.gitignore文件,您可以获得类似的效果。

2 与所有跟踪和提交的文件一样,Git 共享 任何个文件都完全匹配。这样做是因为每个提交文件都以该特定形式,该特定提交永久冻结。它无法更改,因此它可以共享

也就是说,假设您.git/info/excludes,创建一个名为git checkout master的十兆字节的文件,运行big,然后运行git add big。现在,您已经在刚刚进行的提交中创建了一个新的10 MB文件。 此后您所做的每个提交中都包含一个10 MB的文件,直到您git commit将其从索引和工作树中删除并进行所有以后的提交< em>没有有文件。 3 但是每个共享与大文件完全相同的版本的文件,都使用一个共享文件复制。因此,如果您有四千次提交,但是它们都只有一个特定的文件git rm big,那么您只有10 MB的big,而不是4000 * 10 MB。

3 或者,当然,您可以用很小的内容覆盖big。您进行的 next 提交将有一个名为big的小文件,该文件将与以后的每个提交共享,就像名为big的大文件将与以后的每个提交共享到此为止。

如果这太令人困惑,只需将Git看作是每次您big一个文件时都自动执行“查看是否曾经提交过此数据”重复数据删除操作。如果以前 did 曾经提交过,Git会自动重新使用已经冻结的副本。