3

更准确地说,我相信“git clone”会成功,但会立即删除我生成的本地 repo 中的所有文件。可以在此处找到类似的问题,但我想不出一种方法可以将我对这个问题的扭曲作为答案,所以我来了。

以下是我的场景细节的概要:

我在 github 上有一个存储库。我可以像任何人期望的那样在 Ubuntu 12.04 上使用 git 克隆这个存储库。当我尝试克隆 wiki 时出现问题(github 可以通过https://github.com/<owner>/<repository>.wiki.git访问它)。我生成的本地副本是空的。运行“git status”后,我注意到 repo 的内容在克隆后立即被某个实体删除。

在分支主

要提交的更改:

(使用“git reset HEAD ...”取消暂存)

已删除:<文件名>

...对于我的 wiki 中的所有其他页面,依此类推。

“git branch -a” 为我和另一个人返回相同的东西:

*掌握

遥控器/原点/头 -> 原点/主

遥控器/原点/主控

更新 1

确实,我不知道暂存区和工作目录之间的区别,但这似乎不是问题。另一方面,它可能揭示了更多的错误。

我忘了提到,当我第一次克隆存储库时,我收到消息“无法统计 <long_filename>:文件名太长”

当我运行“git reset”时,所有的删除都列在“reset after unstaged changes:”下。奇怪的是 <long_filename> 被列为合并而不是删除。尽管如此,重置后我克隆到的目录中仍然看不到任何文件。

更新 2

我可以使用克隆文件夹中的 gitk 查看所有应该存在的 wiki 条目,但我很确定这些文件在我的文件系统的任何地方都没有以原始格式存在,否则“find / -name <filename> 2> /dev/null" 应该返回一些有用的输出。

更新 3

显然我的一个文件名太长了,git 无法管理。克隆后再次检查 repo 得到了所有文件,但那个文件: error: unable to create file <filename>.md (File name too long)

4

4 回答 4

1

请注意,除了静默失败之外,如果在克隆之前创建的空文件夹(而不是由克隆创建)也将被删除。

在您的情况下,失败是因为文件名太长。
但是,更一般地说,git clone $there $her即使 here 目录存在,只要它是一个空目录,也允许使用“e”,但是该命令在操作失败时错误地删除了它。
该部分已通过 Git 2.16.x/2.17(2018 年第一季度)修复

请参阅Jeff King ( )的提交 d45420c提交 f9e377a提交 8486b84提交 a4c4efd(2018 年 1 月 2 日) 。(由Junio C Hamano 合并——提交 addd37c中,2018 年 1 月 23 日)peff
gitster

clone: 不要清理我们没有创建的目录

曾几何时,git-clone会拒绝写入不是它自己创建的目录。因此,失败克隆的清理例程可以完全删除 git 和 worktree 目录。

55892d2(允许克隆到现有的空目录,2009-01-11,Git v1.6.2-rc0)中,我们学会了写入现有目录。这意味着这样做:

mkdir foo
git clone will-fail foo

最终删除foo.
这不是一个巨大的灾难,因为根据定义foo必须是空的。
但这有点令人困惑;我们应该保留我们找到的文件系统。


" git clone --separate-git-dir=$elsewhere" ( man )用于踩踏现有目录的内容,当Git 2.29 (Q4 2020) 不是空目录$elsewhere时,该目录被教导失败。$elsewhere

请参阅Ben Wijen ( ) 的提交 dfaa209(2020 年 7 月 10 日(由Junio C Hamano 合并 -- --提交 f175e9b中,2020 年 7 月 30 日)bwijen
gitster

git clone: 不要克隆到非空目录

签字人:Ben Wijen

当使用man并且已经存在时,它的内容被破坏了。git clone--separate-git-dir realgitdirrealgitdir

因此,请确保我们不会克隆到现有的非空目录中。

d45420c1(“ clone:不要清理我们没有创建的目录”,2018-01-02,Git v2.17.0-rc0 --批次 #1中列出的合并)在克隆失败后收紧清理程序时空目录,它假定给定的现有目录是一个空目录,因此可以保留该目录,同时运行旨在删除其中所有内容的清理过程(因为无论如何都不会有任何内容)。 检查并确保即使克隆到现有存储库中也是空的。
$GIT_DIR

于 2018-01-28T21:11:53.497 回答
0

在 OSX Mountain Lion 上,我遇到了错误

error: Untracked working tree file '.DS_Store' would be overwritten by merge.

显然,创建我的 OSX 查找器的令人讨厌的 .DS_Store 文件位于我试图克隆的远程存储库中。这是因为我最初在更新主计算机上的 .gitignore 文件之前推送了项目。

在 git 克隆到我的辅助计算机之前从远程存储库中删除 .DS_Store 为我解决了这个问题。这是我从我的主计算机上做的:

$   git rm .DS_Store 
$   git commit -m "removed .DS_Store"
$   git push
于 2013-03-28T13:17:36.293 回答
0

git checkout .应该丢弃自上次提交以来的所有本地更改,将您恢复到干净状态。

于 2012-10-29T18:38:43.220 回答
0

您可能不熟悉暂存区和工作目录之间的区别。

如果所有文件都显示为已删除,这仅意味着您的暂存区和工作目录之间存在差异;具体来说; 这些文件位于暂存区域,但不在您的工作目录中。

做吧git reset

于 2012-10-27T00:56:28.417 回答