我们正在尝试编写一个脚本,根据提交历史记录发布文章。我们运行了以下命令,它没有提交,而是将我们放入了一个Python终端:
cchilders:~/blogplish (master)
$ git commit -m "You can run this file using the `python` command in your terminal:\n```$ python blogplish.py\nThe script is working.```"
Python 2.7.12 (default, Jul 1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
我们很好奇为什么它会这样做,上面命令中的两条Python中的哪一条导致了这个问题。还有,当我们做出这样的承诺时,如何防止这种情况发生。脚本将生成的目标语言是markdown。你知道吗
代码学徒提供了一个很好的选择。你知道吗
如果确实要在命令行上提供提交消息,则应该能够使用单引号而不是双引号:
Bash(Ubuntu系统上的默认shell)doesn't process backticks in single-quoted strings。你知道吗
我建议您不要使用
-m
标志,而是使用文本编辑器(默认情况下是vim)来编辑您的消息。这将避免命令行将消息解释为命令。如果您不熟悉vim,可以将文本编辑器设置为更适合您的内容。你知道吗另外,在文本编辑器中编辑消息的另一个好处是,您可以更轻松地输入多行消息。当您有管理提交消息的团队约定时,这尤其有用。另外,像GitHub这样的服务在长的单行提交消息中表现不好。你知道吗
这与Python本身无关,也与Git无关,一切都与shell(命令行解释器)有关。你知道吗
大多数Unix shell都有一些语法特性:
$var
和反引号扩展,如`command`
。但是请注意,双引号引用单引号,因此"he said 'hello'"
保留内部单引号。你知道吗在这种情况下:
part让shell运行
python
,看看它在标准输出上产生了什么。无论那是什么,在那一点上都会被取代。你知道吗(这种反向报价扩展很难使用。如果您想要它,通常最好使用
$(...)
,因为圆括号可以帮助人们找出命令内部的内容,嵌套变得很明显:reprocess $(process files $(ls))
意味着:ls
process files
reprocess
如果
ls
打印README hello.txt
,这就像运行process files README hello.txt
。然后process
打印的内容被拼接到reprocess
的参数中。)要完成这里的项目,首先要按顺序运行并拼接所有的后引号表达式。有四对反引号:
其中两个是空的,所以它们不运行也不拼接。一个运行
python
,最后一个运行$
,这可能会产生:但是在shell到达该点之前,它必须首先完成第一个
python
(然后运行empty命令)。你知道吗最后,正如其他人提到的,您可以不使用} documentation :可以使用
-m
运行,或者使用带有-m
的强引号变体。还有另一种选择,我们需要the ^{-F <file>
或file=<file>
运行提交来从准备好的文件读取消息。您甚至可以使用-F -
从标准输入读取消息:例如。你知道吗
相关问题 更多 >
编程相关推荐