我刚刚删除了我的git repo并重新克隆了它。我无法弄清楚我将如何遇到下面的错误。
我在另一台机器上使用相同的仓库(和其他几十台人一样)。我尝试按照建议的git checkout -f HEAD
进行操作。它同步了许多在克隆期间遗漏的文件,但它仍然以某种方式显示了几十个修改和丢失的文件。我完全删除了旧目录。 df -h
显示可用磁盘空间。
$ git clone git@github.com:myrepo/src.git
Cloning into 'src'...
remote: Counting objects: 83096, done.
remote: Compressing objects: 100% (309/309), done.
remote: Total 83096 (delta 351), reused 385 (delta 228), pack-reused 82556
Receiving objects: 100% (83096/83096), 785.59 MiB | 22.16 MiB/s, done.
Resolving deltas: 100% (41943/41943), done.
Checking connectivity... done.
error: Untracked working tree file 'common/ml/.pylintrc' would be overwritten by merge.
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'
答案 0 :(得分:1)
首先,请注意git clone
本质上是一个包含以下步骤的多步骤过程:
创建一个新的空目录(或使用现有的空目录,如果有指示)。在这个新的空目录中完成所有工作。
在此空目录中创建一个空的Git存储库:git init
。
使用您提供的网址,默认添加名为origin
的远程。进行任何必要的配置(使用git config
或git remote add
)进行设置。根据您指定的配置选项,此时也可以进行其他配置。
运行git fetch origin
(或您告诉Git使用的任何名称,而不是origin
),以便从您提供的网址中提交所有提交内容。
在某个分支名称上运行git checkout
,可能是master
,创建一个名为master
的本地分支,指向与{{{1}相同的提交1}}。
这是失败的最后一步。现在,我们从上面知道origin/master
应该是一个新的空目录。这意味着它实际上不能具有名为src
的现有文件。
可能会发生的事情是,正在检出的提交中可能有一个名为common/ml/.pylintrc
的文件,这个common/ml/.pylintrc
放入工作树。然后,在早期或稍后,正在检出的提交可以具有另一个名为git checkout
或COMMON/ML/.pylintrc
的文件或一些基本上相同名称的文件。< / p>
如果使用您正在克隆的存储库的人正在使用Linux,默认情况下它具有区分大小写的文件系统,这两个名称 - common/ML/.pylintrc
和common/ml/.pylintrc
或其他任何名称两个不同的文件,一切都很好。
但是,如果您使用的是Mac或Windows系统,并且默认情况下使用 敏感的文件系统,则这两个不同的文件名名称相同文件。所以你的Git会用另一个文件覆盖一个文件,并意识到这是坏消息并中止common/ML/.pylintrc
步骤。
解决此类问题的最简单方法是运行Linux(例如,在Mac上的VM中)。在那里克隆存储库,解决问题,以便没有多个文件名只在大小写,提交,获得上游采用的修复方面有所不同,现在您可以在Mac或Windows系统上工作,将这两个不同的文件名视为一个基础文件。
理论上可以通过其他方式解决这个问题,但它们肯定更难,而且我没有尝试过。