Git克隆导致删除和未跟踪的文件

wvt8vs2t  于 2022-12-10  发布在  Git
关注(0)|答案(9)|浏览(167)

我是Git的新手。
我刚安装了Git(2.9.3)适用于Windows(10),然后我打开git-bash,运行了一个git clone <remoteURL>。一个新的文件夹被创建,里面有远程仓库的完整副本,这很好。但是我运行了一个git status,得到了大量的deleted文件(我想所有刚刚复制的文件)准备好了to be committed,repository文件夹下的三个主要文件夹是untracked
我很确定我的git状态应该是干净的。这是怎么回事?
关于已删除文件的This没有帮助(我没有使用checkout),关于未跟踪文件的this也没有帮助(我没有使用Mac OS)。

jbose2ul

jbose2ul1#

我正在检索一个包含很长路径的大型项目。我忘了设置Git使用长路径:

git config --global core.longpaths true

在此之后,克隆进行得很顺利,状态也很干净。

falq053o

falq053o2#

这听起来像是你加载了一个空索引,通常情况下是用命令git read-tree --empty,但这不是git的新用户通常使用/知道的。
可能是克隆体出了问题,不过应该不难修复,跑就行了

git reset

并且索引应该被恢复到最近提交的内容。

eiee3dmh

eiee3dmh3#

这个问题不仅让“刚接触Git”的楼主感到困惑,也让我这个相当不错的Git verteran吓得屁滚尿流。:-)
感谢其他答案的提示,我意识到这是由于git碰巧无法 checkout 一些文件名包含当前文件系统和/或操作系统不支持的字符的文件。例如,我在克隆github wiki repo时遇到了同样的错误,一些wiki页面碰巧在其文件名中包含:,它们可以在我的Linux系统上克隆,但(事后看来)显然不是在我的Windows盒子上。
了解根本原因后,我们就可以自信地决定如何/是否修复此问题:

  • 我们可以在repo中通过将那些违规的文件名重命名为较短的文件名和/或仅包含常用字母来修复它。
  • 或者,从技术上讲,我们根本不需要修复它。如果那些冒犯的文件名在他们的目标平台上是好的,我们正在处理这个回购协议的其他内容,我们可以继续我们的工作照常进行;我们只需要记住不要将那些丢失的文件作为删除提交。不要在家里尝试。)
p5cysglq

p5cysglq4#

如果在Windows上遇到问题,可能会检查文件名是否包含这些禁用字符:

(小于)
(大于)
(冒号)
"(双引号)
/(正斜杠)

\(反斜扛)

|(竖线或竖线)

?(问号)

*****(星号)

或使用以下保留字之一命名的文件,或使用以下保留字之一后跟扩展名的文件:连接、PRN、辅助、空、通信1、通信2、通信3、通信4、通信5、通信6、通信7、通信8、通信9、LPT 1、LPT 2、LPT 3、LPT 4、LPT 5、LPT 6、LPT 7、LPT 8和LPT 9。
更多详细信息,请参阅here

t2a7ltrp

t2a7ltrp5#

如果你在这里结束和longpath属性不工作,你在Windows上运行,并使用Git Bash,你可能有文件使用保留关键字在Windows中.即,我有文件与nul在它,和那些被删除后克隆.我花了半天时间找到它是这个保留关键字的事情.
解决方案是简单地重命名文件(在您可以创建它的其他机器/操作系统上)。推送它,然后在您的Windows机器上重做克隆操作。

du7egjpx

du7egjpx6#

在我的例子中,我在Mac上的一个不区分大小写的文件系统中克隆了repo,但是repo包括一个名为Config的文件和一个名为config的目录,文件系统认为这是同一个东西。
修复方法是在区分大小写的文件系统上克隆存储库。

iklwldmw

iklwldmw7#

也可以在文件名中隐藏字符,在其他系统上查出来;)

yhuiod9q

yhuiod9q8#

我遇到了类似的问题与windows 10,我检查了其他窗口以及在那里git工作正常,我的git版本是2.24.xx.我安装了git旧版本的git 2.16.x,它解决了这个问题.尝试一下,让知道

pftdvrlh

pftdvrlh9#

将某些文件显示为已修改的行为可能与行尾设置和使用的多个客户端有关。每个操作系统都以自己的方式处理行尾。因此,如果您正在处理在多个操作系统中编辑文件的存储库,您可能会看到意外的结果
以下命令将永久解决此问题

git配置--全局核心。autocrlf输入

相关问题