由于与本地排除的文件冲突,无法进行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
位对其进行标记。很高兴提供帮助