讲师希望学生将他们的源代码提交到 github。每个学生都有自己的仓库。我没有对学生存储库的推送访问权限。我可以很好地提取他们的源代码,但我想编辑代码并添加注释以帮助他们提高成绩。想以拉取请求的形式将此修改后的代码提交给他们。但我不知道该怎么做。玩了叉子和其他东西,但最终每个学生都有两个 repo(一个在 github 上,一个在本地)——真的很难看。我知道这个论坛不太适合询问工作流程建议,但我找不到 git 帮助论坛。谁能指出我可以从 git 专家那里获得指示的地方?
1 回答
玩了叉子和其他东西,但最终每个学生都有两个仓库(一个在 github 上,一个在本地)......
这就是 Git 的运作方式。您克隆一个远程存储库,在本地处理它,然后将您的更改推送回来。如果您的远程存储库位于 GitHub 上,并且源自其他存储库的分支,您可以提交拉取请求,允许原始存储库的所有者查看并可能合并您的更改。
所以一般来说,您的工作流程看起来像:
- 学生创建他们的存储库,做一些工作。
- 在某个时候,您会在 GitHub 上分叉存储库。
- 您将此存储库克隆到本地系统,然后继续编辑/评论/等。
- 您将更改推送回GitHub 上的远程存储库。
- 您为原始存储库生成拉取请求。
请注意,在此工作流程中,您拥有学生存储库的时间点快照。也就是说,如果他们在您工作后进行更改,它们将不会自动合并到您的存储库中。如果您想从学生那里提取额外的更改,您需要向本地存储库添加一个额外的远程并将更改从该存储库合并到您的本地分支中。如果你认为你会想要这样做:在解决这个问题之前,我会首先获得基本的 fork/clone/edit/push/pull 请求工作流程,并考虑将其作为一个新问题打开。
更新
要将原始存储库中的新更改拉入您的 fork:
在您的本地存储库中,运行:
$ git remote add upstream <original_clone_url>
原始存储库的 GitHub 页面右侧的HTTPS 克隆 URL
<original_clone_url>
字段中显示的内容在哪里。引入新的变化:
$ git fetch upstream $ git merge upstream/master
这会将来自“上游”存储库的更改合并到您的本地存储库中。然后:
$ git push
将这些更改推送到您在 github 上的分叉存储库(您可以在适当的时候从那里生成拉取请求)。
事实证明,GitHub 在这里很好地记录了整个过程。如果您还没有花一些时间在http://help.github.com/上,那么值得花几分钟时间。