git - Git 是否为克隆带来了未提交的更改?

标签 git bitbucket

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

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

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

所有常用措施,如 git reset --hard或者 stash 更改只会让我回到克隆时的存储库,包括我提到的未提交的更改。

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

最佳答案

一个可能的问题可能是:您的文件系统区分大小写。
在您的系统上:检查您使用的文件系统的设置是否与您同事的相同——他们的主分区是 HFS+ 吗?或 HFS+ 区分大小写?或一些 ext*格式 ?
在您的存储库中:检查是否存在仅大小写不同的路径(例如: Readme.jsonREADME.json 在同一目录中,或 src/testdata/foo.jsonsrc/TestData/foo.json )
您可以在 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

关于git - Git 是否为克隆带来了未提交的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811151/

相关文章:

Git 预提交 Hook : Prevent commits that change particular files

git - 删除历史记录中 merge 的分支?

git - 连接 Bitbucket 时更改 SSH 用户名

git - 如何将具有特定扩展名的文件从子目录添加到 git 存储库而不添加子目录本身?

git - 为什么 Google 存储库会同步到 headless 状态

git - 如何更改 Bitbucket 中的 git 提交消息?

merge Mercurial fork,更改分支

Github 功能,如 Bitbucket Pipeline

laravel-5 - Laravel 应用程序(AWS 服务器)中的严重缓存问题

Git 克隆无法与 npm 一起使用