我阅读了GIT文档,但无法弄清如何将最新版本的代码简单地复制到另一个目录(或部署它)。当然,我可以简单地使用copy -r code /path/to/another/dir
,但这会复制由GIT创建的所有其他文件。而我不需要那些文件。那么有没有一种简单的方法只复制原始文件而不包括所有这些隐藏文件(或原始文件的副本)?
我阅读了GIT文档,但无法弄清如何将最新版本的代码简单地复制到另一个目录(或部署它)。当然,我可以简单地使用copy -r code /path/to/another/dir
,但这会复制由GIT创建的所有其他文件。而我不需要那些文件。那么有没有一种简单的方法只复制原始文件而不包括所有这些隐藏文件(或原始文件的副本)?
mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir
git archive
命令通常用于从存储库的内容生成归档文件。它将档案转储到标准输出,通常将其重定向到文件中。在这里,我们会有所改变:我们不会重定向,而是立即提取它到指定的目录中。目标目录必须先创建。.git
目录将存在于部署目录中,另一方面,简单的复制将不会删除存储库中已删除的文件,它们将保留在目标位置。假设你的Git仓库有一个标准设置,你可以将项目根目录下的所有内容复制到另一个位置,但要排除.git
子目录。
显然,你可以使用bash终端中的rsync
命令来实现此操作:
rsync -av --exclude='.git' source destination
但我不确定如何在Windows中使用copy
命令。
另一种选择是使用git archive
命令:
git archive --format zip --output "output.zip" master -0
将给你一个未压缩的档案 (-0
是未压缩的标志)。这样做的问题是你需要从档案中提取文件。
如果你有类似于 Bash shell 或 Cygwin 的 Unix 工具,则可以使用这些 Unix 工具,如 janos 的答案 中所述。另请参见如何执行“git export”(就像“svn export”)。
# 选项3: 使用 git ls-files
编辑实际上在这种情况下有问题,因为我传递给cp
的参数顺序错误 (把文件作为目标目录而不是源目录),所以现在擦掉这个吧。
另一个选择是获取 Git 在工作副本中跟踪的所有文件的列表,然后将它们作为复制命令的参数传递。以下是使用 Unix cp
的示例:
git ls-files | xargs cp <destination-root>
... | xargs -I{} cp {} DEST
- janos--exclude
标志,例如:rsync -av --exclude='.git' --exclude='*~' source destination
。 - janos'*~'
并不起作用。这些带有~
的文件在git中很重要吗?还是我可以直接删除它们并在git中添加忽略?我在排除文件中看到了一个选项,带有参数- *~?
。 - Andrius