git是否支持子分支的概念;即分支的一个分支
例如,一组教师在网络驱动器上没有裸共享仓库(没有服务器ssh身份验证等),他们在合适的时候将它们拉到并推送到合并到主设备的共享驱动器上。
此回购包括教师档案,例如工作解决方案以及学生档案。
学生不应该克隆这个回购,也不应该直接签出他们各自的教师分支,因为它包含答案。
但是repo可以包含每个类/主题的分支,只有跟踪上游更改的学生文件。然后学生分支这个分支来完成他们的工作。教师将学生分支作为遥控器跟踪并拉入工作。
我最接近上面的是将一个分支克隆到一个单独的仓库中,并让学生在该仓库中分支。上述问题包括明显的数据重复(git中的系统链接的窗口支持很差)和额外的类/主题repos,必须通过上游更改保持更新。
如何在Git / LibGit2中更好地支持此工作流程?
答案 0 :(得分:3)
git中没有主分支的概念(master
是git默认提供的完全正常的分支)。你可以从master
分支,你可以从任何其他分支分支出来,你可以从分支的一个分支的分支分支。
对于您的具体问题,git没有分支可见性的概念。如果我克隆你的仓库,我会把所有分支都很好,并且你的本地仓库如何跟踪远程分支并不重要。
简而言之,如果您不希望人们拥有可用于回购的信息,请不要让他们克隆它。提供一个不同的远程仓库,只提供您需要的信息,并仅在那里推送相关信息。
例如,我的repo有分支public
,private-1
和private-2
,我可以将所有分支推送到origin
(git push private-remote private-1
等) ,并有另一个远程设置,您只能将public
推送到它。
您的学生然后克隆公共遥控器,从public
分支,推送他们的更改和他们自己的分支,然后您可以从public-remote
拉出这些分支并推入您的private-remote
。 Git支持多个遥控器就好了。
答案 1 :(得分:1)
git是否支持子分支的概念;即分支的一个分支
不,分支可以随时重命名,删除或重新定位(即移动)。
它支持"命名空间"的概念。 (或hierarchy或group),包含一个或多个" /
":class/topic
的分支名称可以是分支。
您可以使用 gitolite (基于身份验证控制对Git repos的访问的ACL)找到类似名称空间的用法。
参见:
答案 2 :(得分:1)
我使用了类似的流程,但有两个不同的历史记录(即两个不同的存储库没有任何共同的提交):一个用于教师,一个用于学生。有两个独立的历史有几个好处:
我可以在学生的存储库中包含生成的文件(例如* .pdf),并跟踪教师的文件中的源文件(例如* .tex)。
我不需要在学生的存储库中显示教师的个别提交。他们只看到每班有1个提交“新上课”。
我选择了要发布的文件。
在我老师的存储库中,我有一个带有make install
目标的makefile,它将生成的文件复制到学生的存储库中。为方便起见,我的目标make git-commit
,make git-push
在学生结帐时运行git commit
和git push
。
在学生方面,每当我添加新内容时,他们会git clone
一次,git pull
。可以使用我的存储库作为他们实验室工作的骨架,并协同工作(我建议他们为他的同事使用一个遥控器,为我使用一个遥控器)。