如何在一个多分支的项目中,避免因代码格式化导致的 git 冲突?

2021-05-24 15:08:33 +08:00
 Kamitora

比如说,插件把 Foo someBar=fooBar() 转换为 Foo someBar = fooBar()

4446 次点击
所在节点    git
28 条回复
zpfhbyx
2021-05-24 15:11:17 +08:00
加钩子 强制格式化
luckyrayyy
2021-05-24 15:11:45 +08:00
没懂,代码格式化为什么会导致代码冲突?别人也改了这行?
wzxlovesy
2021-05-24 15:12:17 +08:00
加一些 format check 到 pre commit hook 中?
x66
2021-05-24 15:18:38 +08:00
idea 可以在提交之前 reformat code, 保持大家的设置一致即可
Kamitora
2021-05-24 15:20:12 +08:00
@luckyrayyy
如果别人的代码没有格式化,插件就会修改那些行。虽然内容没有变,但是空格、换行之类的仍然会导致冲突。
scxiazi
2021-05-24 15:27:00 +08:00
统一格式化方式 强制格式化
BeautifulSoap
2021-05-24 15:27:04 +08:00
lz 的这个问题的根本原因在于,代码作者提交的新代码没有经过格式化,这新代码合并到主干分支后,如果别人再格式化的话容易导致合并冲突

解决办法就是从根本上禁止提交没有经过格式化的代码,这样就能保证所有人提交的新代码都格式化过

首先强制每个人使用统一个代码格式化风格,然后在每次提 pull request 或 pr 有新提交的候用 GitHub action 强制校验代码风格,如果校验失败(比如 pr 提交的代码没有没格式化或不符合风格)的话,直接禁止 pr 合并,只有代码风格检验通过才行
BeautifulSoap
2021-05-24 15:29:28 +08:00
@luckyrayyy 格式化经常性动的不止是一行,可能整个文件都动了,大括号的位置,空行的调整之类的。整个文件都改了的话,这提交上去非常大几率会合并冲突。
Zhuzhuchenyan
2021-05-24 15:37:01 +08:00
楼上已经说得很好,可以用 pre commit hook 来做格式化的琐碎事情,或者 jetbrains 系的 ide 都可以设置在 commit 之前做 code cleanup

建议专门找个时间按照统一标准把整个 repo 都按照统一的标准格式化了,以绝后患
unco020511
2021-05-24 15:53:33 +08:00
首先团队内要统一格式化的配置文件,然后 git hook 强制格式化检测
wellsc
2021-05-24 16:08:58 +08:00
ci, fmt
fzzf230
2021-05-24 16:20:14 +08:00
提交之前统一格式化代码
wzxlovesy
2021-05-24 16:47:17 +08:00
@Kamitora 也有脚本可以只 format 当前 commit 修改过的代码,不 format 其他已有代码
www5070504
2021-05-24 17:05:01 +08:00
从刚开始就统一用 flake8 检查
efaun
2021-05-24 17:35:41 +08:00
代码格式化应该就是编程规范
tomkliyes
2021-05-24 18:01:56 +08:00
这个首先应当从流程上杜绝,不允许未格式化的代码提交。其次需要统一团队所有人的格式化工具和方法
SorcererXW
2021-05-24 18:16:29 +08:00
加 linter, 不格式化不准合并
Mutoo
2021-05-24 20:25:51 +08:00
前端项目有很成熟的工具链完成这个保障:
husky + lint-staged + eslint + prettier

husky 负责 git hook
lint-staged 负责使用指定 linter 对有变更的文件进行检查
eslint 负责代码检查
prettier 负责代码风格管理

启用后基本可以杜绝格式化导致的冲突。
Al0rid4l
2021-05-24 20:39:47 +08:00
linter + git hook 呀, 不符合规范不让提交
abc612008
2021-05-24 22:18:20 +08:00
建议做个宏,把 ctrl+s 变成格式化+保存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX