【问题标题】:How to check if git merge really did a merge in a multi-repo bash script如何检查 git merge 是否真的在多仓库 bash 脚本中进行了合并
【发布时间】:2019-05-07 06:38:24
【问题描述】:

所以我正在制作一个脚本,该脚本从主远程存储库获取最新标签,并将其与我的自定义更改合并到我的本地存储库中,大约 10-20 个存储库,在一个脚本中。合并部分看起来像这样:

git fetch -q https://android.googlesource.com/platform/$REPO_PATH $TAG
git merge -q --no-ff FETCH_HEAD
if [ $? -eq 0 ]; then
    echo -e "$REPO_PATH merged succesfully"
else
    echo -e "\n$REPO_PATH has merge conflict(s)\n"
fi

重点是我想知道哪些所有提交成功合并(并且需要推送到我的自定义 git)。但有时 repos 已经是最新的(即远程 repo 中的新标签没有任何新的提交),在这种情况下,即使没有真正合并任何内容,也会显示“合并成功”消息。

我只想知道哪些所有存储库都进行了合并并需要推送到我的 git,并且还想知道哪些所有存储库都有合并冲突(尽管这在我的脚本中工作正常)。我所注意到的是,当 git 进行真正的合并时,它会打开 nano 询问提交消息。但我不知道如何使用它来检测合并。提前致谢。

【问题讨论】:

  • 您可以在合并期间禁止提交消息。 stackoverflow.com/a/36189488/989920
  • 不,这不是重点。请阅读最后一段
  • 这就是我评论的原因,没有回答。为什么正确合并很重要?如果它是最新的,那么推送无论如何都不会做任何事情。
  • 不,正如我所提到的,这个脚本处理超过 10 个 repos,我不想 cd 进入每个 repos 并执行 git push 来检查我是否需要推送它
  • 为什么要检查?只需推入没有失败合并的回购(不是“最新的”)。

标签: bash git github merge git-merge


【解决方案1】:

在开始合并之前,存储当前分支头的哈希:

git rev-parse HEAD

然后在merge命令运行后再次检查,如果相同,则合并无法完成。

您也可以通过检查状态码来确定状态:

  | Match      | No Match                    |
  --------------------------------------------
0 | Up to Date | Merged                      |
  --------------------------------------------
1 | Conflict   | Something is horribly wrong |
  --------------------------------------------

【讨论】:

  • 但是如何使用它来检查是否需要合并?
  • @Adithya 您需要同时使用状态码和哈希比较,添加了真值表
  • 谢谢,这就是我要找的!顺便说一句,您的意思是“能够完成”,对吧哈哈?
  • @Adithya 无法完成是正确的。如果合并完成,则提交并且 HEAD 将发生更改。
猜你喜欢
  • 2017-01-18
  • 2011-12-17
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多