Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

origin.pull(rebase=True) sometimes lost local commit , gitpyton version 3.1.31 #1863

Open
@boboyunduoer

Description

@boboyunduoer

I had concurrent git pull/push in my deployment pipelines, sometimes git pull (rebase) only get remote commit and lost local commit (rebase seems happened)

below is the git actions in first pipeline (no issue happened)
image

below is the git actions in second pipeline which runs 1 second later than above pipeline (git pull seems lost local commit)
image

take below graph as example , we should get commit hash 4 after pull but we only get 2 (above a3324df), seems rebase action did not happened when pull?
image

do we have any way to check if git.pull success or raise exception when git.pull failed?

appreciated !!!

part of the code:

            GIT_PUSH_RETRY_NUMBER = 2            for i in range(1, 2 + GIT_PUSH_RETRY_NUMBER):                  try:                    origin = self.repo.remotes.origin                    LOG.info("🔧 Pull first before push")                    LOG.info(f"🔧 ProductConfig commit id before pull(rebase) is {self._get_short_sha()}")                    origin.pull(rebase=True)                    LOG.info(f"🔧 ProductConfig commit id after pull(rebase) is {self._get_short_sha()}")                    LOG.info("🔧 Push changes to ProductConfig master branch")                    origin.push().raise_if_error()                    break  # if push succeed, no need retry anymore                except Exception as e:                    if i > GIT_PUSH_RETRY_NUMBER:  # if number of retry reached, throw e to terminate                        raise e                    LOG.warn(f"🔧 Git error: {e}")                    SLEEP_SECONDS = randint(                        1, 20                    )  # just use random number between 1 and 20, different pipeline will wait for different time                    LOG.info(f"🔧 Sleep {SLEEP_SECONDS} seconds and git push retrying {i}/{GIT_PUSH_RETRY_NUMBER} ...")                    sleep(SLEEP_SECONDS)
    def _get_short_sha(self):        sha = self.repo.head.object.hexsha        short_sha = self.repo.git.rev_parse(sha, short=7)        return short_sha[0:7]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp