Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在github上分叉,那么我如何管理我的贡献?_Git_Github_Git Branch - Fatal编程技术网

在github上分叉,那么我如何管理我的贡献?

在github上分叉,那么我如何管理我的贡献?,git,github,git-branch,Git,Github,Git Branch,我对在github上跟随fork的forkflow有点不清楚 如果我在一个中等规模的项目(比如OpenGrok)的原始存储库中对各种bug进行了一些独立的小修复,该怎么办 我是否为每个相对较小的无关错误修复创建单独的分支 我是从master创建每个分支,还是从下一个分支创建一个不相关的分支 我是否将修复提交到master 我的意思是,随着时间的推移,我仍然希望保留历史和所有内容,但我只是担心过一段时间后,会出现一个完全混乱的局面,其中有许多毫无意义的分支,用于相对较小的bug修复 我计划为一

我对在github上跟随
fork
的forkflow有点不清楚

如果我在一个中等规模的项目(比如OpenGrok)的原始存储库中对各种bug进行了一些独立的小修复,该怎么办

  • 我是否为每个相对较小的无关错误修复创建单独的分支

  • 我是从
    master
    创建每个分支,还是从下一个分支创建一个不相关的分支

  • 我是否将修复提交到
    master

我的意思是,随着时间的推移,我仍然希望保留历史和所有内容,但我只是担心过一段时间后,会出现一个完全混乱的局面,其中有许多毫无意义的分支,用于相对较小的bug修复


我计划为一个给定的项目提供一些无关的修复,并尝试对开发方法进行一些规划。

在github上分叉项目时,有几种可能的工作流,您计划向上游提交更改。这是我通常倾向于遵循的工作流程之一(我将调用我从中分叉的回购协议作为远程
,我的回购协议作为
):

  • source
    使用的主分支,比如说
    master
    分叉到
    origin/mydev
  • origin/mydev
    是我所有更改和主要开发的地方
  • 我经常将
    remote/master
    重新设置到
    origin/master
    上(这一步是多余的,但有时我很容易将所有内容都放在一个遥控器中)
  • 只要您想从上游获取更改,就可以将
    源代码/master
    或重定基址的
    源代码/master
    合并到
    源代码/my dev
  • 如果我想向上游提交补丁或错误修复,我会启动一个新的特性分支,用于pull请求。我将其命名为
    origin/my-feature-1
    。我根据最新的
    origin/master
    (或
    source/master
    )创建此分支
  • 我将在
    origin/my dev
    中对此功能所做的更改挑选为
    origin/my-feature-1
    。执行此步骤后的任何测试
  • origin/my-feature-1
  • 如果拉取请求获得批准,更改将合并到
    源代码/主代码
    (以及
    源代码/主代码
  • 执行从
    origin/master
    (或
    source/master
    )到
    origin/my dev
    的合并
  • 就分支的生命周期而言,我通常倾向于在上游合并主题或功能分支后,将其删除(分支只是git中引用特定提交的轻量级指针)
不断重复这个工作流程

关键的想法是,您的请求不应该给上游维护人员带来任何严重的冲突,否则他/她将盲目地拒绝贡献

我举了一个例子,当您想从
origin/my dev
上游贡献
D2
D3
D2'
D3'
D2
D3
的重基版本。带有
U
的提交是
source
中的上游提交,
D
是您在
origin
中的下游提交。带有
M
后缀的是合并

从视觉上看,这就是它的外观:

source/master             origin/my-dev
     U1
     U2   Initial-fork
     U3-----------\
     |             \
     |              \------------D1
     |                           D2
     U4 Sync up from upstream    |
     U5-----------\              D3
     |             \             |
     U6             \------------DM4                        origin/feature-1
     |                           |
     |                           |     Starting point of feature-1
     U7------------------------------------------------------------D2'  (Rebased version of D2)
     |                           |                                 D3'  (Rebased version of D3)
     |                           D5                                /
     U8                          D6      Pull-request             /
     |                           |       getting merged upstream /
     UM9--------------------------------------------------------/
     |                           |
     |              Resync       |
     |-------------\ my-dev      |
     U9             \            |
     U10             \-----------DM7
     |                           |
     |                           |

我仍然不清楚这里的长期方法是什么:您是否保留这些特性分支?还有,如果它们只是bug修复分支,而不是任何功能,我该如何命名它们呢?此外,当您对自己的主要分支进行重新基础时,您如何保持历史记录/确保您可以在将来的任何时候返回?(我在问,因为有了rebase和fast forward,commit sha1会改变等等。)@cnst-不管它是一个功能还是一个错误修复,同样的工作流可以应用,不管它是什么。最好将您试图修复的bug的分支命名为:
fix deadlock
fix-397
(如果您正在修复bug编号397)。如果您询问的是
origin/master
,您会注意到我没有直接在
origin/master
上提交任何内容,并且我从
remote/master
进行的所有合并或重定都是快进的,因此我提到了它是多余的。顺便说一句,快进合并不会更改任何提交的SHA1。我所有的提交都进入
origin/my dev
中,这样你就不需要
origin/master
,对吗?您始终可以从
源(远程)/master
创建功能(贡献)分支。