【问题标题】:Using git, how to auto-format when pull/clone/fetching from github使用 git,如何在从 github 拉/克隆/获取时自动格式化
【发布时间】:2018-06-15 21:51:15
【问题描述】:

好的,所以我们的团队是新的,我们正在努力为我们的代码确定一个样式指南。我们是一家 GoLang 商店,所以格式化很简单。

Shell 脚本代码(在许多代码中)没有一个规范的样式指南可供参考。

我们将在提交挂钩中使用shfmt(因为它看起来很不错),这至少可以使我们的代码风格在 repo 中保持一致。但是,如何通过某种方式将代码从shfmt 的同质样式“弯曲”回我们的个人样式?有这样的东西吗?

我想我可以只使用shfmt 或其他 10 多种工具之一来“美化”shell 代码并将该工具配置为最接近的设置以恢复我的风格。这可能是我需要走的方向。

两个问题:

  1. 有谁知道可以在格式上前进或后退的工具吗?
  2. 自动克隆/拉取/获取挂钩或自动执行此操作的方式怎么样?

显然,我可以编写一个在拉取后执行的包装脚本,但我只是想知道以前是否有人做过这样的事情。

【问题讨论】:

    标签: git github code-formatting


    【解决方案1】:

    这不是一种实用的方法(“格式向前或向后”),因为它涉及重写提交(更改其内容,因此更改其 SHA1)

    通常的方法是简单地拒绝任何推送的提交,如果其 shfmt 输出与推送的提交内容不同(意味着代码在推送之前 没有正确格式化。

    不过,如果您想确保对过去的提交进行格式化,您可以使用 git filter-branch,如 Elliot Chance 的“Reformatting Your Codebase with git filter-branch”中所述。

    git filter-branch --tree-filter 'shfmt $(\
      git show $GIT_COMMIT --name-status | egrep ^[AM] |\
        grep .sh| cut -f2)' -- --all
    

    但是,所有开发人员都需要将他/她的本地克隆重置为新的重写 repo。

    我只是在寻找一种在本地仓库中展示我的风格的方法。

    问题是在不改变内容的同时显示你的风格。
    你可以试试smudge/clean content filter approach as in here

    【讨论】:

    • 好吧,就前向方法而言,这将在预提交挂钩中完成,因此不会重写提交本身(我认为预提交挂钩在 SHA 之前工作)。我明白你对后向格式的看法,这是我在问这个问题时就知道的。本质上,我只是在寻找一种在本地仓库中展示我的风格的方法。我承认,这似乎很困难并且可能不实用,但我只是想看看是否有其他人尝试过这样做。您描述的方法可能是我会研究的,但出于不同的原因。
    • @Jim 可以轻松绕过(或未安装或未安装)预提交挂钩。服务器端的预接收挂钩可以更有效地执行策略。
    • @Jim 我已经编辑了答案以添加替代方案(内容过滤器驱动程序)
    • 我一直在谷歌上搜索它。我最终相信你是对的,但现在在阅读news.ycombinator.com/item?id=6687600 时,我的想法有所不同。答案不在 VCS 中。它在编辑器(或编辑器之前的包装器)中将代码转换为我喜欢的代码,然后分别在编辑之前和之后转换回团队标准。我将四处寻找可以做到这一点的工具。如果找不到,也许我会写一个。
    • @Jim " 在编辑器中(或编辑器之前的包装器)将代码转换为我喜欢的,然后再转换回团队标准 ": 是的,这就是 smudge/clean 脚本的设计在结帐/提交时自动执行。但是你仍然需要找到合适的工具来调用这些脚本。
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 2021-07-16
    • 2012-03-29
    • 1970-01-01
    • 2021-01-28
    • 2014-12-12
    • 2015-01-05
    • 2018-01-22
    相关资源
    最近更新 更多