Я пытаюсь написать сценарий, который поможет мне сопоставить некоторых старых пользователей новым пользователям в нескольких репозиториях Git.Проблема у меня с модулем подпроцесса.Простые команды, такие как «git status», вроде бы работают нормально, но более сложная команда «git filter-branch» не работает для меня.
функция filter_history
def filter_history(old, new, name, repoPath):
command = """ filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [[ "$GIT_COMMITTER_EMAIL" == |old|* ]]
then
cn="|name|"
cm="|new|"
fi
if [[ "$GIT_AUTHOR_EMAIL" == |old|* ]]
then
an="|name|"
am="|new|"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
"""
#Do string replace
command = command.replace("|old|", old)
command = command.replace("|new|", new)
command = command.replace("|name|", name)
subprocess.Popen(['/usr/bin/git', command], cwd=os.path.dirname(repoPath), shell=False)
Пример некоторых выходных данных:
fatal: cannot exec 'git- filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [[ "$GIT_COMMITTER_EMAIL" == jacks* ]]
then
cn="Jack Slingerland"
cm="jacks-teamddm"
fi
if [[ "$GIT_AUTHOR_EMAIL" == jacks* ]]
then
an="Jack Slingerland"
am="jacks-teamddm"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
': File name too long
Некоторые вещи, которые я заметил, заключаются в том, что к команде git добавляется дефис, что для меня не имеет смысла.Кроме того, если я удаляю лишний hypen из напечатанной команды и выполняю его в repoPath, все работает нормально.Любая помощь или направление по этому вопросу будет принята с благодарностью.