V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuge0099
V2EX  ›  程序员

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

  •  
  •   yuge0099 · 2018-09-07 09:01:33 +08:00 via Android · 4527 次点击
    这是一个创建于 2254 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前和别人合作开发小项目,代码更新快,本地代码不能及时更新最新的代码。使用 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
    zacharyjia
        1
    zacharyjia  
       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 策略的问题,不知道是不是我使用有错误。
    xlui
        12
    xlui  
       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   ·   实用小工具   ·   924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:46 · PVG 05:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.