Мне нужно объединить все мои ветви с мастером, используя python.локальный путь ветки, buildno получая через переменные окружения.У меня есть следующий код для проверки каждой ветви и слияния с мастером.но он дает некоторые ошибки при выполнении кода.
from git import Repo
import git
def mergeRepo(user, buildno, repo, branches, gdwlocalpath, ref="master" ):
branch_list = branches.split(",")
repo = git.Repo(gdwlocalpath)
repo.git.checkout(ref)
current = repo.active_branch
remote_branches = []
for ref in repo.git.branch('-r').split('\n'):
remote_branches.append(ref.replace("origin/","").strip())
print(remote_branches)
mergeFailure = False
mergeResult = None
prefix='origin/'
for branch in branch_list:
if branch in remote_branches:
print(prefix+branch)
current=repo.git.checkout(prefix+branch)
master = repo.git.checkout('master')
base = repo.merge_base( master,current)
repo.git.index.merge_tree(master, base=base)
repo.index.commit("Merge into master",parent_commits=(current.commit, master.commit))
current.checkout(force=True)
else:
print("Branch doesn't exist:",branch)
, когда я выполняю код, он выдает следующую ошибку.(Я вручную изменил om.docker.dev/xxx/releasekit/VERSION и зафиксировал ветку с ошибкой, а затем нажал на ветку с ошибкой »и пытался выполнить скрипт, ожидаемое поведение - новый файл VERSION должен быть объединен с мастером.
ошибка на самом деле правильная, так как моя ветка с ошибками опережает 1 коммит на мастер, но мне нужно объединить этот коммит с мастером, но он дает 128 кодов выхода.
в случае конфликта он должен отображатьсяошибка. (У меня нет никаких исключений на данный момент). Если я хочу добавить какие-либо исключения для ошибок слияния и конфликта слияния, как я должен изменить это. Второй вопрос, почему он дает код выхода 128.
я использую python 3.6
Traceback (most recent call last):
File "./SingleMergeUp.py", line 82, in <module>
mergeRepo(username,buildno,arguments.repo,arguments.sources,gdwpath)
File "./SingleMergeUp.py", line 40, in mergeRepo
base = repo.merge_base( master,current)
File "/Users/ab/.virtualenvs/python_core/lib/python3.6/site-packages/git/repo/base.py", line 490, in merge_base
lines = self.git.merge_base(*rev, **kwargs).splitlines()
File "/Users/ab/.virtualenvs/python_core/lib/python3.6/site-packages/git/cmd.py", line 440, in <lambda>
return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
File "/Users/ab/.virtualenvs/python_core/lib/python3.6/site-packages/git/cmd.py", line 834, in _call_process
return self.execute(make_call(), **_kwargs)
File "/Users/ab/.virtualenvs/python_core/lib/python3.6/site-packages/git/cmd.py", line 627, in execute
raise GitCommandError(command, status, stderr_value)
git.exc.GitCommandError: 'git merge-base Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits) ' returned with exit code 128
stderr: 'fatal: Not a valid object name Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)'