Github拉请求问题

Github拉请求问题,git,github,Git,Github,我有以下情况: 我的Github默认分支是“开发” 我有三个“开发”分支的请求 3个拉取请求生成并验证正常(通过CI服务器) 然后手动合并一个拉取请求以“开发”。$bumpversion--commit dev'将自动执行,并生成和发布该版本。因此,包含“develope”上的版本更改的所有文件(.bumpversion.cfg,module/_init__;u.py) 到目前为止还不错。现在,由于“develope”中的更改,剩下的两个pull请求变得无效,无法再通过Github GUI进行

我有以下情况:

  • 我的Github默认分支是“开发”
  • 我有三个“开发”分支的请求
  • 3个拉取请求生成并验证正常(通过CI服务器)
  • 然后手动合并一个拉取请求以“开发”。$bumpversion--commit dev'将自动执行,并生成和发布该版本。因此,包含“develope”上的版本更改的所有文件(.bumpversion.cfg,module/_init__;u.py)
  • 到目前为止还不错。现在,由于“develope”中的更改,剩下的两个pull请求变得无效,无法再通过Github GUI进行合并。我需要签出分支并与@Anirudha详细描述的“develop”合并
  • 我不希望对这两个文件的更改导致拉取请求无效

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

您所需要做的就是,对那些请求进行签出:
git checkout PR1

拉动开发分支上的最新更改<代码>git pull origin develop


查看相应的更改。并推送到您各自的PR。git远程PR将使用新的更改进行更新,您的CI也将相应地批准

> P>您应该考虑删除代码中的版本信息,并在真正释放或部署应用程序时只注入它。

这样,您的源代码就不会因为持续的版本更改而变脏

当然,您希望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
发布时,您可以通过以下方式计算您的版本:

  • 总结:2.1.3
  • 或在较大更改后重置:2.0.2()
警告
  • 对于第二个选项:它关系到您接受拉取请求的顺序。(可能导致不同的版本号)
  • 也许git仍然希望合并相同的行(而不是将它们添加到彼此下面),这仍然会导致冲突
优势
  • 不再需要担心正确的版本号
  • 准备发行说明
解决冲突 不要将所有版本注释放在一个文件中:让人们按照以下语法为每个文件编写版本注释:[yyyy-mm-dd][1.0.0.0(semVerFix)][关于更改/修复的信息注释]

/\问题是,如果您在旧请求之前接受新的请求,并且同时继续集成,那么版本控制可能最终会出错

最终解决方案 在git存储库中

有一个名为“/发行说明”的文件夹

如果任何人做出更改,必须在此处添加一个文件,说明所做的更改(最好同时处理一个功能或修复)

此文件具有以下格式[日期][版本号][说明].[可选文件扩展名]例如:
2016-10-26 1.0.0.0添加了新的版本控制工具.txt

只要日期和描述是唯一的,您就不会有冲突,当然,除非更改的代码包含冲突


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

如果由于冲突而无法在新开发的顶部重新设置PR分支的基础,则正常工作流程为:

  • 联系公关作者
  • 让他/她在获取的更新来源/开发上重新设置PR分支的基础,解决冲突,检查一切是否正常
  • 强制推送PR分支(这将更新PR,并触发CI服务器的新一轮构建)

基本上,你需要确保公关作者正在做所有的艰苦工作;)当您想要集成该PR时,您所需要做的就是合并或重新基址(无冲突)。

我建议您为此场景执行
git重新基址

它所做的是,在进行重新基准时签出您指定的分支机构,假设您有pr#2和pr#3挂起,您克隆回购并在生成pr的分支机构中执行

git rebase develop
它会说,在prgress中重新设置基础,所以,您可以在该过程中解决冲突,并执行

git add
现在,如果没有更多的冲突,重新基准要么继续,要么停止。如果有,您可以在终端中读取状态,以继续

git rebase --continue
现在,这样做,直到所有冲突都得到解决

最后,当您向分支机构签出该PR时,您应该看到没有冲突,分支机构可以自动合并(通过推到远程回购)

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

总之

git rebase develop
git add <files>
git rebase --continue
git-rebase-developer
git添加
git rebase--继续吗

对pr#3也重复此操作。

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

git tag 1.0.0 -m "Optional Description or release name."
并且有一个changelog文件,该文件只能通过积累提交标题来更改
bumpversion

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

git dch

编辑:如果您想自动添加版本,您可以使用某种约定将增量添加到提交消息中,最好是通过提交挂钩
git dch
提供了一些选项来指定要增加的版本。

您所描述的正是我想要避免的。有n个牵引要求