gitlabgitlab-cigoogle-source-repositories

Push gitlab repository code to Google source repository


I followed below article to push gitlab repository code to Google cloud source repository but I'm getting an error on this command

git push -f google master

error: src refspec master does not match any.
error: failed to push some refs to 'https://source.developers.google.com/p/project/r/test/'

Article followed: https://medium.com/@bamnet/cloud-source-repositories-gitlab-2fdcf1a8e50c

Is there anything , I'm doing wrong 😜? Any thoughts as to how I can avoid this error message?enter image description here


Solution

  • src refspec master does not match any
    

    The issue is the date of the article you are following: Aug. 2018.
    GitLab Runner has changed since then, more precisely in May 2019.

    The problem is described in this thread from May 2019:

    Since we are using refspec to clone/fetch the repository, we checkout a specific commit and not checking out a specific branch.
    When the script does git push master, the branch is nowhere to be found so git doesn’t know what to push.

    That was because of, on GitLab side, MR 1203:

    Basically, GitLab CE/EE sends refspecs parameter to GitLab Runner gitlab-org/gitlab-foss app/presenters/ci/build_runner_presenter.rb: this parameter is to used in GitLab Runners for fetching branch/tag refs from remote repository.

    This change was introduced because we wanted GitLab Rails side to leverage respecs in order for issue 7380 "Combined ref pipelines (source+target branch)" though, there should not be a big difference between git clone $URL or mkdir $REPO_DIR && git remote add origin $URL && git fetch +refs/heads/branch_name:refs/remotes/origin/branch_name.
    In fact, the new behavior has already run on our development project https://gitlab.com/gitlab-org/gitlab-ce/pipelines and has no issues so far.

    Issue 4097 was opened at the time

    Workaround

    Use HEAD when you want to push this to another remote.

    deploy:
      stage: deploy
      script:
      - git remote add heroku https://heroku:$HEROKU_API_KEY@git.heroku.com/<project>.git
      - git push -f heroku HEAD:master
    

    So don't push master. Push HEAD.

    The OP Adam uses another workaround and add:

    before_script: 
      - git checkout master