git用于移动/重命名的事实正在引起一些问题。我目前的状况如下:
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帖子之后,我尝试了一下,并得到了一个错误:
wireless-10-104-40-80:UMD-LabVIEW-Boot-Camp deepayanbhadra$ git mv Coin Toss.lvproj Basics
fatal: bad source, source=Coin, destination=Basics/Coin一定有一个非常简单的方法来做到这一点。然而,作为一个初学者,我被困住了。
发布于 2018-08-22 23:03:14
这与Git本身无关,与您的文件名和shell有关。
当您在shell中的命令行(输入之前以$结尾的行)输入命令时,shell本身会将命令拆分为一系列参数词,默认情况下使用空格:
$ word1 word2 word3 word4例如,不管每个单词之间的间距有多大,它只变成了四个单词。
然后将四个词的向量作为命令处理,第一个单词作为命令的名称,其余的三个字作为参数。如果该命令是,比方说,echo,它将简单地输出其每个参数:
$ echo A B C D
A B C D注意,echo在每个单词之间打印一个空格。如果命令是wc,则wc命令将每个参数视为文件名,并尝试打开该文件:
$ 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的文件中计数单词并运行:
$ wc Coin Toss.lvprojwc命令将看到两个独立的参数:Coin和Toss.lvproj,并尝试打开两个单独的文件。两种文件都不存在,因此命令将以与A B C D相同的方式失败。
您必须说服shell作为一个参数发送字符串Coin Toss.lvproj。有许多方法可以做到这一点;最简单的方法是使用引号:
$ wc "Coin Toss.lvproj"在这里,shell会看到引号,并且知道不应该使用空格来分离参数。shell移除引号,并将(单个)参数Coin Toss.lvproj传递给命令。
git命令接受要运行的子命令作为其第一个参数。然后,子命令mv接受一个或多个源文件名和目标目录名,或者(如果给定一个源文件名)目标文件名。因此,您必须再次保护文件名Coin Toss.lvproj中的空白,您可以这样做:
$ git mv "Coin Toss.lvproj" Basics你可以保护每个词:
$ git "mv" "Coin Toss.lvproj" "Basics"shell将尽职尽责地确保mv是一个单词(去掉引号),Basics也是一个单词,但这不是必要的,因为两个单词都不包含空格。
(这就是为什么在类似Unix的系统上不太使用带有嵌入式空白的文件名的原因:它们不方便,因为它们在使用shell时需要某种引用。)
在shell中还有许多其他形式的引用,包括使用反斜杠前缀:
$ git mv Coin\ Toss.lvproj Basics一些操作,如使用文件名完成,将自动完成此操作。
https://stackoverflow.com/questions/51975977
复制相似问题