我阅读了 GIT 文档,但不知道如何简单地将最新版本的代码复制到另一个目录(或部署它)。当然我可以只是简单copy -r code /path/to/another/dir
的,但是它会复制由 GIT 创建的所有其他文件。我不需要那个。那么有没有一种简单的方法来复制原始文件而没有所有这些隐藏文件(或原始文件的副本)?
2 回答
选项 1:排除 .git 子目录
假设您为 Git 存储库设置了标准设置,您可以只复制项目根目录中的所有内容,但不包括.git
子目录。
显然,您可以使用 bash 终端rsync
执行此操作:
rsync -av --exclude='.git' source destination
但我不确定你如何用 Windows 做到这一点copy
。
选项 2:git 存档导出
另一种选择是使用git archive
:
git archive --format zip --output "output.zip" master -0
会给你一个未压缩的存档(-0
是未压缩的标志)。这样做的问题是您必须从存档中提取文件。
如果您可以在 bash shell 或 Cygwin 中访问 Unix 工具,您也可以在janos 的回答中使用这些 Unix 工具。另请参阅如何进行“git 导出”(如“svn 导出”)。
# 选项 3:使用 git ls-files
编辑实际上对此有问题,因为我以cp
错误的顺序将参数传递给(文件作为目标目录而不是源),所以现在暂时不要这样做。
另一种选择是获取 Git 在工作副本中跟踪的所有文件的列表,然后将它们作为参数传递给复制命令。这是一个 Unix 的例子cp
:
git ls-files | xargs cp <destination-root>
这是一种方法:
mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir
该git archive
命令通常用于从存储库的内容生成存档文件。它转储到归档到标准输出,您通常将其重定向到文件。在这里,我们稍微颠覆一下命令:我们立即将其解压缩到指定目录中,而不是重定向。必须首先创建目标目录。
也就是说,您似乎希望使用它来部署您的项目。我个人使用 Git 本身来部署项目。这样您就可以使用 Git 命令轻松升级和回滚。当然,该.git
目录将存在于部署目录中,另一方面,简单的副本不会删除存储库中已删除的文件,它们将保留在目标位置。
最后,您可能对我个人最喜欢的东西感兴趣:使用 post-receive 挂钩远程部署项目。