Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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 - Fatal编程技术网

由于与本地排除的文件冲突,无法进行git拉取

由于与本地排除的文件冲突,无法进行git拉取,git,Git,我有一个本地排除的配置文件。我没有使用.gitignore,因为其他团队成员更新了该文件,但我的本地更改仅适用于我的计算机。我使用此问题作为如何排除该文件的参考: 一名团队成员已经更新了文件,我现在无法执行git拉取。我得到一个错误: error: Your local changes to the following files would be overwritten by merge: config/td_config.php Please commit your changes

我有一个本地排除的配置文件。我没有使用
.gitignore
,因为其他团队成员更新了该文件,但我的本地更改仅适用于我的计算机。我使用此问题作为如何排除该文件的参考:

一名团队成员已经更新了文件,我现在无法执行git拉取。我得到一个错误:

error: Your local changes to the following files would be overwritten by merge:
    config/td_config.php
Please commit your changes or stash them before you merge.
但是我的local没有显示对
td_config.php
的更改,因为它被排除在外。我不能承诺或隐藏它

我的问题是:

  • 当我期望远程设备不会知道对已排除文件的更改时,为什么远程设备会看到对已排除文件的本地更改

  • 我该如何避开这个问题

  • 我试过了
    git更新索引——不假设未更改的config/td_config.php
    无济于事

    当我期望远程设备不会知道对已排除文件的更改时,为什么远程设备会看到对已排除文件的本地更改

    因为,;事实上,它的目的正好相反(加粗):

    假设unchanged不应被滥用为忽略机制。信息技术 是“我知道我的文件系统操作很慢。我向Git保证这一点 我不会用那一点来改变这些路径——那样, Git不必检查我是否每次在那里更改了内容 请求“git status”输出。它并不意味着除此之外的任何东西 那个特别是,Git并没有承诺Git将永远 考虑这些路径是未修改的---如果Git可以确定路径 标记为“假定未更改”的已更改而未发生 额外lstat(2)成本,它保留报告路径的权利 已修改(因此,“git commit-a”可以自由提交 这一变化)

    是的,有很多资源建议
    假定未更改
    忽略对跟踪文件的本地更改。他们几乎都错了,你要问的问题是这可能失败的方式之一

    不幸的是,
    假设未更改
    通常看起来好像忽略了对文件的更改,所以人们继续使用它并推荐它

    我该如何避开这个问题

    ,但也不是完美的搭配。一个更好的解决方案是与您的团队进行协调,以提高效率

    不要和吉特打架;按照它应该被使用的方式使用它。它没有提供一种忽略跟踪文件的机制,而且所有当前的解决方法都有这样或那样的缺陷

    (如果你真的想忽略这个建议,你应该能够
    git更新索引--no-assessed unchanged
    文件,然后隐藏你的更改,然后拉取,然后应用更改,然后重新应用位。但是要知道它不能做你想做的事情。)

    编辑:

    OP评论说

    当我最初设置它时,我尝试了更新索引、跳过工作树和排除文件……因此在这一点上很难理解git到底是如何跟踪文件的

    运行
    gitls files-v config/td_config.php
    可以帮助我们确定哪些设置在该文件上处于活动状态。在这种情况下,我们得到了

    S config/td_config.php
    

    大写字母S向我们展示了这一点,而这一点在档案中尚未确定。运行
    git update index--no skip worktree config/td_config.php
    会将其返回到“常规状态”,此时可以使用前面的任何建议。

    隐藏文件,然后拉取
    git隐藏

    git pull


    git stash pop

    看起来我需要更多的澄清:我已经有一段时间没有设置本地忽略,所以我不记得我使用的确切过程。但是我现在在我的.git/info/exclude中有这个文件。您是对的,我不清楚“假定未更改”、“跳过工作树”和“排除文件”之间的区别,但在我看来,我看到的冲突并不是排除某些内容所期望的行为。我使用Tower作为gui,部分原因是为了避免使用我不懂的命令。
    .git/info/exclude
    也不能用于忽略对跟踪文件的更改。它与
    .gitignore
    完全相同,只是它没有被跟踪或共享。这是用于本地忽略,但就像
    。gitignore
    一样,它只会首先阻止跟踪文件,对跟踪的文件没有影响。这不会起作用,因为本地git无法识别对文件的任何更改,这是我想要的行为。请将文件复制到另一个目录,
    git checkout
    git pull
    ,然后将文件复制回来?正如我的问题所提到的,我尝试了更新索引——没有假定未更改的命令,但仍然无法拖动。当我最初设置它时,我尝试了更新索引、跳过工作树和排除文件(显然对它们的实际操作了解甚少),因此在这一点上很难理解git到底是如何跟踪文件的。我很确定我的团队不想花时间修改我们的工作流程,所以我必须自己找到解决办法。@TonyChapman,是的,我看到了。根据你迄今为止分享的内容,我不确定问题是什么;我希望我能说服你使用更合适的工作流程。我仍然不建议以这种方式滥用
    假定未更改
    跳过工作树
    ,我真的认为您应该向您的团队提出此更改。无论如何,如果可能的话,我愿意帮助你解决眼前的问题。gitls files-v config/td_config.php
    给出了什么?好的,大写字母
    S
    表示和。尝试运行
    git update index--no skip worktree config/td_config.php
    ,然后
    git stash保存“stash local config changes”
    ,拉出您的更改,然后
    git stash pop
    。然后,如果必须的话,
    git update index--skip worktree config/td_config.php
    再次使用
    skip worktree
    位对其进行标记。很高兴提供帮助