Git 是否会在克隆上带来未提交的更改?

kac*_*e91 6 git bitbucket

我在使用 Git 时遇到了问题,根据我对 Git 工作原理的了解,这个问题永远不会发生。

我正在尝试clone从 Bitbucket 在一个干净的目录中创建一个存储库。克隆后,项目显示对存储库的未提交更改 -git status显示几个修改过的文件。这些更改对应于当前仍在等待修订并由另一位开发人员在所述存储库中取消合并的拉取请求。

我从中克隆的 URL 没有任何内容表明它指向任何特定的提交或拉取请求,并且存储库 HEAD 在 master 中。此外,使用rm -rf或什至切换到完全不同的目录删除目录,然后再次克隆会重现该问题。但是,我的同事无法在他们的本地机器上重现该问题。

所有通常的措施,比如git reset --hard或隐藏更改,都会让我回到克隆时的存储库,包括我提到的未提交的更改

什么可能导致这种奇怪的行为?

LeG*_*GEC 1

一个可能的问题可能是:文件系统的大小写敏感性。

在您的系统上:检查您使用的文件系统的设置是否与您同事的相同 - 他们的主分区是 HFS+ 吗?或者区分大小写的 HFS+ ?或者某种ext*格式?

在您的存储库上:检查是否存在仅大小写不同的路径(例如:Readme.jsonREADME.json在同一目录中,或src/testdata/foo.jsonsrc/TestData/foo.json

您可以通过以下方式检查报告为“已修改”的文件git status:检查所提到的路径上的文件和目录名称的大小写是否与git status您在磁盘上看到的完全一致(ls在终端中或使用 Finder)。

您可以使用以下命令查看 git 存储的提交内容git ls-tree

# view the content of the root of your repo :
git ls-tree --name-only HEAD

# view the content of directory 'src/demo' :
git ls-tree --name-only HEAD:src/demo

# view the complete list of files under a directory :
git ls-tree -r --name-only HEAD
git ls-tree -r --name-only HEAD:src/demo
Run Code Online (Sandbox Code Playgroud)

HEAD表示“当前提交”,您可以将其替换为任何内容(提交哈希、分支或标记名称、HEAD~4... stash@{2}


这是一篇简单的文章,给出了由于文件系统区分大小写而可能发生的情况的说明性示例:

https://www.hanselman.com/blog/git-is-casesensitive-and-your-filesystem-may-not-be-weird-folder-merging-on-windows