如何使用travis和git命令合并到另一个分支中?

如何使用travis和git命令合并到另一个分支中?,git,github,continuous-integration,travis-ci,Git,Github,Continuous Integration,Travis Ci,我试图在devstack中添加一个特性,以便在travis测试通过名为travis的分支时添加自动部署。测试通过后,我想将这个travis分支合并到主分支中,并推送到主分支 到目前为止,当我推到travis分支时,travis运行测试,所有操作都成功了,但是我在travis.yml文件中的成功后,中的git命令出现了问题 travis.yml - "npm i -g jasmine-node" -after_success: - "git fetch" - "git checkout

我试图在devstack中添加一个特性,以便在travis测试通过名为travis的分支时添加自动部署。测试通过后,我想将这个travis分支合并到主分支中,并推送到主分支

到目前为止,当我推到travis分支时,travis运行测试,所有操作都成功了,但是我在travis.yml文件中的
成功后,
中的git命令出现了问题

travis.yml

- "npm i -g jasmine-node"
-after_success: 
  - "git fetch"
  - "git checkout master"
  - "git merge travis"
  - "git push origin master"
 branches:
   only:
     - travis
这是travis控制台上的输出:

error: pathspec 'master' did not match any file(s) known to git.
fatal: 'travis' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
非常感谢你

TLDR 由于Travis克隆存储库的方式 分支在本地不存在。你需要先把它们拉出来

在我的travis构建脚本中,我调用这个函数,它允许我提取所有 分支机构。根据您的需要进行调整

函数创建所有分支()
{
#跟踪特拉维斯把我们放在哪里。
#我们正处于一种超然的状态,我们需要能够回到过去。
本地构建头=$(git版本解析头)
#获取所有远程分支。Travis克隆为“--depth”,其中
#表示“--single branch”,因此我们需要覆盖remote.origin.fetch以
#那样做。
git config--替换所有remote.origin.fetch+refs/heads/*:refs/remotes/origin/*
git获取
#或者,我们也可以获取标签
git fetch——标记
#创建固缝分支
对于以美元为单位的分行(git分行-r | grep-v HEAD);do
git checkout-qf${branch#origin/}
完成
#最后,回到我们最初的状态
git签出${build\u head}
}
解释 特拉维斯如何克隆存储库 我们可以在Travis日志中看到克隆存储库时运行的命令。对于常规分支和pull请求,它略有不同

对于拉取请求:

#在./user/repo中克隆存储库(注意--depth选项)
git克隆--深度=50https://github.com/user/repo.git 用户/回购
#转到存储库
cd用户/回购
#获取对pull请求的引用
git获取原点+引用/pull/22/merge:
#签出我们刚刚获取的引用的标题。换句话说,,
#签出PR的最后一次提交。有关获取头的详细信息,请参阅
# https://stackoverflow.com/a/9237511/1836144
git签出-qf取头
对于常规分支(在本例中称为
mybranch
):

#在./user/repo中克隆存储库(注意--depth选项)
#这一次,我们还有--branch选项
git克隆--深度=50分支=mybranchhttps://github.com/user/repo.git 用户/回购
#转到存储库
cd用户/回购
#检查一下我们刚拿到的那家分行的负责人
git结帐-qf 7f15290cc343249217a9b3669975705a3dc5bd44
在这两种情况下,克隆存储库时都会使用
--depth
选项,这意味着
--single branch
。下面是关于
单分支
git
说明:

仅克隆指向单个分支尖端的历史记录,该历史记录由--branch选项或主分支远程端的头点指定。对结果存储库的进一步回迁只会更新此选项用于初始克隆的分支的远程跟踪分支。如果在创建--single branch clone时远程端的头没有指向任何分支,则不会创建远程跟踪分支

换句话说,只获取了一个远程分支。更糟糕的是,
git-fetch
不会 甚至去拿其他的树枝

如何拉所有远程分支 解释如何使
git fetch
再次工作:

git config--替换所有remote.origin.fetch+refs/heads/*:refs/remotes/origin/*
现在,
gitfetch
应该获取所有远程分支,但我们仍然没有完成:我们希望创建远程跟踪分支。为此,我们可以对刚获取的每个分支执行
git checkout

以美元表示的分支机构的
(git branch-r | grep-v HEAD);做
git签出${branch#origin/}
完成

git branch-a
@codeWizard的输出是什么感谢您的回复,我目前没有使用
git branch-a
为什么我需要它?获取所有分支的列表并确保您拥有masterlocaly@codeWizard啊!!我不这么做。如果master在本地不存在,我是否只需要
git pull
?尝试以下操作:
git fetch--all--prune&&git checkout master&&git pull origin travis&&git push origin master