Git Deploy Web Hook命令 - 不太明白。

问题描述 投票:-1回答:1

我刚刚第一次使用Web Hooks部署到我的服务器。但是,我很难理解git命令,特别是在命令结束时检查?

这是我正在使用的命令:

git --work-tree=/location/ --git-dir=/source.git/ checkout -f

我不确定结账时最终会做什么?如果有人能够解释,它会有所帮助,因为它令人困惑。

git deployment
1个回答
0
投票

这使用Git作为部署工具,这有点像使用扳手作为锤子:它有效,但有充分的理由不这样做。

运行:

git --work-tree=/location/ --git-dir=/source.git/ checkout -f

与运行非常相似:

git checkout -f

我在这里假设您已经习惯使用带分支名称的git checkout来检查特定分支。如果你咨询the git checkout documentation,你会发现你也可以在没有分支名称的情况下运行git checkout

你可以省略分支;在这种情况下,命令退化为“检查当前分支”,这是一个带有相当昂贵的副作用的美化无操作,只显示当前分支的跟踪信息(如果存在)。

也就是说,如果此特定存储库当前位于分支master上,则运行git checkout意味着它已经存在的git checkout master。那么现在让我们关注--git-dir--work-tree选项 - 这意味着看看the front-end git command documentation。最重要的部分实际上是--work-tree选项,因为--git-dir参数已经由这个作为Git钩子运行的事实设置(Git钩子与$GIT_DIR预先设置运行):

--work-tree=path

    Set the path to the working tree. ...

从本质上讲,这告诉Git:不要在通常的地方寻找工作树,无论在哪里,都要查看其他path位置。在“裸”Git存储库(在Web服务器上),通常Git存储库本身被设置为根本没有工作树。因此,您必须使用--work-tree(或任何等效的东西)强制Git假定此其他目录(例如/location/)包含已签出的存储库。

然后checkout动词告诉Git采取当前工作树中的任何内容(在这个其他位置)并重新检出当前分支,无论当前分支是什么(可能是master)。 -f选项是git checkout的一个选项,它代表强制,意思是:即使这个结账会破坏一些正在进行的工作,无论如何都要这样做。通常git checkout小心不要覆盖正在进行的工作。

当然,在您的Web服务器上,应该没有正在进行的工作:部署位置中的文件可能应该与Git认为的相匹配。所以-f通常是不必要的。然而,Git认为在工作树中的这个概念本身就是一个问题。 Git通过Git调用其索引来跟踪工作树。如果你过分强调部署思路,使用Git本身作为部署工具,你会发现Git的keep-track打破了部署。这就是为什么它就像使用扳手作为锤子:如果你足够轻柔地使用它,或者知道你在做什么并且小心,它会起作用,但如果你做了很多锤击,扳手可能会断裂。

有关包含两个参数的pro-Git-as-deployment-tool文章,请参阅https://www.freelock.com/blog/john-locke/2015-06/case-git-deployment-tool。另见Deploy code using GIT - checkout vs reset --hard?git post-receive hook doesn't seem to process other branches

© www.soinside.com 2019 - 2024. All rights reserved.