用 GitHub 之类合作开发有什么规范吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制贴 AI 生成的内容
yuge0099
V2EX    程序员

用 GitHub 之类合作开发有什么规范吗?

  •  
  •   yuge0099 2018-09-07 09:01:33 +08:00 via Android 4943 次点击
    这是一个创建于 2594 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前和别人合作开发小项目,代码更新快,本地代码不能及时更新最新的代码。使用 pull 自动 merge,总会造成文件丢失,代码丢失的情况。想问一下一般大家是怎么处理的。
    第 1 条附言    2018-09-07 09:50:49 +08:00
    可能我的文件丢失形容地不恰当。应该是 GitHub 上最新的版本新加了几个文件,而本地的 commit 却没有(本地 commit 时间比 GitHub 上的晚),于是使用 pull 自动 merge 的时候,git 选择删除这几个文件。
    第 2 条附言    2018-09-07 09:53:00 +08:00
    文件还找得回来,就是每次都得从 commit 的记录里把文件复制出来,然后重新放回去。
    36 条回复    2018-09-07 20:52:18 +08:00
    unifier
        1
    unifier  
       2018-09-07 09:08:20 +08:00   1
    git flow / github flow / gitlab flow 了解一下?
    innoink
        2
    innoink  
       2018-09-07 09:16:17 +08:00 via Android   1
    你不处理 merge conflict 吗?
    yuge0099
        3
    yuge0099  
    OP
       2018-09-07 09:37:08 +08:00 via Android
    @innoink 它没有显示 conflict,直接移除文件和代码
    niboy
        4
    niboy  
       2018-09-07 09:39:52 +08:00   1
    一份是本地的目录,一份专门用来同步服务器的最新代码。
    每次合并,用 beycompare 比较
    jy02534655
        5
    jy02534655  
       2018-09-07 09:41:45 +08:00   1
    这个时候你需要的是 Git Extensions 这种傻瓜式工具
    teddy2725
       6
    teddy2725  
       2018-09-07 09:44:27 +08:00
    用 git 能用到代码丢失,我建议放弃写代码
    wutiantong
        7
    wutiantong  
       2018-09-07 09:46:44 +08:00   1
    你先学学 git 的原理吧,你所说的文件代码丢失,应该不是丢失了
    zgray
        8
    zgray  
       2018-09-07 09:47:37 +08:00   1
    除非强推覆盖,否则 log 里面找得回。找到干你代码的人,干死他。

    还有,有时间还是去了解的版本管理的思路,光问不够的,不要只依靠一个工具就想解决所有问题。去看看一些开源项目,读读他们的 git 日志,看看他们的分支之类的,应该也有些帮助。
    terence4444
        9
    terence4444  
       2018-09-07 09:52:49 +08:00 via iPhone   1
    试试看一下 gitflow/github flow 概念,PR 概念
    nmgwddj
        10
    nmgwddj  
       2018-09-07 09:58:01 +08:00   1
    使用 git fetch 先将代码 fetch 下来但不合并。
    使用 git rebase 替代 git merge 手动合并代码。

    本地是有 commit 的,merge 时如果有删除文件可以从本地 commit 中恢复。你还是用 git 用的不是很熟悉。这个跟 github 没什么关系。
    yuge0099
        11
    yuge0099  
    OP
       2018-09-07 09:58:22 +08:00 via Android
    @wutiantong
    @zgray 确实不是丢失。是 git merge 策略的问题,不知道是不是我使用有错误。
    akiakiseofficial
        12
    akiakiseofficial  
       2018-09-07 10:11:48 +08:00 via Android   2
    两个人在同一分支提交代码?不应该基于一个 master 开两个分支单独做,然后向 master 提 pr 嘛,如果当前分支落后于 master,拉 master 代码然后 rebase。gitflow 了解一下
    SCaffrey
        13
    SCaffrey  
       2018-09-07 10:19:01 +08:00   1
    git branch 看看是不是切出去了= =
    BarZu
        14
    BarZu  
       2018-09-07 10:48:42 +08:00   1
    1、尽量不要两个人同时改同一个文件
    2、暂存、拉取、提交,记住 3 个步骤养成良好的习惯
    3、注意,这是重点,尽量使用相同的编辑器,建议 vscode,禁止使用任何自动格式化工具,如果非要使用,那么每个人都必须使用同一款,相同版本,相同配置项
    4、禁止 git 自动修改结尾符,不禁止这个,windows 编辑的代码以\r\n 结尾,非 windows 以\n 结尾,都可能造成冲突
    5、建议使用 eslint 等代码校验工具在编码时就按提示规范好代码格式,不要犯强逼症随便去改别人的代码格式,缩进都不要改
    waterlaw
        15
    waterlaw  
       2018-09-07 12:00:52 +08:00 via Android
    看来是 git 不会用, 多用命令行, 网上说了会用 60-100 个命令才算熟悉使用 git.
    arthasgxy
        16
    arthasgxy  
       2018-09-07 12:06:42 +08:00   1
    @waterlaw 我读书少你不要骗我。。。git 有超过 100 个命令?
    crossoverJie
        17
    crossoverJie  
       2018-09-07 13:26:55 +08:00   1
    tourist2018
        18
    tourist2018  
       2018-09-07 13:54:28 +08:00
    @waterlaw #15。。。100 个命令 看来这贴里的各位是没人熟悉 git 了
    xiaoyang7545
        19
    xiaoyang7545  
       2018-09-07 14:05:27 +08:00
    不对啊。pull 时候应该会跟你本地的自动合并。应该是会重远端拉取这些文件到你的本地库。为什么会删除掉呢。
    KeepPro
        20
    KeepPro  
       2018-09-07 14:21:02 +08:00
    github: file a b c
    本地:file a b c d e
    pull 的时候 d e 会被删掉?
    xcstream
        21
    xcstream  
       2018-09-07 14:42:13 +08:00
    master 锁定 只能去网站上 pr 合并
    passerbytiny
        22
    passerbytiny  
       2018-09-07 14:46:50 +08:00
    只要你本地提交了,合并的时候就只会合并或冲突,不会删除。而如果你本地没提交,合并的时候只会合并或者禁止合并。就算对方用了 rebase & commit force,你本地拉取合并的时候,仍然是已你本地的提交为基准,不会删除文件。所以我是真搞不明白为啥楼主的文件回丢。
    @arthasgxy 如果把 git checkout xxx,跟 git checkout -b xxx 算成两个命令,几百个都有。
    JeffKing
        23
    JeffKing  
       2018-09-07 14:47:35 +08:00
    hmmm...你是不是有在本地 commit 就直接 pull 了。。。
    arthasgxy
        24
    arthasgxy  
       2018-09-07 14:51:49 +08:00
    @passerbytiny
    这个。。命令不都是这样来计算么?
    git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
    [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
    [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
    [--chmod=(+|-)x] [--] [<pathspec>…]

    (来自 https://git-scm.com/docs/git-add

    如果能按照你这么算。。。那真的 xxx 都能分别算了。。。 这样 git 就有无限个命令了。。
    zhzer
        25
    zhzer  
       2018-09-07 14:53:54 +08:00 via Android
    合并冲突是需要手动解决的
    passerbytiny
        26
    passerbytiny  
       2018-09-07 14:56:12 +08:00
    @arthasgxy 对于新人来说,不能按照 linux 命令格式去算命令多少,而应该按照功能点去算。你看看下面这篇文章就知道 git 功能点有多少了。http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
    passerbytiny
        27
    passerbytiny  
       2018-09-07 14:58:59 +08:00
    @JeffKing 本地没 commit 的时候直接 pull,不会造成文件丢失。因为只要新的 commit 和本地工作空间中有同一个文件,那就是冲突,回禁止 pull/merge。
    arthasgxy
        28
    arthasgxy  
       2018-09-07 14:59:50 +08:00
    @passerbytiny 不,我不打算进行这个话题。
    因为偏离了主旨。(我同样不否认 git 功能非常多,以及新人需要掌握的非常多)

    我只是想反驳他所说的:“看来是 git 不会用” 和 “网上说了”
    对于前一句,就像你所说“所以我是真搞不明白为啥楼主的文件回丢。”, 同感。
    对于后一句,无力吐槽。
    yuge0099
        29
    yuge0099  
    OP
       2018-09-07 19:01:28 +08:00 via Android
    @KeepPro 是遇到这样了
    yuge0099
        30
    yuge0099  
    OP
       2018-09-07 19:05:15 +08:00 via Android
    @KeepPro
    在处理 conflict 的时候 git 显示
    remove file1
    remove file2 大概是这样。
    sampeng
        31
    sampeng  
       2018-09-07 19:25:30 +08:00
    刚回答完别人。。粘贴过来

    在用 svn 的经验告诉我。。所有的分支合并。。挑选合并是最靠谱的。频繁的从 dev 分支把代码 cherry pick.或者合并的时候手动的 cherry pick。而不是无脑 merge。。其实每次从 dev 分支往主干上合并并没多少东西。这样合并几乎不会有任何问题。。。
    无脑 merge、rebase。只有知道没有人在我之前提交任何东西。并且的清楚知道合并和开发顺序。其实无所谓,操作完了千万别 push 上去。。检查一下没问题再 push。。。

    省事一点就 git flow 之类的。其实一开始我觉得这个很牛逼。。其实用了才发现没什么卵用。项目节奏变化多端。。
    sampeng
        32
    sampeng  
       2018-09-07 19:27:37 +08:00
    就两个重点。。个人用起来觉得没什么问题。可以应付暂时面临的所有问题。

    cherry pick
    开分支,频繁的 pull/fetch。
    sampeng
        33
    sampeng  
       2018-09-07 19:34:30 +08:00
    再 ps 一句。。。

    模块分离才是核心。。其他各种技巧都是假的。

    无法做到干净的模块分离。成吨的冲突,神仙都救不了
    melonrice
        34
    melonrice  
       2018-09-07 19:36:48 +08:00
    PR 啊。。。
    waterlaw
        35
    waterlaw  
       2018-09-07 20:49:04 +08:00
    waterlaw
        36
    waterlaw  
       2018-09-07 20:52:18 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     987 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:40 PVG 06:40 LAX 15:40 JFK 18:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86