繁体   English   中英

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

[英]How to ignore a tracked file locally only

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

  • 将文件添加到.git \\ info \\ exclude
  • git update-index-假定未更改的myFile.json
  • git更新索引--skip-worktree myFile.json

修改文件并尝试切换分支时,两个update-index命令均会给出错误。

$ 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

此错误是因为根据git文档, “内容安全仍然是优先事项”。 有任何想法吗?

问题变成: 当您签出其他提交时,您myFile.json做什么?

背景

使用--skip-worktree (此处不使用--assume-unchanged ,这是一种速度破解,而不是绝对指令;请参阅Git-“ assume-unchanged”和“ skip-worktree”之间的区别 )告诉Git它不必太在乎对工作树文件的修改。 但是...它们对工作树文件的修改。 假设此文件的路径为P。 Git保留与HEAD提交匹配的索引版本-假设这是或将在我们正在查看时,提交ID1234567。工作树版本会更改,并且当您执行各种Git操作时,“跳过工作树版本”,只是继续使用P的索引版本。 这使您可以使用P的(未更改的)索引版本来修改工作树P ,甚至根据需要进行新的提交。

无论如何,您的P的工作树版本不再与您的P的索引版本匹配。 正如我们指出的那样,您现在处于提交1234567上,即git rev-parse HEAD生成该哈希ID。

但是,现在,我们发现要让Git签出其他提交,即将HEAD从提交1234567移到commitcba9或其他东西,Git将不得不替换或删除 P的索引版本。 它可以做到这一点,但是按照当前的编码,它也将替换或删除P的工作树版本。

(切换到一些其他的其他承诺,如说8888888-一个非常幸运的承诺在中国,可能不需要触碰P的索引版本。在这种情况下, git checkout会很乐意切换HEAD到该犯,再后来,再次回到1234567。但是fedcba9不太幸运。)

这是“安全的”替换或删除工作树版本P当且仅当 P的指数版本匹配HEAD P的版本,从此你可以从旧获取该版本P的背HEAD ,即从1234567在我们的例子中。 但是我们已经声明P的工作树版本与HEAD版本不匹配。 --skip-worktree标志不会更改操作的(取消)安全性; 这只是意味着其他各种操作不会抱怨工作树版本与索引版本不匹配。

那么,您P做什么?

现在,您确定要从commit 1234567移到fedcba9

提交1234567拥有P的版本,而您的P的索引版本与此匹配。 您的P的工作树版本没有。

提交fedcba9拥有P的不同版本,或者说P不再存在,并且P的索引版本与此不匹配。

检出fedcba9将把fedcba9P版本放入索引,或从索引中删除P。 这两种操作都应替换或删除P的工作树版本,以便您可以看到fedcba9中的内容(或不显示)。 绝对不同于1234567

看到版本的文件? 如果是这样,请将P的当前工作树内容保存到其他位置,将P还原到索引/ HEAD提交中的内容,然后签出fedcba9 现在,您将在工作树中fedcba9 您在其他地方保存的P将是安全的。

您是否在乎该文件的该版本中的内容,并且想要保留其中的内容? 如果是这样,请将P的当前工作树内容保存到其他位置,将P还原到索引/ HEAD提交中的内容,然后签出fedcba9 然后用您保存的其他位置的副本覆盖工作树中的所有内容。

Git不会为您选择任何一种,但是您自己做起来很容易。 您只需要确定哪个,然后执行即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM