我有2个GitHub存储库,我们将它们称为 GH1 和 GH2 ,以及2个相应的本地存储库,我们将它们称为 LR1 和 LR2 ,将它们作为遥控器。为了清楚起见,这是本地存储库到远程存储库的映射:
LR1 ---> GH1
LR2 ---> GH2
我使用GitHub Web UI手动将同一文件(称为 A.jpg )上传(并提交)到两个GitHub存储库中。 当我尝试从遥控器合并回本地存储库时,会得到不同的结果。
出于此问题,我在命令行上使用git。
一个本地存储库( LR1 )的行为与我期望的一样:
step
从远程获取更改,但不合并。
num
合并 A.jpg 并快速转发本地存储库。
git fetch
显示“没有任何内容可以进行,工作目录很干净”
另一个( LR2 )的行为与我期望的不同:
git merge
从远程获取更改,但不合并。
git status
合并 A.jpg 并快速转发本地存储库。
git fetch
显示 A.jpg 被修改,并且是未提交的更改。
git merge
的行为方式相同,但是为了解决此问题,我想我会明确调用2个命令(git status
和{{ 1}})的功能与拉动功能相同。
我假设我以不同的方式配置了2个本地git仓库,这就是问题所在。 什么会导致这种行为?
答案 0 :(得分:1)
感谢这篇文章的有用评论,我将分享我对该问题的理解以及解决方法。
问题与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 documentation很好地说明了这是怎么发生的,这与我所经历的非常接近(即,在将SMB挂载之前,将远程回购克隆到本地磁盘上的本地回购中,然后最终将其移动到本地到SMB挂载)
现在,将新文件添加到GitHub存储库中,然后下拉至本地存储库,不再显示为本地未提交的更改。而是将它们正确,透明地合并。