【问题标题】:GIT - copy newest branch to another directoryGIT - 将最新分支复制到另一个目录
【发布时间】:2013-08-15 22:33:22
【问题描述】:

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

【问题讨论】:

标签: git deployment


【解决方案1】:

选项 1:排除 .git 子目录

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

显然你可以这样做with a bash terminal using 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's answer 中使用这些 Unix 工具。另见How to do a “git export” (like “svn export”)

# 选项 3:使用 git ls-files

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

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

git ls-files | xargs cp <destination-root>

【讨论】:

  • 我试过这个命令:rsync -av --exclude='.git' source destination,但它仍然复制以~结尾的文件,是否可以排除以~结尾的文件?
  • @Cupcake 我想你正在那里寻找... | xargs -I{} cp {} DEST
  • @Andrius 你可以添加多个--exclude 标志,例如:rsync -av --exclude='.git' --exclude='*~' source destination
  • @Andrius 你能试试janos's answer吗?它可能更简单。
  • @janos 出于某种原因,试图排除 '*~',不起作用。这些带有~ 的文件在git中也很重要吗?或者我可以删除它们并在 git 中添加忽略吗?我在排除文件中看到了一个带有参数的选项 - *~?
【解决方案2】:

这是一种方法:

mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir

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

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

最后,您可能会对我个人最喜欢的:using a post-receive hook to deploy projects remotely 感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 2021-08-31
    • 1970-01-01
    • 2017-08-04
    • 2014-10-09
    • 2017-02-01
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多