GIT保留分支特定文件-始终忽略特定文件

GIT保留分支特定文件-始终忽略特定文件,git,Git,我试图保存保存分支特定信息(版本)的文件 添加文件后,我用文件路径更新.gitnore 问题是:当我合并分支时,文件正在被合并到目标分支中 我尝试了以下方法: 使用git rm--cached删除文件 使用--force添加文件会导致跟踪该文件,即使在.gitignore 有没有办法在特定的分支上保存文件 谢谢没有分支机构特定的文件 Git有: 提交 其中包含文件 以及通过分支名称找到的 但是: 两个或多个分支名称可以指定一个提交,并且 您可以随时添加和删除分支名称 因此,由于分支并不

我试图保存保存分支特定信息(版本)的文件

添加文件后,我用文件路径更新
.gitnore

问题是:当我合并分支时,文件正在被合并到目标分支中

我尝试了以下方法:

使用
git rm--cached
删除文件

使用
--force
添加文件会导致跟踪该文件,即使在
.gitignore

有没有办法在特定的分支上保存文件

谢谢

没有分支机构特定的文件 Git有:

  • 提交
  • 其中包含文件
  • 以及通过分支名称找到的
但是:

  • 两个或多个分支名称可以指定一个提交,并且
  • 您可以随时添加和删除分支名称
因此,由于分支并不是作为一种东西存在的,它们在任何时候都是完全可变的,因此实际上不可能有任何特定于分支的文件。只有提交特定的文件

不能忽略跟踪的文件 在评论中,你说:

我认为在我将文件以当前状态添加到.gitnore之后,从现在起,它将被忽略

事实并非如此

Git从来没有真正忽略过文件,
.gitignore
是这个文件的错误名称。但是,正确的名称应该是
.git-do-not-complaint-if-this-files-are-untracked-and-if-there-are-untracked-and-I-use-an-en-masse-add-command-do-not-make-theres-tracked
。虽然这里列出的文件就是这样做的,但是这个文件的名字很可笑,所以Git的人选择了
.gitignore
:一个不准确的名字,但是很短,人们可以输入

如何理解这一切 让这一切变得有意义的诀窍是改变你的观点。那些刚接触Git的人认为Git存储文件,并使用分支来实现这一点。这两种想法都是错误的!Git存储的东西是提交的

现在,提交确实包含文件。但这是一个全有或全无的交易:你要么有一个提交,因此它的所有文件,要么没有,因此你没有它的任何文件。每个提交中存储的文件每个提交保存每个文件的完整快照;稍后我们将回到这个想法,它以一种特殊的、只读的、仅Git的、压缩的和消除重复的形式存储。只有Git才能读取这些文件,甚至连Git本身都无法写入这些文件。这意味着提交的文件对于完成任何工作都毫无用处

由于提交的文件是无用的(用于完成工作),Git必须将提交的文件提取到工作区。在此工作区域中,提取的文件将扩展到其正常的日常形式。这些是您可以查看和使用的文件。它们是普通文件。它们唯一的特殊之处是Git在某个时候从某个提交中提取了它们

因为它们实际上是从提交中复制出来的副本,这些文件实际上根本不是Git格式的无论您喜欢什么,它们都是供您使用的。换句话说,它们是你的文件。Git的文件是为Git准备的,而你的文件是为你准备的:有时候,当你告诉Git时,Git只是复制一些文件

除了以这种特殊的Git格式存储的文件之外,每个提交还存储一些元数据,或者关于提交本身的信息。这包括作者姓名和电子邮件地址等内容。这里我们不会详细介绍,但是这个元数据对Git至关重要:没有它Git就无法工作

所有这些的要点是要看看您看到和使用的文件如何不是Git的文件。它们不在Git中,所以你可以用它们做任何你想做的事情。这基本上是一件好事,但因为它们不在Git中,所以您还可以向您的工作区添加更多文件,而这些文件一开始都不是Git提供的这些额外添加的文件是未跟踪的文件。这里有一些机制,了解这些机制很重要

Git的索引是Git了解文件的方式 如果您已经使用了一段时间的计算机和文件,那么您的工作树(存放文件的地方)非常简单。它就像您可以使用的任何其他文件集一样。你可以在这里随意创建和销毁文件。Git只是通过签出一些提交来为您设置一些文件。Git使用了一个分支名称来查找提交,我们稍后会回到这个想法,但现在,我们只注意到您的初始文件集可能来自刚才的提交。(如果不是,他们是前一段时间犯的错。)

这意味着每个文件都有两个副本:

  • 其中一个是只读副本,以安全的形式保存在当前提交中,并且可以永远访问(或者只要提交继续存在)
  • 另一个是一个常规文件,可以让你做任何你想做的事情
但是,在以内部Git-only格式存储只读、压缩和消除重复文件的提交和您的工作树(其中有这些普通文件)之间,Git添加了第三个副本,也就是这些文件的副本。第三个“副本”存储在Git调用的索引、暂存区域或缓存中。这三个术语都指同一件事。这里真正包含的是文件名和一些其他信息,包括有关预消除重复的副本的信息。当文件刚完成某个提交时,该消除重复的副本就是存储库中的永久冻结副本

由于该副本已冻结,因此所有使用该文件相同版本的提交都可以共享该副本。Git的索引也是如此。因此,它实际上不需要占用任何空间来谈论。这就是正在进行的重复数据消除

如果更改工作树c
git update-index --skip-worktree F
... <-F <-G <-H
...--F--G--H   <-- branch
          I--J   <-- br1
         /
...--G--H
         \
          K--L   <-- br2
          I--J   <-- br1 (HEAD)
         /
...--G--H
         \
          K--L   <-- br2
          I--J   <-- br1 (HEAD), br3
         /
...--G--H
         \
          K--L   <-- br2
               N   <-- br1 (HEAD)
              /
          I--J   <-- br3
         /
...--G--H
         \
          K--L   <-- br2
               N   <-- br1
              /
          I--J   <-- br3
         /
...--G--H
         \
          K--L   <-- br2 (HEAD)
               N   <-- br1
              /
          I--J   <-- br3
         /    \
...--G--H      M   <-- br2 (HEAD)
         \    /
          K--L