大厅,如何拉动所有远程分支的git仓库

时间:2017-09-28 17:14:52

标签: git concourse

我想创建一个可以审核git仓库分支的大厅工作。然而,我尝试过的git资源和许多其他类似的资源可以将一个分支拉入回购。我需要能够与所有远程分支机构一起下载回购。我怎么能这样做?

我已经尝试了以下不下载所有远程分支的选项:

https://github.com/vito/git-branches-resource

https://github.com/cloudfoundry-community/git-multibranch-resource

在下载资源后,我也无法使用git命令拉下额外的分支:

root@e17c8b62-a8ac-4572-5e8f-d880c815ddff:/tmp/build/6bbb901a/my-repo# git fetch
root@e17c8b62-a8ac-4572-5e8f-d880c815ddff:/tmp/build/6bbb901a/my-repo# git branch -r
  origin/HEAD -> origin/master
  origin/master
root@e17c8b62-a8ac-4572-5e8f-d880c815ddff:/tmp/build/6bbb901a/my-repo# git fetch --all
Fetching origin
root@e17c8b62-a8ac-4572-5e8f-d880c815ddff:/tmp/build/6bbb901a/my-repo# git branch -r
  origin/HEAD -> origin/master
  origin/master

这是我正在寻找的信息:

$ git branch -r
  origin/HEAD -> origin/master
  origin/asdf
  origin/master
  origin/test

我不能像我想的那样运行额外的pull命令,因为我想针对私有存储库运行此命令,并且不希望将我的ssh密钥插入到汇合中。

我注意到repos中的.git / config被设置为一个分支,这意味着它是configured for remote tracking

[origin]
fetch = +refs/heads/master:refs/remotes/origin/master

用*替换该行中的master解决了这个问题,但我想要一个不那么手动的解决方案:

fetch = +refs/heads/*:refs/remotes/origin/*

一个选项是使用sed命令在作业中修复它:

cat .git/config | sed -e  's/master/*/g' > .git/config
git fetch --all

git branch -r
  origin/HEAD -> origin/master
  origin/asdf
  origin/master
  origin/test

但是我想要一些不那么混乱的东西。

4 个答案:

答案 0 :(得分:1)

这是在所有远程分支中添加的正确fetch命令:

git fetch origin '+refs/heads/*:refs/remotes/origin/*'

答案 1 :(得分:0)

只需git fetch,就会自动执行此操作。

答案 2 :(得分:0)

在使用git fetch之前,您需要执行以下几个步骤:

  • 将有效的git私钥传递给容器并将其放入〜/ .ssh / id_rsa

  • 将github主机指纹添加到〜/ .ssh / config& chmod 0600

  • 设置github全局配置 git config user.email "${GIT_USER_EMAIL}" git config user.name "${GIT_USER_NAME}"

现在,你可以在docker容器中用git做任何你想做的事。

答案 3 :(得分:0)

只需将以下代码复制/粘贴到task.yml文件

中即可
---
platform: linux
image_resource:
  type: docker-image
  source: {repository: alpine/git}
run:
  path: sh
  args:
  - -exc
  - |
    git clone https://github.com/octocat/Hello-World.git
    cd Hello-World
    git branch -r

执行:

fly -t local execute -c task.yml

你可以跳过" git clone"如果您将回购作为输入传递,则执行步骤。

您可以将其保留在任务文件中,或者在您有预期的行为时将此配置移动到管道中。