【发布时间】:2021-01-12 22:35:31
【问题描述】:
我有 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 并快进本地 repo。
git status 表示“没有什么要提交,工作目录干净”
另一个 (LR2) 的行为与我预期的不同:
git fetch 从远程获取更改但不合并它。
git merge 合并 A.jpg 并快进本地 repo。
git status 表明 A.jpg 已修改并且是未提交的更改。
git pull 对于 2 个本地存储库的行为方式相同,但为了解决这个问题,我想我会明确调用 2 个命令(git fetch 和 git merge)与拉动相同。
我假设我有 2 个本地 git repos 配置不同,这导致了问题。 什么会导致这种行为?
【问题讨论】:
-
检查本地 repo 2 是否启用了 CRLF 样式的行尾修改并将
A.jpg视为文本文件。如果是这样,请确保它将A.jpg视为二进制,或者没有打开 CRLF 调整。 -
@Kevin
git check-attr --all -- A.jpg在两个存储库中返回什么? -
SMB 共享不应引起问题,但值得尝试将其消除。
-
啊哈!这是您的 SMB 服务器试图补偿 Windows 执行位权限(或缺乏)。这有点奇怪,因为 Linux 具有适当的执行权限,而且我认为有一种有效的翻译方法。有关一些猜测,请参阅unix.stackexchange.com/questions/103415/…。
-
如果不能让SMB服务器和Linux系统配合,可以让Git显式忽略执行权限。事实上,如果服务器始终保持
x位设置,git init或git clone应该已经这样做了,这表明服务器可以同时支持模式 644 和 755,并且只是错误地创建文件(通过在创建后使用 Linux 系统 chmod,这在 Linux 挂载端可能大部分是可修复的)。在任何情况下,Git 设置都是core.filemode(可以拼写为core.fileMode)。
标签: git github git-merge git-fetch