首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用git mv并避免致命的源/目标错误

使用git mv并避免致命的源/目标错误
EN

Stack Overflow用户
提问于 2018-08-22 22:24:34
回答 1查看 4.4K关注 0票数 1

git用于移动/重命名的事实正在引起一些问题。我目前的状况如下:

代码语言:javascript
复制
wireless-10-104-40-80:UMD-LabVIEW-Boot-Camp deepayanbhadra$ ls
AND Gate.lvproj             Integer Detector.lvproj
Account Balance.lvproj          Integer Parity Detector.lvproj
Basics                  LICENSE
Coin Toss.lvproj            Palindromic Word Detector.lvproj
Convert Temperature.lvproj      README.md

在这里,Basics是一个文件夹/目录,其余的是文件。我想将所有文件移到Basics文件夹中。在查阅了一些SO帖子之后,我尝试了一下,并得到了一个错误:

代码语言:javascript
复制
wireless-10-104-40-80:UMD-LabVIEW-Boot-Camp deepayanbhadra$ git mv Coin Toss.lvproj Basics
fatal: bad source, source=Coin, destination=Basics/Coin

一定有一个非常简单的方法来做到这一点。然而,作为一个初学者,我被困住了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 23:03:14

这与Git本身无关,与您的文件名和shell有关。

当您在shell中的命令行(输入之前以$结尾的行)输入命令时,shell本身会将命令拆分为一系列参数词,默认情况下使用空格:

代码语言:javascript
复制
$ word1     word2 word3    word4

例如,不管每个单词之间的间距有多大,它只变成了四个单词。

然后将四个词的向量作为命令处理,第一个单词作为命令的名称,其余的三个字作为参数。如果该命令是,比方说,echo,它将简单地输出其每个参数:

代码语言:javascript
复制
$ echo    A           B C         D
A B C D

注意,echo在每个单词之间打印一个空格。如果命令是wc,则wc命令将每个参数视为文件名,并尝试打开该文件:

代码语言:javascript
复制
$ wc A B C D
wc: A: No such file or directory
wc: B: No such file or directory
wc: C: No such file or directory
wc: D: No such file or directory
0 0 0 total

如果您想在名为Coin Toss.lvproj的文件中计数单词并运行:

代码语言:javascript
复制
$ wc Coin Toss.lvproj

wc命令将看到两个独立的参数:CoinToss.lvproj,并尝试打开两个单独的文件。两种文件都不存在,因此命令将以与A B C D相同的方式失败。

您必须说服shell作为一个参数发送字符串Coin Toss.lvproj。有许多方法可以做到这一点;最简单的方法是使用引号:

代码语言:javascript
复制
$ wc "Coin Toss.lvproj"

在这里,shell会看到引号,并且知道不应该使用空格来分离参数。shell移除引号,并将(单个)参数Coin Toss.lvproj传递给命令。

git命令接受要运行的子命令作为其第一个参数。然后,子命令mv接受一个或多个源文件名和目标目录名,或者(如果给定一个源文件名)目标文件名。因此,您必须再次保护文件名Coin Toss.lvproj中的空白,您可以这样做:

代码语言:javascript
复制
$ git mv "Coin Toss.lvproj" Basics

你可以保护每个词:

代码语言:javascript
复制
$ git "mv" "Coin Toss.lvproj" "Basics"

shell将尽职尽责地确保mv是一个单词(去掉引号),Basics也是一个单词,但这不是必要的,因为两个单词都不包含空格。

(这就是为什么在类似Unix的系统上不太使用带有嵌入式空白的文件名的原因:它们不方便,因为它们在使用shell时需要某种引用。)

在shell中还有许多其他形式的引用,包括使用反斜杠前缀:

代码语言:javascript
复制
$ git mv Coin\ Toss.lvproj Basics

一些操作,如使用文件名完成,将自动完成此操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51975977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档