我有2个GitHub存储库,我们将它们称为GH1和GH2,还有2个对应的本地存储库,我们将它们称为LR1和LR2,它们将它们作为远程对象。为了清楚起见,这是本地仓库到远程仓库的映射:
LR1-> GH1
LR2-> GH2
我使用GitHub Web UI手动将同一文件(称为A.jpg)上传(并提交)到两个GitHub存储库。当我尝试从遥控器合并回本地存储库时,会得到不同的结果。
我在命令行中使用git来解决此问题。
本地存储库(LR1)的行为与我期望的一样:git fetch
从远程获取更改,但不合并。git merge
合并A.jpg并快速转发本地存储库。git status
显示“没有任何提交,工作目录很干净”
另一个(LR2)的行为与我预期的有所不同:git fetch
从远程获取更改,但不合并。git merge
合并A.jpg并快速转发本地存储库。git status
显示A.jpg已修改,并且是未提交的更改。
git pull
相对于2个本地存储库,其行为方式相同,但是为了解决此问题,我认为我会明确调用2个git fetch
与git merge
pull相同的命令(和)。
我假设我以不同的方式配置了2个本地git存储库,这就是造成此问题的原因。什么会导致这种行为?
感谢这篇文章的有用评论,我将分享我对该问题的理解以及如何解决此问题。
该问题与SMB挂载,文件权限和git配置有关。问题是,当我使用git从远程同步到本地存储库并且git需要在本地存储库中创建新文件时,git使用其权限的默认设置(644)和SMB创建了一个新文件。本地存储所在的mount尚未为文件模式配置任何设置,因此使用的是默认设置(755)。最终结果是git认为它正在创建一个具有644权限的文件,但是一旦创建,它就假定了755权限,因为这是新文件的装载力...因此git认为刚创建的文件已更改,将其视为未提交的本地更改文件。通过一些更改解决了该问题:
file_mode=0644
与git想要的文件模式匹配的文件模式()git config --get core.fileMode
filemode = false
。git status
表明没有任何未提交的本地更改。这个git文档很好地解释了这是怎么发生的,这与我所经历的非常接近(即,在将远程回购复制到SMB挂载之前,将其复制到本地磁盘上的本地回购中,然后最终将其移动到SMB挂载中)
现在,将新文件添加到GitHub存储库中,然后再下拉到本地存储库中,则不再显示为本地未提交的更改。而是将它们正确且透明地合并。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句