【问题标题】:Automatically add .gitignore and hooks on git init在 git init 上自动添加 .gitignore 和 hooks
【发布时间】:2019-08-03 15:04:36
【问题描述】:

有没有办法告诉 git 每次在某台机器上运行git init 时自动创建/填充 .gitignore 和 .git/hooks 文件夹中的某些文件?也许某个地方的全局配置?

我们有需要全面忽略的符号链接,以及需要为每个 repo 设置的 pre-receive 和 post-receive 挂钩,因此这比为每个 repo 手动设置要容易。

谢谢。

【问题讨论】:

    标签: git


    【解决方案1】:

    您可以使用 git 模板目录实现此目的

    git config --global init.templatedir /path/to/template
    

    然后您可以将文件添加到文件夹/path/to/template/hooks,它们将自动复制到git init 上的.git/hooks 文件夹

    您可以将所需的 .gitignore 内容放在文件夹 /path/to/template/info 中您命名为 exclude 的文件中。然后它将有效地成为.gitignore 文件在git init 创建的所有新存储库中。

    请注意,.gitignore 文件未填充exclude 的内容。在git init 上,info文件夹中的exclude 文件将被复制到您的git 存储库的.git/info 文件夹中。这将导致exclude 中列出的文件模式被忽略,就像.gitignore 中的模式一样。

    如果您使用的是 unix,甚至还有一个默认模板目录 /usr/share/git-core/templates。在 MacOS 上,模板目录位于 /usr/local/share/git-core/templates

    【讨论】:

    • 我还将添加该/path/to/template 中的所有 文件将添加到您项目中的.git 文件夹中。因此,请确保 .gitignore 模板本身位于一个文件夹中。
    • @micnguyen - 你能解释一下你的句子吗?这对我来说没有意义。
    • @Klas Mellbourn - .gitignore 部分不起作用。我在/usr/share/git-core/templates/info/exclude 中添加了行,但是当我创建新存储库时,没有从该模板填充.gitignore 文件。我有git version 2.20.1
    • @MartinVegter 我试图澄清我的答案,请参阅以Note that开头的段落
    • 对于未来的用户:如果您想在初始化时合法地将 .gitignore 添加到存储库,my answer 到另一个问题概述了您如何为 .gitattributes 执行此操作,这与你会如何为.gitignore 做这件事。唯一需要注意的是,您需要创建一个类似 git create 的别名,它同时运行 git init 并填充忽略文件。
    【解决方案2】:

    .gitignore_global 在你的主目录中。如果文件不存在,请创建它。与 .gitignore 文件的语法相同。请注意您在此文件中放置的内容!

    如果所有用户都希望共享同一个 .gitignore 文件,您可以在

    中创建一个
    /.SHARED_GIT_IGNORE  
    

    然后在每个相应的用户主目录中创建指向它的软链接。

    /Users/ALL_USERS/.gitignore_global -> /.SHARED_GIT_IGNORE
    

    【讨论】:

    • 那么如果我们有 10 个开发人员,我们需要在他们的每个主目录中都有一个 .gitignore_global 文件吗?必须有一种方法来做一个真正的全球性 .gitignore...
    • 有替代方案,但我的意思是,设置10次很难吗?如果每个开发人员都想忽略不同的东西怎么办?为什么会有 10 个开发人员共享一台机器?或者,过度全球化的 git 忽略听起来非常危险。如果必须,您可以将所有符号链接到文件系统中其他位置的同一个 .gitignore_global ,这样您就可以保留同一个被忽略的文件,而无需对其进行任何更改...
    • 我在想如果我们必须进行更改可能会很烦人,但你说得对,它只有 10 个文件。
    【解决方案3】:

    如果我们谈论的是包含 JavaScript 并使用 npm 的 repo,那么您可以使用 husky 来设置提交挂钩。

    npm install husky --save-dev
    
    // package.json
    {
      "husky": {
        "hooks": {
          "pre-commit": "npm test",
          "pre-push": "npm test",
          "...": "..."
        }
      }
    }
    

    这并不能直接回答原始问题,但可能与许多开发人员有关。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 2019-04-16
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多