Git克隆失败:无法创建文件。多字节或宽字符无效或不完整

时间:2017-08-18 23:15:35

标签: git encoding character-encoding

我在新计算机上执行了git clone repository。但是,当我这样做时,会发生以下情况:

Cloning into 'repository'...
remote: Counting objects: 12934, done.
remote: Compressing objects: 100% (9861/9861), done.
remote: Total 12934 (delta 3121), reused 12153 (delta 2963)
Receiving objects: 100% (12934/12934), 642.07 MiB | 138.00 KiB/s, done.
Resolving deltas: 100% (3121/3121), done.
Checking connectivity... done.
error: unable to create file 2017/08/07/sensitivepath/-A�%88scblabla?resize=800%2C600& (Invalid or incomplete multibyte or wide character)
Checking out files: 100% (13426/13426), done.
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'

现在,有一个与此提交有关的问题,几周前,我们不得不重置为先前的提交并将所有服务器都放在该提交上运行(如果我,所有服务器都执行了git fetch origin && git reset --hard origin/master回想一下)。问题是,特别是使用wget下载该文件,并且当尝试使用python操作它时(遗憾的是,2.7.12而不是3.4或3.5)它也崩溃了应用程序。

现在,我想我可以在失败的克隆上执行git fetch origin && git reset --hard origin/master命令以使其正确,但我遇到了问题:

error: unable to create file 2017/08/07/sensitivepath/-A�%88scblabla?resize=800%2C600& (Invalid or incomplete multibyte or wide character)
Checking out files: 100% (13426/13426), done.
fatal: Could not reset index file to revision 'origin/master'.

git状态给了我一个糟糕的提交,这个提交在很久以前就被撤消了(在我们推送新代码的时候,我们在存储库的其他版本中执行git pull,它工作正常......)。

所以,我继续做git checkout -f HEAD然后git pull,这是有效的。目前,关于此问题的所有自动化都包含此命令,但这似乎不应该发生。

如何摆脱引发此错误的此文件或解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

虽然它们都包含在一个方便的命令中,但git clone基本上包括:

  • mkdir:创建一个空目录来存放存储库;
  • git init:用一个新的,尚未空的存储库填写该空目录;
  • git remote add origin <url>:将空存储库配置为具有名为origin;
  • 的远程数据库
  • git fetch origin:从刚刚添加的遥控器获取所有提交(以及标签和任何相关对象);
  • 和最后,git checkout <something>

它是最后一个失败的部分,因为你建议(你的底层操作系统拒绝的文件名),其他操作系统必须接受它有问题的提交)。

这里有趣的是<something>部分,你可以控制它。如果您选择 not 来控制它,您的Git - 创建目录的人,创建存储库等等 - 询问其他 Git,在另一端<url>,哪个分支是默认分支。

通常,master,但任何分支都可以是默认分支。这取决于谁控制其他 Git存储库来配置默认值。配置方式取决于管理其他Git存储库本身的方式(这里没有提到)。

但是既然你可以控制你的 Git检出的内容,你可以简单地告诉你的 Git检查一个已知良好的分支名称:

git clone -b known_good_branch <url>

现在,您不必因为git checkout步骤失败而不得不重新克隆:此时您应该只能git checkout -b known_good_branch git clone在此Map<String, Object> data = new Gson().fromJson(json, type);创建的存储库中取出然后尝试并且未能查看&#34;坏&#34;枝尖。但是,修复你正在克隆的存储库也是明智的,这样它的默认分支 - 无论是什么 - 指向&#34;好的&#34;通过更改哪个分支是默认值,或者通过添加&#34; good&#34;来提交在当前(坏)默认分支的末尾提交,或两者都提交。

相关问题