Tôi có một tập lệnh tự động viết lại tác giả trên một số kho lưu trữ git.Lệnh thực thi in cho quy trình con Python. Mở
def filter_history(old, new, name, repoPath):
command = """--env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [[ "$GIT_COMMITTER_NAME" = "|old|" ]]
then
cn="|name|"
cm="|new|"
fi
if [[ "$GIT_AUTHOR_NAME" = "|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)
print "git filter-branch -f " + command
process = subprocess.Popen(['git filter-branch -f', command],cwd=os.path.dirname(repoPath), shell=True)
process.wait()
Lệnh này thực hiện tốt, nhưng cho tôi biết rằng không có gì thay đổi trong lịch sử repo. Tuy nhiên, nếu tôi lấy lệnh được in ra (mà nên là những gì đang được thực hiện), thả nó trong một kịch bản shell, và thực hiện nó, nó thay đổi tiền phạt lịch sử. Tôi nghĩ rằng lệnh này bằng cách nào đó không được thực hiện đúng. Có cách nào để xem chính xác lệnh nào mà mô đun subprocess đang thực thi không?