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

时间:2019-04-23 12:23:01

标签: git bitbucket

我遇到了Git问题,据我所知,关于Git的工作原理,它永远都不会发生。

我正在尝试clone来自Bitbucket的干净目录中的存储库。克隆后,项目立即显示对存储库的未提交更改-git status显示了几个已修改的文件。这些更改对应于一个请求,该请求当前仍在等待修订,并且尚未由另一个开发人员合并到所述存储库中。

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

所有常见的措施,例如git reset --hard或隐藏更改,都将我带回到存储库,就像克隆时一样,包括我提到的未提交的更改

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

1 个答案:

答案 0 :(得分:0)

一个可能的问题可能是:您的文件系统区分大小写。

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

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

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

您可以使用 git ls-tree 查看由 git 存储的提交内容:

# 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

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


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

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