【问题标题】:Git doesn't clone content of template directoryGit 不会克隆模板目录的内容
【发布时间】:2020-09-04 09:53:44
【问题描述】:

我想要一个类似后克隆钩子的东西。 所以我的想法是在我的远程源中创建一个模板目录,其中包含一个“hooks”文件夹和一个“post-checkout”脚本。

所以我的“结帐后”脚本位于远程源:

[remote-repo-path]/template/hooks/post-checkout

接下来,我在remote origin配置模板目录:

git config init.templatedir '[remote-repo-path]/template'

但是...当我从存储库克隆时,我只能从本地机器上的默认模板目录中获取内容。

如何从远程源克隆模板目录?

【问题讨论】:

  • 我不确定你所说的[remote-repo-path] 是什么意思,但是在git init 期间复制模板目录时Git 只能访问本地 文件。
  • 这些是我要克隆的 git 服务器上的配置。我在服务器上做 git config init.templatedir,因为我认为 templatedir 被克隆到本地 .git 目录.....我想我误解了 git 中模板的想法,我认为它应该是对特定 git 命令执行的行为或操作的模板...我猜它更多的是关于某些目录结构...?
  • 好的,我想我现在明白了令人困惑的地方了。

标签: git githooks


【解决方案1】:

在此重要的是要意识到 Git 对于获取内容的位置非常有偏见。特别是,Git 所谓的 模板 必须 存在于 local 系统上。配置数据,包括可以在.git/config.git/hooks/* 中设置的控制旋钮,总是在本地找到1。这样,克隆存储库不会引入Trojan horse

这意味着服务器的 模板(如果有的话)是不相关的。您的 git clone 命令可以被认为是运行以下六个主要是 Git 命令:2

  1. mkdir <em>path</em>,创建一个新目录来存放一个存储库;然后在该新目录中运行其余命令。 path 来自您的克隆命令。
  2. git init,创建一个初始的、完全空的存储库
  3. git remote add <em>remote url</em>,其中 remote 通常是 originurl 是您在克隆命令中使用的 URL。
  4. git config 如果/根据需要(仅当为 git clone 提供了一些可选参数时)。
  5. git fetch <em>remote</em>,从步骤 3 中添加的远程获取提交和其他 Git 对象,并为其 Git 的分支名称创建远程跟踪名称。
  6. git checkout <em>name</em>,其中 name 来自您的 -b 选项,或者如果您未提供 -b 选项,则在步骤 5 中由其他 Git 指示。

这些步骤中唯一使用模板的是第 2 步,而在第 2 步,您的 Git 甚至还没有联系服务器。因此,在第 2 步中复制的任何挂钩文件或其他数据必须来自您自己机器上的文件,而不是服务器上的文件。


1此规则有一些小例外。例如,Git 的 子模块 数据可以从存储库的 .gitmodules 文件复制到 .git/config。必须仔细审查此类数据以避免安全问题。 Git 应该自己进行仔细的审查;如果它没有这样做,那就是一个错误。

2这六个命令中的一些有时可以省略,具体取决于您可能传递给git clone 的选项,并且克隆代码内置了所有这些东西,而不是简单的 shell 脚本,它只是依次运行每个命令。但效果是好像你运行了这些命令。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2013-07-14
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多