这将使用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
也。