github使用经验?
情景:我在github创建一个仓库,并向master分支提交了一份代码,对这份代码感兴趣的人都可以对它进行优化或更深入的开发。
疑问:
1. 只需一个副分支就够了吗?
假设A、B同时开始对该副分支修改,A一天后将自己修改的代码提交到该副分支,B两天后提交时,怎么保证不影响A的提交,更甚至A、B对同一处修改完全相反的情况,应该怎么处理?
还是说为每个有兴趣参与的人创建一个branch,它们只能向自己的branch提交?
2. 怎么限制其他人直接往master分支提交? 本帖最后由 _nosay 于 2016-08-10 10:49 编辑
http://www.w2bc.com/Article/76608
http://www.tuicool.com/articles/f2i22iY
http://blog.csdn.net/qq_26296197/article/details/51482336 本帖最后由 karma303 于 2016-08-11 10:00 编辑
帮顶,我对github也是存在学习障碍。 回复 3# karma303
哈哈,Github上关于代码团队协作方式有很多种,有些方式是需要付费使用的,有种免费的是让别人把你的建的仓库fork到他自己的github,然后把修改后的代码pull给你,你再根据情况进行合并。 除非你把他们加入GitHub仓库的collaborator,不然他们没有权限直接向你的仓库提交代码。
比如我想参与你的开发,(这里的情形时你只有master分支,简单点)我首先fork你的项目,这样我就有了一份副本仓库,我clone我自己的副本副本到本地,然后做一些开发,push到我自己的副本仓库里,然后创建一个pull request提交给你,你可以进行code review,如果你觉得我的代码写的可以,你就merge到你的仓库里。
过了一段时间老王又给你贡献了代码,你合并进去了,现在你的仓库比我的新,我还想继续开发的话就再次进入pull request的页面比对出你的仓库和我的仓库的差异,为我自己创建一个pull request,然后合并到我自己的仓库里,这样我的仓库又和你的同步了。我再pull一下我的仓库到本地,继续开发,push上去,创建一个pull request提交给你,你又接受了。
又过了一段时间我又提交了,这次老王慢了,他在我之后,你发现老王的代码跟现在的代码有冲突,于是你否决了老王的pull request。
再过一段时间我和老王又提交了,还是我在前,你又发现了老王有冲突,你觉得总是否决老王有点过意不去,于是你手动解决冲突后把老王的代码也合并进去了。 本帖最后由 _nosay 于 2016-08-10 15:57 编辑
回复 5# 剑魂箫心
噢,生动。
还有些疑问:
1. 老王是隔壁的吗?
2. 你和老王同时fork了同一个版本的仓库,都做了很多修改,你比老王先提交,哪怕只先1秒,老王提交时就会出现冲突吧?
3. 如果你和老王确实同一时刻提交,有类似写代码中“锁”的东西吗?用于保证不可能出现同时提交的情况。
本帖最后由 剑魂箫心 于 2016-08-10 16:07 编辑
回复 6# _nosay
老王就在隔壁→_→
提交冲突是这么发生的:
比如原始代码有一行: a=1
我和老王同时clone下来,我的修改是a=2,他的修改是a=3;
你把我的commit合并了,git就知道把代码从a=1改成a=2;
你再去合并老王的修改,git对老王的修改进行解读发现他是从a=1改成a=3,但是现在的代码是a=2啊,于是git 就不知道到底咋办了。于是提示你手动解决冲突
<<<<<<< HEAD
a=2
=======
Creating a new branch is quick AND simple.
a=3
>>>>>>> laowang
你可以手一动保留一行删掉另一行。
冲突解决!
我给找了个教程,你看看就懂了:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000 新的回复包含链接,需要审核,稍等会儿吧~ 本帖最后由 剑魂箫心 于 2016-08-10 16:27 编辑
回复 6# _nosay
隔壁的老王→_→
merge冲突是这么发生的:
例如原始代码有一行: a=1
我和老王同时clone下来,我的修改是a=2,他的修改是a=3;
你把我的commit合并了,git就知道从a=1改成a=2;
你再去合并老王的修改,git对老王的修改进行解读发现他是从a=1改成a=3,但是现在的代码是a=2啊,于是git 就不知道到底咋办了。于是提示你手动解决冲突
<<<<<<< HEAD
a=2
=======
a=3
>>>>>>> laowang
你可以手一动保留一行删掉另一行。
冲突解决!
如果是在GitHub合并pull request时出现冲突,可以在网页上直接编辑解决。如果是本地两个分支之间的冲突,git会自动打开文本编辑器让你解决。冲突发生后的提示格式和上面的一样。
(参考链接去掉了,如果需要参考可以百度一下廖雪峰的git教程)
如果是push内容过多,需要耗时很长,那么这段期间内其他人也push的话......我没试过......git应该会保证不出现问题 本帖最后由 _nosay 于 2016-08-10 16:42 编辑
回复 8# 剑魂箫心
噢,我之前误解冲突了,我以为修改基于的版本,和github上最新的版本不同,就会冲突。
那现在考虑更具体的情况:
你和老王fork的版本都是1,原作者先合并了你的提交,版本变成2,这时老王也要提交他的修改。
1. 如果老王和你修改的文件不同,那肯定不会冲突吧?那么github要能分析自老王基于的版本1后,他所修改的文件没有变过是吧?
2. 如果老王和你修改的是同一个文件:
a=1
b=2
c=3
1> 你:“a=1”→“a=2”,老王:“a=1”→“a=3”,你已经说过了,这样会产生冲突;
2> 你:“a=1”→“a=2”,老王:“b=2”→“b=1”,即修改的不是同一行,并且老王修改“b=2”时,它仍然在第二行,这样会冲突吗?
3> 你:删除“a=1”,老王:“b=2”→“b=1”,这时“b=2”已经跑到第一行了,会冲突吗?
页:
[1]
2