我正在尝试使用重命名git存储库中的一些提交者git filter-branch。我很想使用一些更复杂的逻辑,但是我不太了解bash。我当前正在使用的(工作)脚本如下所示:
git filter-branch -f --tag-name-filter cat --env-filter '
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ $cn = "ew" ]
then
cn="Eric"
cm="my.email@provider.com"
fi
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
' -- --all
Run Code Online (Sandbox Code Playgroud)
我可以使用python脚本作为--env-filter参数吗?如果是这样,我将如何获得读写权限$GIT_COMMITTER_NAME?
我将如何在python文件中执行与该bash字符串等效的操作?
在python中,您需要import os,其后os.environ是其中包含传入环境的字典。更改将os.environ自动导出。真正的问题是,运行git的--filter- *过滤器,如下所示:
总是使用eval命令在shell上下文中进行评估(出于技术原因,commit过滤器的显着例外)。
因此,它实际上是在使用外壳程序,如果您让外壳程序调用Python,则会进入外壳程序的子进程,并且在Python进程中进行的任何更改都不会影响该外壳程序。你不得不eval将输出一个Python脚本的:
eval `python foo.py`
Run Code Online (Sandbox Code Playgroud)
foo.py输出适当的export命令:
import os
def example():
cn = os.environ['GIT_COMMITTER_NAME']
cm = os.environ['GIT_COMMITTER_EMAIL']
if cn == 'ew':
cn = 'Eric'
cm = 'my.email@provider.com'
print ('export GIT_COMMITTER_NAME="%s"' % cn)
print ('export GIT_COMMITTER_EMAIL="%s"' % cm)
example() # or if __name__ == '__main__', etc.
Run Code Online (Sandbox Code Playgroud)
(以上所有内容均未经测试)。
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |