【发布时间】:2015-04-09 11:31:12
【问题描述】:
我正在远程 repo 上编写一个 git pre-receive 挂钩,以确保推送的代码符合我们公司的内部准则。
当触发预接收挂钩时,我能够找到所有要检查的文件,但是,我没有这些文件的路径来使用普通文件操作打开它们(例如cat git_working_directory/file_name会抛出No such file or directory 错误)。 验证代码的应用程序需要文件路径作为参数,以便它可以打开文件并运行其检查。
考虑这种情况:开发人员创建了一个新文件并将其推送到服务器并触发了预接收挂钩。在这个阶段,新文件没有保存到远程的工作目录,因为预接收挂钩仍在运行。
我想知道是否有一个临时位置,文件被推送后立即保存在 git 中,以便我可以将该目录传递给应用程序以运行检查? p>
更新:
我可以结帐到一个临时位置并在那里运行检查,这可能是一个选项,但考虑到开发人员经常推送的事实,有时甚至是同时推送,并且 repo 非常大,这个选项似乎并不是可行的。我正在寻找一种解决方案,如果它以某种方式可用,我可以只使用文件的路径。
【问题讨论】:
-
远程仓库不应该有工作目录。
-
您需要将文件检出到一个临时工作目录并在那里运行您的检查。
-
@larsks 有没有我可以运行的 git 命令来检查这些文件到临时目录?
-
只是为了澄清:您签入到存储库的文件不会“像那样”保留在那里。其中一些存储为其他的增量,或者它们的内容被压缩。没有任何地方可以保证这些文件处于“可使用”状态
-
是的,joozek,这也是我的理解。我只是想知道我是否错过了关于 git 如何存储文件以及我们如何访问它们的内容。谢谢。
标签: git githooks git-remote