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