使用 git mv 并避免致命的 source/destination 错误
Using git mv and avoid fatal source/destination error
事实上 git mv 用于两个 moving/renaming 导致了一些问题。我目前的状态是这样的:
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是一个folder/directory,其余都是文件。我想将所有文件移动到 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
一定有一种非常简单的方法可以做到这一点。然而,作为初学者,我被卡住了。
这与 Git 本身无关,与您的文件名和 shell.
无关
当您在 shell 的命令行中输入命令时(开始输入前以 $
结尾的行),shell 本身会将命令分解成一系列参数词,默认使用白色-space:
$ word1 word2 word3 word4
例如变成四个单词,不管每个单词之间的 space 数量。
然后将这个包含四个单词的向量视为命令,第一个单词是命令的名称,其余三个单词作为参数。例如,如果命令是 echo
,它会简单地打印回它的每个参数:
$ echo A B C D
A B C D
请注意,echo 在每个单词之间打印一个 space。例如,如果命令是 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.lvproj
wc
命令会看到两个单独的参数:Coin
和 Toss.lvproj
,并尝试打开两个单独的文件。 两个文件都不存在 所以命令会像 A B C D
.
一样失败
您必须说服 shell 将字符串 Coin Toss.lvproj
作为一个参数发送。有很多方法可以做到这一点;最简单的是使用引号:
$ wc "Coin Toss.lvproj"
这里的shell看到引号就知道space应该不单独的参数。 shell 删除引号并将(单个)参数 Coin Toss.lvproj
传递给命令。
git
命令将 运行 的子命令作为其第一个参数。子命令 mv
然后采用一个或多个源文件名和目标目录名,或者(如果给定一个源文件名)目标文件名。所以再一次,你必须保护文件名中的空白Coin Toss.lvproj
,你可以这样做同样的方法:
$ git mv "Coin Toss.lvproj" Basics
你可以保护每个字:
$ git "mv" "Coin Toss.lvproj" "Basics"
和 shell 会尽职尽责地确保 mv
是一个词(去掉引号)并且 Basics
也是一个词,但那不是 必要 因为两个词都不包含白色-space.
(这就是为什么带有白色 space 的文件名在类 Unix 系统上使用得不多:它们 不方便 因为它们需要某种引用当使用 shell.)
shells 中还有许多其他形式的引用,包括使用反斜杠前缀:
$ git mv Coin\ Toss.lvproj Basics
有些操作(例如使用文件名补全)会自动执行此操作。
事实上 git mv 用于两个 moving/renaming 导致了一些问题。我目前的状态是这样的:
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是一个folder/directory,其余都是文件。我想将所有文件移动到 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
一定有一种非常简单的方法可以做到这一点。然而,作为初学者,我被卡住了。
这与 Git 本身无关,与您的文件名和 shell.
无关当您在 shell 的命令行中输入命令时(开始输入前以 $
结尾的行),shell 本身会将命令分解成一系列参数词,默认使用白色-space:
$ word1 word2 word3 word4
例如变成四个单词,不管每个单词之间的 space 数量。
然后将这个包含四个单词的向量视为命令,第一个单词是命令的名称,其余三个单词作为参数。例如,如果命令是 echo
,它会简单地打印回它的每个参数:
$ echo A B C D
A B C D
请注意,echo 在每个单词之间打印一个 space。例如,如果命令是 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.lvproj
wc
命令会看到两个单独的参数:Coin
和 Toss.lvproj
,并尝试打开两个单独的文件。 两个文件都不存在 所以命令会像 A B C D
.
您必须说服 shell 将字符串 Coin Toss.lvproj
作为一个参数发送。有很多方法可以做到这一点;最简单的是使用引号:
$ wc "Coin Toss.lvproj"
这里的shell看到引号就知道space应该不单独的参数。 shell 删除引号并将(单个)参数 Coin Toss.lvproj
传递给命令。
git
命令将 运行 的子命令作为其第一个参数。子命令 mv
然后采用一个或多个源文件名和目标目录名,或者(如果给定一个源文件名)目标文件名。所以再一次,你必须保护文件名中的空白Coin Toss.lvproj
,你可以这样做同样的方法:
$ git mv "Coin Toss.lvproj" Basics
你可以保护每个字:
$ git "mv" "Coin Toss.lvproj" "Basics"
和 shell 会尽职尽责地确保 mv
是一个词(去掉引号)并且 Basics
也是一个词,但那不是 必要 因为两个词都不包含白色-space.
(这就是为什么带有白色 space 的文件名在类 Unix 系统上使用得不多:它们 不方便 因为它们需要某种引用当使用 shell.)
shells 中还有许多其他形式的引用,包括使用反斜杠前缀:
$ git mv Coin\ Toss.lvproj Basics
有些操作(例如使用文件名补全)会自动执行此操作。