19

我的仓库中有一个文件,我已将假设不变位设置为:

git update-index --assume-unchanged someFile.txt

偶尔,在对 repo 进行一些工作后,该位未设置,文件自动assume-unchanged不再存在。

谁在摸它?在我明确告诉 git 之前,我怎样才能使它永久化:

git update-index --no-assume-unchanged someFile.txt

这里发生了什么?


编辑:我在本地更改的配置文件上使用了假设不变位,并且永远不应该提交,更不用说向上游推送了。我不想在 中看到它们git status,也不想在其他任何地方看到它们,除非我明确告诉 git 我想编辑并提交其中一个。


编辑:好的,我想我设法重现了这个问题。

我从另一个 repo 提交了文件(它没有作为--assume-unchanged),拉到我的 repo 上,果然,这个位被重置了。

于是出现了两个问题:

  1. 是否可以在中央权威回购上设置此位,以便它传播到所有回购?
  2. 即使在远程更改之后,是否有可能使这个有点粘?
4

2 回答 2

3

IIRC 如果您忽略版本化文件,它将表现得像那样。您可以忽略所有工作树.gitignore或特定工作树.git/info/exclude(是的,它有效,但不是预期的做事方式)。

于 2011-09-13T09:27:47.727 回答
1

似乎--skip-worktree+ sparse checkout 可以允许这种行为。

git 假设不变 vs 跳过工作树 - 忽略符号链接带有一些上下文修改):

  • 为存储库设置core.sparseCheckout为 true。
  • 创建一个.git/info/sparse-checkout包含两种模式的文件:*包含所有内容并!/path/to/someFile.txt排除本地文件“someFile.txt”。
  • 现在,手动将 skip-worktree 位设置为 someFile.txt。

现在您可以继续操作,而不必担心 git 会自动提交目录,但请注意,如果有人在目录或其中的任何文件上显式运行 git add,您仍然会遇到问题。

手册页中的进一步研究似乎表明这--skip-worktree更适合被询问的用例。

于 2013-09-11T15:09:03.137 回答