Git 如何仅在本地忽略跟踪的文件

Git 如何仅在本地忽略跟踪的文件,git,Git,如何仅在本地忽略已在索引中的文件?我不想从索引中删除该文件,从而影响其他人。我尝试过的事情: 已将文件添加到.git\info\exclude git更新索引--假定myFile.json未更改 git更新索引--跳过工作树myFile.json 当文件被修改并试图切换分支时,这两个更新索引命令都会出错 $ git checkout myBranch error: Your local changes to the following files would be overwritten b

如何仅在本地忽略已在索引中的文件?我不想从索引中删除该文件,从而影响其他人。我尝试过的事情:

  • 已将文件添加到.git\info\exclude
  • git更新索引--假定myFile.json未更改
  • git更新索引--跳过工作树myFile.json
当文件被修改并试图切换分支时,这两个更新索引命令都会出错

$ git checkout myBranch
error: Your local changes to the following files would be overwritten by checkout:
        myFile.json
Please commit your changes or stash them before you can switch branches.
Aborting
这一错误是因为“内容安全仍然是一个优先事项”,根据。有什么想法吗?

问题变成了:当您签出其他提交时,希望
myFile.json
发生什么

背景 使用
--skip worktree
(这里不要使用
--假设unchanged
,它的意思是一种速度攻击,而不是一个绝对指令;请参阅)告诉Git不应该太关心对工作树文件的修改。但是它们是对工作树文件的修改。假设这个文件的路径是P。Git留下了与
头匹配的索引版本
commit让我们假设这个是,或者在我们查看它时将是,commit ID 1234567。工作树版本会发生变化,当您执行各种Git操作时,它会“跳过工作树版本”并继续使用P的索引版本。这允许您使用P的(未更改的)索引版本修改工作树P,甚至进行新的提交(如果您愿意)

在任何情况下,您的p的工作树版本不再与您的p的索引版本匹配。正如我们所指出的,您现在正在提交1234567,即,
git rev parse HEAD
生成该散列ID

现在,我们发现Git要签出另一个提交,即从提交1234567移动
HEAD
到提交fedcba9或其他任何东西,Git必须替换或删除p的索引版本。它可以这样做,但正如它当前编码的那样,这也会替换或删除p的工作树版本

(切换到其他一些提交,比如说88888888-在中国,一个非常幸运的提交可能不需要触摸p的索引版本。在这种情况下,
git checkout
会很高兴切换到该提交,然后再切换到1234567。但fedcba9就没那么幸运了。)

当且仅当p的索引版本与p的
版本匹配时,替换或删除p的工作树版本是“安全的”,因为这样您就可以从旧的
中,即在我们的示例中从1234567中获得p的版本。但是我们已经声明了P的工作树版本与
HEAD
版本不匹配。
--skip worktree
标志不会更改此操作的(un)安全性;这只是意味着其他各种操作不会抱怨工作树版本与索引版本不匹配

那么,你想让P怎么样? 此时,您肯定希望从commit
1234567
移动到commit
fedcba9

Commit
1234567
保存p的一个版本,并且p的索引版本与之匹配。您的工作树版本的P没有

Commit
fedcba9
持有不同版本的p,或者说p不应该再存在,而您的p的索引版本与此不匹配

签出
fedcba9
将把
fedcba9
的p版本放入索引,或从索引中删除p。这两种操作都应该替换或删除P的工作树版本,以便您可以查看fedcba9中的内容(或不在fedcba9上)。它绝对不同于
1234567
中的内容

您想查看该文件的版本吗?如果是这样,请将P的当前工作树内容保存到其他位置,将P恢复到索引/头提交中的内容,然后签出
fedcba9
。现在,您将在工作树中看到
fedcba9
中的内容。你在别处保存的P在别处是安全的

您是否不关心该文件版本中的内容,并希望保留现在的内容?如果是这样,请将P的当前工作树内容保存到其他位置,将P恢复到索引/头提交中的内容,然后签出
fedcba9
。然后用保存在别处的副本覆盖工作树中的任何内容

Git不会为您选择这两个选项中的任何一个,但您可以自己选择。你只需要决定哪一个,然后去做。

问题变成了:当你签出其他提交时,你希望
myFile.json
发生什么

背景 使用
--skip worktree
(这里不要使用
--假设unchanged
,它的意思是一种速度攻击,而不是一个绝对指令;请参阅)告诉Git不应该太关心对工作树文件的修改。但是它们是对工作树文件的修改。假设这个文件的路径是P。Git留下了与
头匹配的索引版本
commit让我们假设这个是,或者在我们查看它时将是,commit ID 1234567。工作树版本会发生变化,当您执行各种Git操作时,它会“跳过工作树版本”并继续使用P的索引版本。这允许您使用P的(未更改的)索引版本修改工作树P,甚至进行新的提交(如果您愿意)

在任何情况下,您的p的工作树版本不再与您的p的索引版本匹配。正如我们所指出的,您现在正在提交1234567,即,
git rev parse HEAD
生成该散列ID

现在,我们发现Git要签出另一个提交,即从提交1234567移动
HEAD
到提交fedcba9或其他任何东西,Git必须替换或删除p的索引版本。它可以这样做,但正如它当前编码的那样,这也会替换或删除p的工作树版本

(切换到其他一些提交,例如888888)