是否可以“签出”到存储库之外的位置?我的意思是没有“.git”目录的分支的克隆。
例如:使用 git 管理网站。您可以通过 WebDAV 编辑一些文件、提交文件并将其复制到 Web 服务器。WebDAV 路径是存储库外的位置,不应包含“.git”。
这可能不是构建 git 的问题,但这可能吗?
Zor*_*che 20
是的,这当然是可能的。
假设我有一个/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.
Run Code Online (Sandbox Code Playgroud)
如果您对远程系统的唯一访问权限是 webdav,那么当然应该可以编写一个提交后钩子,该钩子将直接或临时位置检出到 webdav 主机,然后您可以编写上传脚本。
如果你只想要文件,你可以使用git archive. 通常它会写入压缩包或 ZIP 之类的存档,但您也可以通过管道传输它:
git archive master | tar -x -C /some/path
Run Code Online (Sandbox Code Playgroud)
在这里,master显然是您要存档的分支,并且/some/path将仅包含文件 - no.git或.gitignore.
或者您可以使用git checkout-index更类似于文件的“结帐”:
git checkout-index -f -a --prefix=/some/path/
Run Code Online (Sandbox Code Playgroud)
在这里,该-a选项告诉git检查所有文件。前缀将被添加到输出中。有人还为此编写了一个包装器以提供git export.
| 归档时间: |
|
| 查看次数: |
18463 次 |
| 最近记录: |