【发布时间】:2018-12-15 12:10:09
【问题描述】:
我有一个带有源文件的裸远程存储库,我只想在它被推送到其中构建更改的文件。我认为检测哪些文件已更改的最佳方法是输入命令
changed_files=$(git diff-tree --no-commit-id --name-only -r HEAD) 进入接收后挂钩。
但是,正如我通过将其回显到文件中验证的那样,该变量最终为空。如果我用 HEAD^ 代替 HEAD,它会显示第二次到最近一次提交的更改文件。但是,当我放 HEAD 时,它并没有显示最新的更改,而是什么也没显示。
谁能帮帮我?还是有更聪明的方法来解决我的问题?
我肯定更喜欢一种精益方法,例如自动触发构建并推送一个必须 e 的构建。 G。定期检查更改。
【问题讨论】:
-
具体来说,
HEAD会识别什么提交后接收挂钩何时运行?是合并提交吗?如果是这样,您希望git diff-tree对此做什么?您应该首先使用HEAD吗?如果推送到分支feature/X但服务器上的HEAD引用master怎么办? -
我只有一个 master 分支,没有被合并。我希望它能够向我显示在刚刚推送的最新提交中更改的文件。
-
好的,如果不是合并提交,
gt diff-tree实际上应该以更简单的方式将HEAD^与HEAD进行比较。但是您可能希望将特定 ref 名称的当前值与其之前的值进行比较,而不是将HEAD的当前值与HEAD的父级的当前值进行比较。见brian m. carlson's answer。 -
请注意,顺便说一下,您可以在没有任何其他 分支名称的情况下进行 合并提交。事实上,如果你使用
git pull和其他人一起使用git push和git pull,那么你可能正在做一些所谓的foxtrot merges。
标签: bash git git-post-receive