Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从git中删除具有奇怪名称的文件_Git - Fatal编程技术网

从git中删除具有奇怪名称的文件

从git中删除具有奇怪名称的文件,git,Git,我有一个文件,它成功地将自己命名为: # file's name (both lines) companies.yml companies.yml # entry in my git working tree "test/fixtures/companies.yml\342\200\250companies.yml" 出于恼人的原因,这个特定项目的工作树中充满了仍然需要组织的其他文件。我想把上面的条目去掉,但是当我尝试添加“测试/装置…”时,git添加“测试/装置…”或g

我有一个文件,它成功地将自己命名为:

# file's name (both lines)
companies.yml
companies.yml

# entry in my git working tree
"test/fixtures/companies.yml\342\200\250companies.yml"
出于恼人的原因,这个特定项目的工作树中充满了仍然需要组织的其他文件。我想把上面的条目去掉,但是当我尝试添加“测试/装置…”时,
git添加“测试/装置…”
git rm“测试/装置…”
失败:
fatal:pathspec'test/fixtures/companys.yml\342\200\250companys.yml'与任何文件都不匹配

我该怎么处理


Git状态 分支主机上的

#您的分支机构比“生产/主控”领先4%。
#
#未为提交而暂存的更改:
#(使用“git add…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
修改:[其他文件]
修改:“test/fixtures/companys.yml\342\200\250companys.yml”

Git正在打印文件名UTF-8编码的文字八位字节,因为它们是非ASCII字符,并将它们打印为八进制转义符。但是,您的shell不理解它们,并且在剪切和粘贴时向git命令发送文本反斜杠和数字,因此您实际上输入了不同的文件名

键入
test/fixtures/companys.yml
(如果您的shell支持此操作)后使用制表符补全,这将输入实际字符或使用通配符代替转义符,因此
test/fixtures/companys.yml*companys.yml
。后者可能(但可能不会)与其他文件名匹配


当然,另一种可能是将文件重命名为更合理的名称,然后使用
git add-u
/
git add.
让git注意到重命名。

既然您在bash中,您可以使用:

以\0开头的八进制转义最多可包含四位数字。
(POSIX最多指定三个)

您可以在“”中看到类似的解决方案

这将从索引中删除文件,同时仍将其保留在工作树中。
如果需要,可以重命名它


使用Git 2.18(2018年第二季度,6年后)进行更新,使用简单的完成方式应该是可行的

见(2018年4月16日)作者

完成:支持完成非ASCII路径名

除非用户在 配置时,“
git ls文件”和“
git diff index
”都将 默认情况下,引用包含值大于的字节的任何路径名
0x80
,并将这些字节转义为“
\nnn
”八进制值。
这将阻止在当前路径组件完成时完成路径 包含任何非ASCII字符,尤其是UTF-8字符,因为没有 列出的带引号的路径将与命令上的当前单词匹配 线路

设置“<代码>核心.QuoTePix= false ”用于“<代码> Git ls文件”和'<代码> Git DIFQ索引调用,因此它们不会认为字节比0x80“不寻常”,不会引用包含此类字符的路径名。 请注意,路径名包含反斜杠、双引号或控件 字符仍将被引用;本系列的后续补丁将提供 处理这些问题


我想删除git存储库中的一个文件夹,该文件夹的名称包含俄语字母:“ФаааафMail.RuАааа”。首先,我手动删除了该文件夹,并希望在git中使用

git rm "..."
下一步中的命令。但git给我看了一个非常刻薄的被删除文件夹的名称: “\320\244\320\260\320\271\320\273\321\213 Mail.Ru\320\220\320\263\320\265\320\275\321\202\320\260”。 我用恢复了文件夹

git checkout
而不仅仅是复制文件夹的名称并执行命令

git rm "Файлы Mail.Ru Агента/*"

成功了

我可以创建,
git add
git rm
一个具有该名称的文件,几乎没有任何问题。您在哪个平台上?git rm test/fixtures/companys.yml*(如果您没有与该模式匹配的其他文件)?使用通配符处理有问题的文件名是一个古老的传统。
git checkout--test/fixtures…
do做什么?@larsmans-我在OS X上。@MichałPolitowski-我尝试过了,但文件不见了,但工作树仍然有“deleted”行项。我的shell中没有制表符完成,因此,我将Finder中的名称直接复制到
git-rm“text/fixtures/[paste]”
。这成功了+1@sscirrus对该问题的完整解释和有效解决方案+我也从我的本地repo中删除了一个wordpress安装(上传时包含UTF8字符),并且
git rm blog/*
创造了奇迹。谢谢谢谢@VonC。不错的解决方案,+1。我刚刚意识到这些解决方案只是将文件移动到要提交的
更改中。这不是让我的工作树一个人呆着…@sscirrus我编辑了答案,以确保工作树不受影响。
git checkout
git rm "Файлы Mail.Ru Агента/*"