Git拉取错误: 无法创建文件 (参数无效)

62

我正在尝试将远程存储库与本地存储库同步,但出现以下错误。在Windows机器上,一些没有扩展名的文件无法与本地存储库同步,但我可以在MAC机器上成功同步。

是否有任何配置设置可在Windows上处理此类情况?

  1. 使用TortoiseGit
  2. Windows 7 64位机器

错误详情

git.exe clone     --progress -v  "https://github.com/xxxx/xxxxx.git" "C:\Data\GitHub\simility\vishesh-common"

Cloning into 'C:\Data\GitHub\simility\vishesh-common'...
POST git-upload-pack (200 bytes)
remote: Counting objects: 3912, done.
remote: Compressing objects: 100% (487/487), done.
Receiving objects: 100% (3912/3912), 2.70 MiB | 567.00 KiB/s, done.
Resolving deltas: 100% (1578/1578), done.
remote: Total 3912 (delta 409), reused 0 (delta 0)
Checking connectivity... error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030050305_fantasy-trilogy-spin?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030295038_laser-dogs?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030315317_arizona-native-bird-painting-series?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030315317_native-birds-ii?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030552097_ikeyboard-0?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030552097_ikeyboard?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030552097_only-you-can-prevent-computercide?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030552097_vector-cupholder-protect-your-laptop-and-your-lap?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_103055429_death-of-an-angel?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030650665_rachel-vanslyke-making-a-new-record-together-we-ca?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1030835091_russian-trucks-of-world-war-two?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1031873800_prop-expansion-next-level?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1031873800_prop-project-expansion?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1099860912_yaw-clock?ref=users (Invalid argument)
error: unable to create file kickstarter/parsers/data/kickstarter/campaigndetails/_projects_1099992656_heavenly-sight-a-vision-out-of-blindness?ref=users (Invalid argument)
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 did not exit cleanly (exit code 128) (21746 ms @ 29-09-2014 13:32:13)
8个回答

58

我曾遇到同样的问题,但不想重命名或删除这些文件。因此,如果您可以接受不使用稀疏检出访问这些文件,则可以尝试以下解决方法:

进入您存储库中的 .git 文件夹并打开文件 config。(您也可以使用 tortoise-git 编辑您的配置,但我这里没有安装。)在 [core] 部分添加以下行:

sparsecheckout = true

然后进入文件夹 .git/info,创建文件 sparse-checkout。添加类似以下内容:

then go to the folder .git/info and create the file sparse-checkout. Add something like
*
!kickstarter/parsers/data/kickstarter/campaigndetails/*

第一行包含所有内容,而第二行排除了kickstarter/parsers/data/kickstarter/campaigndetails/目录下的所有文件。现在你应该可以检出代码库了。使用通配符,您可能可以进行更复杂的排除操作。


这个方法可行,但后来我发现是权限问题。在我的Windows机器上,我不得不取消一些“只读”框,然后一切都恢复正常了。 - minitauros
@minitauros请解释一下您所说的取消选中某些“只读”框是什么意思? - Toluwalemi
我记不清是因为很久以前了,但可能我的意思是您需要选择一些文件,右键单击,进入“属性”并取消选中“只读”框。 - minitauros

30
如果我读取日志正确的话,这些文件名以“?ref=users”结尾。
Windows不允许在文件名中使用“?”、反斜杠或星号等字符。在Linux下,可以通过转义这些字符来实现。但在Windows上,我认为这是完全不可能的。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247
你将会遇到麻烦..我实际上想不出任何方法可以让你一一同步。您确实可以获取它们并将它们保存在一些安全名称下,例如_projects_1099992656_heavenly-sight-a-vision-out-of-blindness__ref=users,但我不知道如何自动执行此操作,或者如何随后通知Git有关该映射的信息,抱歉..
这些文件名看起来像是带有HTML查询参数的后缀。这真的是必需的吗?也许那只是一些可以删除的奇怪后缀?试着与项目维护者交谈,也许他们能够轻松地移除那个奇怪的后缀?

4

对我来说,当我在Windows机器上工作时出现了这个错误。而且git仓库是克隆在One-Drive里面的。最终,在将git位置更改为One-Drive之外后,问题得到了解决。不知何故,One-Drive无法更新我正在尝试提交的文件索引。你可以尝试在One-Drive之外的位置进行提交,或者尝试重置到先前的提交,然后再进行更新。


4
没问题,OneDrive同步出了问题。 - Rajesh Swarnkar
有没有任何步骤可以在不离开OneDrive的情况下解决此问题?git reset --soft HEAD~1 对我没用。 - Roelant
@Roelant 我认为 reset --hard 应该可以解决问题。 - buttercup

3
我正在使用Bitbucket,它有一个功能可以删除问题文件。
以下是操作步骤:
1. 进入你的代码库。 2. 选择“提交”菜单。 3. 选择要删除问题文件的分支。 4. 点击文件,进入文件概览页面,显示文件的详细信息,如代码、提交时间等。 5. 在右上角查看,会看到一个带有向下箭头的按钮(类似字母v),点击它。 6. 它会下拉并显示重命名按钮和删除按钮。 7. 然后根据需要选择重命名或删除。 8. 点击按钮后,Bitbucket将显示对话框,请按照提示进行操作,并点击提交按钮。 9. 提交后,您可以返回Sourcetree,并轻松拉取代码。 10. 尽情享受吧!

2

通常情况下,如果在Windows上出现git“无效参数”错误,请确保您的/.git/文件夹未设置为“只读”。这对我有用。


0

我遇到了这个问题,并尝试了上面的几种解决方案,但都没有成功。

我做的事情很奇怪,但对我起作用,我:

  1. 将我在一个文件中遇到的问题的所有更改复制到记事本中
  2. 在GIT中还原更改
  3. 从记事本中复制带有更新代码的文本
  4. 再次保存具有更改的文件
  5. 使用Git Desktop推送更改
  6. 这次它奏效了。

对于我来说,我做了两个不同的文件都奏效了。如果你只有1个或2个文件引起了问题,那么在尝试其他方法之前,可以尝试这种简单/快速的方法。


0

我也遇到了“Git:无法写入文件,无效的对象”的问题,并尝试了许多方法,但都没有起作用。最后我尝试了一个简单的方法,我在本地创建了一个新的repo文件夹,然后再次检出分支并实现更改。然后提交,它就可以工作了。

请注意,在执行操作之前,请备份更改,或者如果您正在为repo创建新文件夹,则不要删除该文件夹,直到您的更改已提交。


0

我在本地也遇到了类似的问题:突然无法执行git add -A,并收到以下消息:

错误:无法写入文件.git/objects/99/8fe363fa337daab318f7fc378727d9dcce28d5:参数无效 错误:[某个文件].js:插入数据库失败 错误:无法索引文件'[某个文件].js' 致命错误:添加文件失败

我从仓库中删除了该文件(将其暂时复制到其他位置),提交并推送了不包含有问题文件的仓库到GitHub。然后,在GitHub上,我手动添加了该文件并进行了提交。

此时,拉取到我的本地机器失败。我删除了目录/仓库,并从GitHub获取了一个新的克隆。这是一个奇怪的解决方案,但它似乎有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接