Git 如果同步时文件未更改,会发生什么情况?

Git 如果同步时文件未更改,会发生什么情况?,git,Git,我正在git代码库上工作。我想更改服务器跟踪的项目xml文件。我想以一种方式进行设置: 我的本地更改应该被忽略,并且永远不会发送到服务器 服务器应在同步时覆盖我的本地更改 目前我使用 git update-index --assume-unchanged [my file name] 但我不确定服务器更新时会发生什么。来自 -[no-]假定未更改 。。。当“假定未更改”位打开时,[这]允许Git假定工作树文件与索引中记录的内容匹配。如果要更改工作树文件,需要取消设置位以告知Git 如果Gi

我正在git代码库上工作。我想更改服务器跟踪的项目xml文件。我想以一种方式进行设置:

  • 我的本地更改应该被忽略,并且永远不会发送到服务器
  • 服务器应在同步时覆盖我的本地更改
目前我使用

git update-index --assume-unchanged [my file name]
但我不确定服务器更新时会发生什么。

来自

-[no-]假定未更改

。。。当“假定未更改”位打开时,[这]允许Git假定工作树文件与索引中记录的内容匹配。如果要更改工作树文件,需要取消设置位以告知Git

如果Git需要在索引中修改此文件,例如在提交中合并时,Git将失败(正常)因此,如果假定的未跟踪文件在上游发生更改,则需要手动处理该情况。

因此,您需要
git更新索引——在引入更改之前,不要假定文件没有更改

例子
顺便说一句,我发现没有面向用户的命令来查看哪些索引文件有标志和/或清除这些标志是令人讨厌的,所以我写了一个:。我在~/.gitconfig中有以下内容:
[alias]假定=“!git ls files-v | grep^h | cut-c3-”
。所以我可以运行
git
查看文件列表。我猜你的功能比这更成熟。谢谢分享!是的,您需要考虑到
h
S
S
来测试假设不变和跳过工作树的所有三种可能组合(在这之后,您不希望只抛出状态字符)。
$ git status

  Changes not staged for commit:

      modified:   some-file.txt

$ git update-index --assume-unchanged some-file.txt

$ git status

  nothing to commit, working tree clean

$ git pull

  a1b2c3d4..a4b3c2d1  master     -> origin/master
  Updating a1b2c3d4..a4b3c2d1
  error: Your local changes to the following files would be overwritten by merge:
      some-file.txt
  Please commit your changes or stash them before you merge.
  Aborting