Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 是否可以忽略合并中的文件更改?_Git_Commit - Fatal编程技术网

Git 是否可以忽略合并中的文件更改?

Git 是否可以忽略合并中的文件更改?,git,commit,Git,Commit,我有两个分支,大师和展览。展览只是当地的一个分支机构 当我在两个分支上运行diff时,它显示sitemap.xml在分支之间有一些差异,即本地配置的路径。但是,当我从Experience合并到Master中时,Sitemap.xml中的更改不会合并,这很好(因为它们包含本地路径) 在两个分支上执行git status不会显示任何要添加/提交的内容,除非我做了其他更改,这些更改是我添加的,然后提交,然后在合并中进行 sitemap.xml文件不在gitignore中 在某个时候,我必须设置一些东西

我有两个分支,大师和展览。展览只是当地的一个分支机构

当我在两个分支上运行diff时,它显示sitemap.xml在分支之间有一些差异,即本地配置的路径。但是,当我从Experience合并到Master中时,Sitemap.xml中的更改不会合并,这很好(因为它们包含本地路径)

在两个分支上执行
git status
不会显示任何要添加/提交的内容,除非我做了其他更改,这些更改是我添加的,然后提交,然后在合并中进行

sitemap.xml文件不在gitignore中

在某个时候,我必须设置一些东西,所以站点地图的更改不会提交到live master版本,但我不知道是什么,或者如何找到什么。Git中是否有允许这样做的东西


我需要重新创建此行为,因为其他人在一个新分支中做了一些更改,该分支用他的更改覆盖了我的sitemap.xml。我错过了什么明显的东西吗?我本以为如果我没有添加或提交它,它会显示在git状态。

您可能会将
sitemap.xml
标记为假定未更改。从git帮助更新索引

要设置“假定未更改”位,请使用--假定未更改选项。要取消设置,请使用--no假定未更改。要查看哪些文件设置了“假定未更改”位,请使用git ls files-v(请参见git ls files(1))

下面的示例演示了该行为

$ git init
Initialized empty Git repository in /tmp/foo/.git/
$ echo 1 > sitemap.xml; git add sitemap.xml; git commit -m "sitemap"
[master (root-commit) f1a1f79] sitemap
 1 file changed, 1 insertion(+)
 create mode 100644 sitemap.xml
$ git checkout -b exhibition
Switched to a new branch 'exhibition'

$ echo 2 > sitemap.xml
$ git update-index --assume-unchanged sitemap.xml
$ git status
On branch exhibition
nothing to commit, working tree clean

$ echo a > A; git add A; git commit -m a
[exhibition af58c3b] a
 1 file changed, 1 insertion(+)
 create mode 100644 A
$ git status
On branch exhibition
nothing to commit, working tree clean
参考资料

--[否-]假设不变

指定此标志后,不会更新为路径记录的对象名称。相反,此选项设置/取消设置路径的“假定未更改”位。当“假定未更改”位打开时,用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的内容匹配。如果要更改工作树文件,需要取消设置位以告知Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大型项目时,这有时很有用

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


您不太可能有某种设置告诉git在合并中忽略站点地图;尤其是当它正在合并来自同事分支机构的站点地图更改时。分支机构之间的“合并基础”很可能与分支机构的
sitemap.xml
版本相同。在这种情况下,在合并过程中,
展览
分支将不会被视为更改文件,而
分支将被视为更改您正在谈论的本地路径;因此git将应用
master
分支更改,最终得到的文件与它在
master
上的外观相同

您可以使用以下命令来测试这一点

git diff --name-only exhibition $(git merge-base exhibition master)
如果此打印的列表不包括站点地图,则上面解释了您看到的内容

如果不是这样的话,那么不清楚是什么导致了这种行为(这是一个小问题,因为根据你所做的,可能还有其他影响)。特别是,您提到了
.gitignore
;这与合并的处理方式无关。
.gitignore
所做的唯一一件事就是使指定路径上的未跟踪文件在默认情况下保持未跟踪状态

这类问题通常会引出至少一个响应,建议使用索引标志,如
跳过工作树
假定未更改
。这些“解决方案”有时可能会奏效,但我不推荐它们。(一方面,由于该指数不是共享的,它们只会在本地回购中有效;因此,一种可能性是,您设置了类似的内容,现在遇到了它的一个限制。)至少,这不是它们设计用来支持的行为

在git中没有真正的好方法来实现这一点。您可以通过设置自定义合并驱动程序来实现,但这仅在文件本身需要合并时起作用;因此,如果文件未在
主机上更改,则不会产生任何效果


对于需要包含本地路径或配置的文件,最好的解决方案是在源代码管理下存储该文件的模板,并在构建过程中生成该文件本身。在这种情况下,生成的文件不应该放在源代码管理中,因此它要么包含在
.gitignore
中,要么在工作树之外的路径上生成(我个人更喜欢后者)。然后,您可以在源代码管理中包含一个或多个文件,这些文件的值将在不同的情况下合并到模板中,并使用构建工具选择其中一个文件或具有本地值的非源代码管理文件。

OK这是一个很好的调用。命令抛出了一个致命的错误:歧义参数$(git):未知版本。我会看看是否可以解决它。嗯……您使用的是什么类型的命令提示符?我建议的语法是针对bashWindows的
cmd.exe
或Powershell的,我想。作为一种解决方法,运行
git merge base exposition master
,将它打印的SHA-1名称复制到剪贴板,然后键入
git diff--name-o在不点击回车键的情况下,粘贴SHA-1以完成命令,然后执行它。感谢提示,我仍然没有找到问题,是的,我在cmd上很不幸(工作机器),我能够在VM上运行该命令,并尝试了Kostix解决方案,但均未返回任何结果:-/感谢所有帮助,我将解决该问题。