Github拉取请求问题

时间:2016-10-13 07:44:33

标签: git github

我有以下情况:

  • 我的Github默认分支是" develop"
  • 我有三个拉动请求" develop"分支
  • 构建并验证了3个拉取请求(通过CI服务器)
  • 然后将一个拉取请求手动合并到" develop"。 ' $ bumpversion --commit dev'自动执行,并构建和发布版本。因此,包含版本的所有文件都会在" develop" (.bumpversion.cfg,module / __ init __。py)
  • 到目前为止一切顺利。现在,由于"开发"其余两个拉取请求变为无效,无法再通过Github GUI合并。我需要签出分支并合并" develop"像@Anirudha一样详细描述。
  • 我不希望我的拉取请求因更改这两个文件而无效

我确信解决方案对于知道如何解决这个问题的git专家来说是显而易见的。到目前为止我找不到它,所以请分享。

5 个答案:

答案 0 :(得分:6)

您需要做的就是,结帐对这些拉取请求:git checkout PR1

开发分支的最新更改。 git pull origin develop

查看相应的更改。并推送到各自的公关。 git远程PR会随着新的更改而更新,您的CI也会相应地批准。

答案 1 :(得分:5)

我建议您为此方案执行git rebase

Git Rebase Official Doc

它的作用是,在执行rebase时检查你指定的分支,假设你有pr#2和pr#3挂起,你克隆了repo并在生成PR的分支中做,

git rebase develop

它会告诉你犯罪,所以,你去解决这个过程中的冲突,并做一个

git add

现在,如果没有更多冲突,rebase会继续或停止。如果有,您可以在终端中读取状态,继续,

git rebase --continue

现在,这样做直到所有冲突都得到解决。

最后,当您结帐到PR的分支时,您应该看到没有冲突,并且分支可以自动合并(显然是通过推送到远程仓库)。

现在,对pr#3重复相同的过程,你就完成了。

总之,

git rebase develop
git add <files>
git rebase --continue

也为pr#3重复这个。

答案 2 :(得分:4)

您应该考虑删除代码中的版本信息,并在实际发布或部署应用程序时将其注入。

通过这种方式,您的源代码不会因持续版本更改而变脏。

当然,您希望git检查更改并在发生冲突时告诉您。我建议你使用另一种解决方案,这样就不会发生冲突,合并也会变得容易。 (阅读我的整篇文章以获得完整的解决方案)

您的案例中的部分解决方案

而不是确定版本具有相对版本号。

我的意思是:有一个带发行说明的文件。每次有人做拉取请求时,他都会在此文件中添加一行。该文件看起来像这样:

1.0.0 Added a major breaking change
0.1.0 Added a feature
0.0.1 Added a bugfix
1.0.0 Another major change
0.0.1 Bugfix
0.0.1 Another bugfix

在发布时,您可以通过以下方式计算您的版本:

警告

  • 第二个选项:您接受拉取请求的顺序很重要。 (可能导致不同的版本号)
  • 也许git仍然希望合并相同的行(而不是将它们添加到彼此之下),这仍然会导致冲突。

优点

  • 不再需要担心正确的版本号
  • 开箱即用发行说明

解决冲突

不要将所有版本说明放在一个文件中:让人们按照以下语法编写每个文件的版本说明:[yyyy-mm-dd] [1.0.0.0(semVerFix)] [关于更改的信息说明/修复]

/ \问题是,如果您在较旧的拉取请求之前接受较新的拉取请求并且同时继续进行整合,则版本控制可能最终会出错。

最终解决方案

在您的git存储库中。

有一个名为`/ release-notes'的文件夹

如果有人进行了更改,则必须在此处添加一个文件,说明所做的更改(最好是同时使用一个功能或修复)。

此文件的格式如下[日期] [版本凹凸] [描述]。[可选文件扩展名]例如:2016-10-26 1.0.0.0 Added new versioning tooling.txt

只要日期和说明是唯一的,您就没有冲突,除非当然更改的代码包含冲突。

你的作业:制作读取这些文件并累积版本号的工具。您还可以阅读文件的内容并将其用作发行说明说明。

答案 3 :(得分:2)

如果因为冲突而无法在新开发项目(GitHub proposed recently)上重新设置PR分支,那么正常的问题是:

  • 联系PR作者
  • 让他/她在获取更新的起源/开发之上重新启动PR分支,解决冲突,检查一切是否正常工作
  • 强制推送PR分支(将更新PR,并将通过CI服务器触发新一轮构建)

基本上,您需要确保PR作者正在进行所有艰苦的工作;)当您想要整合PR时,您需要做的就是合并或变基(没有冲突)。

答案 4 :(得分:1)

版本控制应该通过git完成,而不是通过存储库中的文件完成。而不是使用bumpversion.cfg,您可以使用新版本的标签:

git tag 1.0.0 -m "Optional Description or release name."

并且有一个changelog文件,只能通过累积提交标题来更改bumpversion

Debian有一个git扩展来自动完成所有这些:

git dch

编辑:如果你想自动添加版本,你可以有一些约定来将增量添加到提交消息,理想情况是通过提交钩子。 git dch可以选择指定要增加的版本。