合并在只读存储库的克隆中进行的更改

时间:2015-04-27 16:17:57

标签: git

这是一个我无法理解的假设情况。

在学校内,教师为共享的只读目录中的每个学生创建一个主git repo和分支。 (假设IT不允许Git服务器实例或端口用于基于Internet的解决方案)

学生可以克隆单个分支并在本地提交,但不能将更改推送到共享目录,因为它是只读的。

教师可以回复一些收集/合并学生的变化吗?

3 个答案:

答案 0 :(得分:3)

是的,这是可能的,并且有多种方法可以做到这一点:

  • Git拥有git format-patch命令,可以根据针对某些现有提交的工作准备补丁或一系列补丁。

    因此,第一个明显的想法是让学生根据他们的变化生成补丁集,并通过电子邮件发送给他们的老师。然后,教师使用git am将更改合并到适当的分支中。

  • 如果由于某种原因这很不方便(你最初标记了你的问题windows;我已经删除了这个标签) - 比如说,老师和/或学生缺乏经验,无法正确使用电子邮件客户端或只能访问Microsoft®Outlook™等损坏的电子邮件客户端 - 您可以使用git bundle

    git bundle能够以包含指定历史记录位的特殊格式生成单个“归档”文件(很容易告诉git bundle仅导出针对最初由提供的历史记录完成的工作教师)然后使用任何方便的方式传送此文件:进行闪存驱动器,通过电子邮件发送,上传到FTP或共享文件夹等。

    然后教师可以从学生提供的包中git fetchgit pull更新初始分支。

请注意,除非您部署某些“前端”软件,例如gitolite,否则无法让学生只能访问其个人分支进行克隆。

另请注意,“无服务器”Git工作流没有什么不寻常之处:比如,Git开发过程依赖于将补丁(通常由git format-patchgit send-email准备)提交到主Git邮件列表,在那里讨论它们 - 通过直接评论包含补丁的消息, - 并应用从开发者的邮件阅读器保存的补丁。 See for yourselfthis

此外,即使不使用电子邮件,也不需要“服务器”:如果开发人员Joe和Mary拥有SSH访问彼此的框,他们可能只是直接访问彼此的存储库。中央服务器上的中央仓库只是一个有用的概念,但主要是社交内容,而不是技术上的。

答案 1 :(得分:1)

如果学生'可以通过网络上的老师访问回购,是的。教师需要为每个学生设置一个遥控器,然后获取并合并(拉)他们的分支。

理想情况下,学生将拥有本地存储库,在本地提交,然后在网络上的裸存储库中发布(推送)他们的工作。然后,他们可以通知教师(拉取请求)他们的工作是在他们的公共仓库中以名称给定的分支完成的。老师可以获取分支,如果工作值得,请将其合并。

这就是github如何运作,有人拥有一个项目(老师),人们可以分叉它(在他们的机器上和他们的github帐户上做一个克隆),在一个分支上工作,然后当他们想要所有者带他们的更改将他们的更改从他们的机器推送到github上的fork,并且所有者可以查看分支(例如通过获取)并可能将其合并到他们自己的仓库中。

如果老师无法访问学生'本地回购直接,学生必须推送到某个地方,在DVCS中,他们通常在网络上自己的(裸)克隆中做到这一点。

答案 2 :(得分:0)

您可以在本地将更改提交到您的分支机构。然后从他们的主分支做一个拉取请求。如果您有权直接推送到他们的分支机构 使用git push http://github.com/teachersUsername/repoName.git 然后提供您的凭据(用户名和密码)