Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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
Python 使用Makefile命令从Docker运行黑色格式化程序_Python_Git_Docker_Makefile_Python Black - Fatal编程技术网

Python 使用Makefile命令从Docker运行黑色格式化程序

Python 使用Makefile命令从Docker运行黑色格式化程序,python,git,docker,makefile,python-black,Python,Git,Docker,Makefile,Python Black,我不是在本地机器上安装Black,而是尝试从Docker容器中运行从requirements.txt安装的Black。我想添加一个Makefile命令来格式化修改过的文件。这是我到目前为止提出的,使用make格式运行: 这将查找当前分支从主分支分叉的点 : 这将返回从扩展名为.py的diff中返回的文件名。py过滤器可能是多余的 希望听到一些反馈或类似设置的示例。美元符号很重要:它们引入了变量。如果要将美元符号传递给shell脚本,请在$shell内执行。。函数,您需要通过将它们写为$$: 否则

我不是在本地机器上安装Black,而是尝试从Docker容器中运行从requirements.txt安装的Black。我想添加一个Makefile命令来格式化修改过的文件。这是我到目前为止提出的,使用make格式运行:

这将查找当前分支从主分支分叉的点

:

这将返回从扩展名为.py的diff中返回的文件名。py过滤器可能是多余的


希望听到一些反馈或类似设置的示例。

美元符号很重要:它们引入了变量。如果要将美元符号传递给shell脚本,请在$shell内执行。。函数,您需要通过将它们写为$$:


否则,make认为$git merge base-fork point master是一个长且看起来非常奇怪的make变量,所有未定义的make变量都计算为空字符串。

由于美元符号用于命令替换,而不是引用变量,所以用$$error转义它们不是不正确吗?我已经测试了我原始问题中定义的格式目标,它似乎没有任何问题,我是否误解了什么?正如我在回答中提到的,如果您想要一个make变量或函数,请使用单个$,不要逃避它。例如,如果要将值传递给shell,作为命令替换,必须将其从make和use$$中转义。按照您编写的方式,shell正在运行命令git diff-name only-*.py。也许这真的对你有用,所以看起来没问题。但是,您绝对没有在makefile中运行gitmergebase命令。
# formats any files which differ from the point at which the current branch (2) forked from master (1)
# ____1_____________ master
#     \__________ dev
#          \_________2 current_branch
diff_files := $(shell git diff $(git merge-base --fork-point master) --name-only -- "*.py")
format:
    docker-compose run --rm api black $(diff_files)
git merge-base --fork-point master
--name-only -- "*.py"
diff_files := $(shell git diff $$(git merge-base --fork-point master) --name-only -- "*.py")