Py学习  »  Git

git deploy web hook命令-不太明白。

Patrick • 4 年前 • 742 次点击  

我第一次使用Web钩子部署到服务器上。 但是,我很难理解git命令,尤其是在命令结束时签出?

这是我使用的命令:

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

我不确定结帐时到底在做什么?如果有人能解释的话,那会有帮助的,因为这让我很困惑。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38088
 
742 次点击  
文章 [ 1 ]  |  最新文章 4 年前
torek
Reply   •   1 楼
torek    5 年前

这将使用git作为部署工具,这有点像使用扳手作为锤子:它可以工作,但有很好的理由不这样做。

正在运行:

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

与跑步非常相似:

git checkout -f

我想你已经习惯了 git checkout 用一个 分支机构名称 签出一个特定的分支。如果你咨询的话 the git checkout documentation ,你会发现你也可以跑步 Git结账 没有 分支名称:

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

也就是说,如果这个特定的存储库当前在分支上 master ,正在运行 Git结账 方法 git checkout master ,已经打开了。现在让我们注意一下 --git-dir --work-tree 期权,也就是说 the front-end git command documentation . 最重要的是 --工作树 选项,因为 --Git目录 参数已由以下事实设置:它作为Git挂钩运行(Git挂钩使用 $GIT_DIR 预设):

--work-tree= path

    设置工作树的路径。…

基本上,这告诉Git: 不要在通常的地方寻找工作树,无论在哪里,都要在另一个地方寻找。 path 位置 . 在“裸”Git存储库(在Web服务器上)中,通常将Git存储库本身设置为 工作树。因此,您必须使用 --工作树 (或任何等效的)强制Git假定此其他目录,例如 /location/ ,包含已签出的存储库。

这个 checkout 然后,verb告诉git接受当前工作树中的任何内容(在另一个位置),并重新签出当前分支,无论当前分支是什么(可能是 主人 )这个 -f 期权是指 Git结账 它代表 ,意思是: 即使结帐会破坏一些正在进行的工作,无论如何也要这样做。 正常情况下 Git结账 小心不要覆盖正在进行的工作。

当然,在您的Web服务器上,不应该有任何正在进行的工作:部署位置中的文件可能 应该 匹配Git认为的内容。所以 -F 应该 通常是不必要的。然而,这整个想法 Git认为在工作树中 本身就是个问题。吉特 跟踪 通过Git称之为 指数 . 如果你把部署的想法推得太紧,使用git本身作为部署工具,你会发现git的跟踪会破坏部署。这是 为什么? 这就像用扳手当锤子:如果你轻轻地用它,或者知道你在做什么并且很小心,它就会起作用,但是如果你做了大量的锤击,扳手可能会折断。

有关pro-git as部署工具文章,它涵盖了这两个参数中的一些,请参见 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 也。