Answers:
是的,这肯定是可能的。
可以说我/srv/production.git
在目标系统/服务器上有一个裸仓库。
在目标系统上,我可以使用以下命令 cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
如果我位于非裸仓库中,则命令会稍有不同。可以说我在拥有一个裸仓库/srv/testing
。结帐我会用cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
实际上,在我的系统上,我什至在production.git
存储库中的提交后挂钩中自动执行此操作。因此,当您推送到production.git
最新版本时,将自动签出到Web根目录。
#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".
GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.
如果您对远程系统的唯一访问权是webdav,那么肯定应该可以编写一个提交后钩子,该钩子将直接检出到webdav主机,也可以检出到临时位置,然后您可以编写上载脚本。
如果只需要文件,则可以使用git archive
。通常,它会写入诸如tarball或ZIP之类的档案,但是您也可以通过管道将其归档:
git archive master | tar -x -C /some/path
在这里,master
显然是您要存档的分支,/some/path
将仅包含文件-no .git
或.gitignore
。
或者,您可以使用git checkout-index
更类似于文件“检出”的文件:
git checkout-index -f -a --prefix=/some/path/
在这里,该-a
选项指示git
检出所有文件。前缀将添加到输出之前。有人还写了解决这个包装给予git export
。
GIT_WORK_TREE=/destinationpath git checkout -f
在当前目录位于裸存储库或.git子目录的顶部时运行。您将结帐到/ destinationpath