• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yuge0099
V2EX  ›  程序员

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

  •  
  •   yuge0099 · Sep 7, 2018 via Android · 5318 views
    This topic created in 2817 days ago, the information mentioned may be changed or developed.
    目前和别人合作开发小项目,代码更新快,本地代码不能及时更新最新的代码。使用 pull 自动 merge,总会造成文件丢失,代码丢失的情况。想问一下一般大家是怎么处理的。
    Supplement 1  ·  Sep 7, 2018
    可能我的文件丢失形容地不恰当。应该是 GitHub 上最新的版本新加了几个文件,而本地的 commit 却没有(本地 commit 时间比 GitHub 上的晚),于是使用 pull 自动 merge 的时候,git 选择删除这几个文件。
    Supplement 2  ·  Sep 7, 2018
    文件还找得回来,就是每次都得从 commit 的记录里把文件复制出来,然后重新放回去。
    36 replies    2018-09-07 20:52:18 +08:00
    unifier
        1
    unifier  
       Sep 7, 2018   ❤️ 1
    git flow / github flow / gitlab flow 了解一下?
    innoink
        2
    innoink  
       Sep 7, 2018 via Android   ❤️ 1
    你不处理 merge conflict 吗?
    yuge0099
        3
    yuge0099  
    OP
       Sep 7, 2018 via Android
    @innoink 它没有显示 conflict,直接移除文件和代码
    niboy
        4
    niboy  
       Sep 7, 2018   ❤️ 1
    一份是本地的目录,一份专门用来同步服务器的最新代码。
    每次合并,用 beycompare 比较
    jy02534655
        5
    jy02534655  
       Sep 7, 2018   ❤️ 1
    这个时候你需要的是 Git Extensions 这种傻瓜式工具
    teddy2725
        6
    teddy2725  
       Sep 7, 2018
    用 git 能用到代码丢失,我建议放弃写代码
    wutiantong
        7
    wutiantong  
       Sep 7, 2018   ❤️ 1
    你先学学 git 的原理吧,你所说的文件代码丢失,应该不是丢失了
    zgray
        8
    zgray  
       Sep 7, 2018   ❤️ 1
    除非强推覆盖,否则 log 里面找得回。找到干你代码的人,干死他。

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

    本地是有 commit 的,merge 时如果有删除文件可以从本地 commit 中恢复。你还是用 git 用的不是很熟悉。这个跟 github 没什么关系。
    yuge0099
        11
    yuge0099  
    OP
       Sep 7, 2018 via Android
    @wutiantong
    @zgray 确实不是丢失。是 git merge 策略的问题,不知道是不是我使用有错误。
    akiakiseofficial
        12
    akiakiseofficial  
       Sep 7, 2018 via Android   ❤️ 2
    两个人在同一分支提交代码?不应该基于一个 master 开两个分支单独做,然后向 master 提 pr 嘛,如果当前分支落后于 master,拉 master 代码然后 rebase。gitflow 了解一下
    SCaffrey
        13
    SCaffrey  
       Sep 7, 2018   ❤️ 1
    git branch 看看是不是切出去了= =
    BarZu
        14
    BarZu  
       Sep 7, 2018   ❤️ 1
    1、尽量不要两个人同时改同一个文件
    2、暂存、拉取、提交,记住 3 个步骤养成良好的习惯
    3、注意,这是重点,尽量使用相同的编辑器,建议 vscode,禁止使用任何自动格式化工具,如果非要使用,那么每个人都必须使用同一款,相同版本,相同配置项
    4、禁止 git 自动修改结尾符,不禁止这个,windows 编辑的代码以\r\n 结尾,非 windows 以\n 结尾,都可能造成冲突
    5、建议使用 eslint 等代码校验工具在编码时就按提示规范好代码格式,不要犯强逼症随便去改别人的代码格式,缩进都不要改
    waterlaw
        15
    waterlaw  
       Sep 7, 2018 via Android
    看来是 git 不会用, 多用命令行, 网上说了会用 60-100 个命令才算熟悉使用 git.
    arthasgxy
        16
    arthasgxy  
       Sep 7, 2018   ❤️ 1
    @waterlaw 我读书少你不要骗我。。。git 有超过 100 个命令?
    tourist2018
        18
    tourist2018  
       Sep 7, 2018
    @waterlaw #15。。。100 个命令 看来这贴里的各位是没人熟悉 git 了
    xiaoyang7545
        19
    xiaoyang7545  
       Sep 7, 2018
    不对啊。pull 时候应该会跟你本地的自动合并啊。应该是会重远端拉取这些文件到你的本地库。为什么会删除掉呢。
    KeepPro
        20
    KeepPro  
       Sep 7, 2018
    github: file a b c
    本地:file a b c d e
    pull 的时候 d e 会被删掉?
    xcstream
        21
    xcstream  
       Sep 7, 2018
    master 锁定 只能去网站上 pr 合并
    passerbytiny
        22
    passerbytiny  
       Sep 7, 2018
    只要你本地提交了,合并的时候就只会合并或冲突,不会删除。而如果你本地没提交,合并的时候只会合并或者禁止合并。就算对方用了 rebase & commit force,你本地拉取合并的时候,仍然是已你本地的提交为基准,不会删除文件。所以我是真搞不明白为啥楼主的文件回丢。
    @arthasgxy 如果把 git checkout xxx,跟 git checkout -b xxx 算成两个命令,几百个都有。
    JeffKing
        23
    JeffKing  
       Sep 7, 2018
    hmmm...你是不是沒有在本地 commit 就直接 pull 了。。。
    arthasgxy
        24
    arthasgxy  
       Sep 7, 2018
    @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  
       Sep 7, 2018 via Android
    合并冲突是需要手动解决的
    passerbytiny
        26
    passerbytiny  
       Sep 7, 2018
    @arthasgxy 对于新人来说,不能按照 linux 命令格式去算命令多少,而应该按照功能点去算。你看看下面这篇文章就知道 git 功能点有多少了。http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
    passerbytiny
        27
    passerbytiny  
       Sep 7, 2018
    @JeffKing 本地没 commit 的时候直接 pull,不会造成文件丢失。因为只要新的 commit 和本地工作空间中有同一个文件,那就是冲突,回禁止 pull/merge。
    arthasgxy
        28
    arthasgxy  
       Sep 7, 2018
    @passerbytiny 不,我不打算进行这个话题。
    因为偏离了主旨。(我同样不否认 git 功能非常多,以及新人需要掌握的非常多)

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

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

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

    cherry pick
    开分支,频繁的 pull/fetch。
    sampeng
        33
    sampeng  
       Sep 7, 2018
    再 ps 一句。。。

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

    无法做到干净的模块分离。成吨的冲突,神仙都救不了
    melonrice
        34
    melonrice  
       Sep 7, 2018
    PR 啊。。。
    waterlaw
        35
    waterlaw  
       Sep 7, 2018
    waterlaw
        36
    waterlaw  
       Sep 7, 2018
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5444 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 197ms · UTC 09:16 · PVG 17:16 · LAX 02:16 · JFK 05:16
    ♥ Do have faith in what you're doing.