忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 42892 | 回复: 15

[其他] github使用经验? [复制链接]

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-08-10 10:02 |显示全部楼层
情景:
我在github创建一个仓库,并向master分支提交了一份代码,对这份代码感兴趣的人都可以对它进行优化或更深入的开发。

疑问:
1. 只需一个副分支就够了吗?
假设A、B同时开始对该副分支修改,A一天后将自己修改的代码提交到该副分支,B两天后提交时,怎么保证不影响A的提交,更甚至A、B对同一处修改完全相反的情况,应该怎么处理?
还是说为每个有兴趣参与的人创建一个branch,它们只能向自己的branch提交?

2. 怎么限制其他人直接往master分支提交?

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-08-10 10:44 |显示全部楼层

论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00每日论坛发贴之星
日期:2016-08-14 06:20:00操作系统版块每日发帖之星
日期:2016-08-14 06:20:00每日论坛发贴之星
日期:2016-08-13 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-13 06:20:00IT运维版块每日发帖之星
日期:2016-08-13 06:20:00每日论坛发贴之星
日期:2016-08-12 06:20:00数据库技术版块每日发帖之星
日期:2016-08-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-12 06:20:00操作系统版块每日发帖之星
日期:2016-08-12 06:20:00综合交流区版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-08-10 13:50 |显示全部楼层
本帖最后由 karma303 于 2016-08-11 10:00 编辑

帮顶,我对github也是存在学习障碍。

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-08-10 14:11 |显示全部楼层
回复 3# karma303

哈哈,Github上关于代码团队协作方式有很多种,有些方式是需要付费使用的,有种免费的是让别人把你的建的仓库fork到他自己的github,然后把修改后的代码pull给你,你再根据情况进行合并。

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
发表于 2016-08-10 15:35 |显示全部楼层
除非你把他们加入GitHub仓库的collaborator,不然他们没有权限直接向你的仓库提交代码。
比如我想参与你的开发,(这里的情形时你只有master分支,简单点)我首先fork你的项目,这样我就有了一份副本仓库,我clone我自己的副本副本到本地,然后做一些开发,push到我自己的副本仓库里,然后创建一个pull request提交给你,你可以进行code review,如果你觉得我的代码写的可以,你就merge到你的仓库里。
过了一段时间老王又给你贡献了代码,你合并进去了,现在你的仓库比我的新,我还想继续开发的话就再次进入pull request的页面比对出你的仓库和我的仓库的差异,为我自己创建一个pull request,然后合并到我自己的仓库里,这样我的仓库又和你的同步了。我再pull一下我的仓库到本地,继续开发,push上去,创建一个pull request提交给你,你又接受了。
又过了一段时间我又提交了,这次老王慢了,他在我之后,你发现老王的代码跟现在的代码有冲突,于是你否决了老王的pull request。
再过一段时间我和老王又提交了,还是我在前,你又发现了老王有冲突,你觉得总是否决老王有点过意不去,于是你手动解决冲突后把老王的代码也合并进去了。

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-08-10 15:52 |显示全部楼层
本帖最后由 _nosay 于 2016-08-10 15:57 编辑

回复 5# 剑魂箫心

噢,生动。

还有些疑问:
1. 老王是隔壁的吗?
2. 你和老王同时fork了同一个版本的仓库,都做了很多修改,你比老王先提交,哪怕只先1秒,老王提交时就会出现冲突吧?
3. 如果你和老王确实同一时刻提交,有类似写代码中“锁”的东西吗?用于保证不可能出现同时提交的情况。

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
发表于 2016-08-10 15:57 |显示全部楼层
本帖最后由 剑魂箫心 于 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 就不知道到底咋办了。于是提示你手动解决冲突

  1. <<<<<<< HEAD
  2. a=2
  3. =======
  4. Creating a new branch is quick AND simple.
  5. a=3
  6. >>>>>>> laowang
复制代码
你可以手一动保留一行删掉另一行。
冲突解决!

我给找了个教程,你看看就懂了:http://www.liaoxuefeng.com/wiki/ ... b570f2cc3c0d1dcf000

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
发表于 2016-08-10 16:08 |显示全部楼层
新的回复包含链接,需要审核,稍等会儿吧~

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
发表于 2016-08-10 16:19 |显示全部楼层
本帖最后由 剑魂箫心 于 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 就不知道到底咋办了。于是提示你手动解决冲突

  1. <<<<<<< HEAD
  2. a=2
  3. =======
  4. a=3
  5. >>>>>>> laowang
复制代码
你可以手一动保留一行删掉另一行。
冲突解决!
如果是在GitHub合并pull request时出现冲突,可以在网页上直接编辑解决。如果是本地两个分支之间的冲突,git会自动打开文本编辑器让你解决。冲突发生后的提示格式和上面的一样。
(参考链接去掉了,如果需要参考可以百度一下廖雪峰的git教程)

如果是push内容过多,需要耗时很长,那么这段期间内其他人也push的话......我没试过......git应该会保证不出现问题

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-08-10 16:33 |显示全部楼层
本帖最后由 _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”已经跑到第一行了,会冲突吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP