GIT - 将最新分支复制到另一个目录

And*_*ius 5 git deployment

我阅读了 GIT 文档,但不知道如何简单地将最新版本的代码复制到另一个目录(或部署它)。当然,我可以简单地copy -r code /path/to/another/dir,但它会复制由 GIT 创建的所有其他文件。而我不需要那个。那么有没有一种简单的方法可以只复制原始文件而没有所有这些隐藏文件(或原始文件的副本)?

小智 5

选项 1:排除 .git 子目录

假设您的 Git 存储库有标准设置,您可以复制项目根目录中的所有内容,但排除.git子目录。

显然,您可以使用 bash 终端rsync执行此操作

rsync -av --exclude='.git' source destination
Run Code Online (Sandbox Code Playgroud)

但我不确定你怎么能用 Windows 做到这一点copy

选项 2:git 存档导出

另一种选择是使用git archive

git archive --format zip --output "output.zip" master -0
Run Code Online (Sandbox Code Playgroud)

会给你一个未压缩的存档(-0是未压缩的标志)。这样做的问题是您必须从存档中提取文件。

如果您可以使用 bash shell 或 Cygwin 之类的 Unix 工具,您也可以在janos's answer 中使用这些 Unix 工具。另请参阅如何执行“git 导出”(如“svn 导出”)

# 选项 3:使用 git ls-files

编辑实际上遇到了这个问题,因为我以cp错误的顺序将参数传递给(文件作为目标目录而不是源),所以现在暂时先写这个。

另一种选择是获取 Git 在您的工作副本中跟踪的所有文件的列表,然后将它们作为参数传递给复制命令。这是 Unix 的示例cp

git ls-files | xargs cp <destination-root>
Run Code Online (Sandbox Code Playgroud)


Sto*_*ica 5

这是一种方法:

mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir
Run Code Online (Sandbox Code Playgroud)

git archive命令通常用于从存储库的内容生成存档文件。它转储以存档到标准输出,您通常会将其重定向到文件。在这里,我们稍微颠覆一下命令:不是重定向,而是立即将其解压缩到指定目录中。必须首先创建目标目录。

也就是说,您似乎希望使用它来部署您的项目。我个人使用 Git 本身来部署项目。这样您就可以使用 Git 命令轻松升级和回滚。当然,该.git目录将存在于部署目录中,另一方面,简单的副本不会删除在存储库中删除的文件,它们将保留在目的地。

最后,您可能对我个人的最爱感兴趣:使用 post-receive hook 远程部署项目