从bash文件中提取分支时显示“最新”的Git

kr98yfug  于 2023-01-11  发布在  Git
关注(0)|答案(1)|浏览(145)

我有一个bash脚本,它可以拉取和构建一些源代码。如果我在master分支上,它会按预期工作,但是如果我更改到另一个分支,它会说它已经是最新的,即使有推送的更改。如果我在脚本外部从cmd行执行git pull,它会按预期拉取。

部署.sh

echo | git branch
echo "git pull ..."
git pull https://tech-dev:password@bitbucket.org/mycompany/pow-wow.git

产出

./deploy.sh

master
* spring3upgrade
git pull ...
From https://bitbucket.org/mycompany/pow-wow
 * branch            HEAD       -> FETCH_HEAD
Already up-to-date.

问题

在bash脚本中,如何将它从我当前所在的分支转到pull

zte4gxcn

zte4gxcn1#

  • 为什么它不起作用 *

如果使用显式URL进行拉取(如问题中所示):

  • 没有默认的refspec,因此只获取远程HEAD(默认分支
  • 没有为您的已 checkout 分支配置默认的“远程分支”,因此git pull将合并到默认分支指向的任何分支(即:它将尝试合并origin/master,而不是origin/spring3upgrade
  • 如何补救 *

最简单的方法是定义一个命名的远程(例如:origin),让git设置默认配置,并命名远程跟踪分支:

git remote add origin <URL>
git fetch

# for branches that already exist locally:
git switch <branch>
git branch -u origin/branch

# for remote branches not checked out locally:
git switch <branch>  # will automatically take 'origin/<branch>' as a base,
                     # and set it as the upstream branch

如果您有特殊需要,不需要为遥控器命名:您可以在命令行中提供所需的refspec,例如:

# pull the branch which has the same name as your local branch:
git pull <repo> "$(git branch --show-current)"

您需要提供特定的凭据才能访问遥控器。有许多方法可以做到这一点:

  • 一种非常常见的方法是通过ssh:创建ssh密钥,配置中央服务器以接受CI(您选择名称...)专用用户的公钥,并设置构建器代理以使用该密钥通过ssh访问存储库
  • 或者使用https,设置一个凭证管理器(参见posted in your commentgit help credentials的链接),或者git help config中的许多http.*设置

相关问题