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

7

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


你是否能够使用Unix工具,例如bash shell或Cygwin? - user456814
1
可能需要考虑将此问题视为如何执行“git export”(类似于“svn export”)的重复问题。 - user456814
2个回答

7
这是一种实现方式:
mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir
git archive命令通常用于从存储库的内容生成归档文件。它将档案转储到标准输出,通常将其重定向到文件中。在这里,我们会有所改变:我们不会重定向,而是立即提取它到指定的目录中。目标目录必须先创建。
话虽如此,您似乎希望将其用于部署项目。我个人使用Git本身来部署项目。这样,您可以使用Git命令轻松升级和回滚。当然,.git目录将存在于部署目录中,另一方面,简单的复制将不会删除存储库中已删除的文件,它们将保留在目标位置。
最后,您可能会对我个人最喜欢的做法感兴趣:使用post-receive hook远程部署项目

5

选项一:排除.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 工具,则可以使用这些 Unix 工具,如 janos 的答案 中所述。另请参见如何执行“git export”(就像“svn export”)

# 选项3: 使用 git ls-files

编辑实际上在这种情况下有问题,因为我传递给cp的参数顺序错误 (把文件作为目标目录而不是源目录),所以现在擦掉这个吧。

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

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

@Cupcake 我认为你正在寻找 ... | xargs -I{} cp {} DEST - janos
@Andrius,你可以添加多个--exclude标志,例如:rsync -av --exclude='.git' --exclude='*~' source destination - janos
@Andrius,你能否尝试一下janos的答案?这可能更简单。 - user456814
@janos,由于某种原因,尝试排除'*~'并不起作用。这些带有~的文件在git中很重要吗?还是我可以直接删除它们并在git中添加忽略?我在排除文件中看到了一个选项,带有参数- *~? - Andrius
这是@Cupcake的答案,我只是在你的评论中添加了一个简单的注释来回答你的后续问题。如果这是你使用并喜欢的解决方案,你应该接受这个答案而不是我的。你可以投票支持每个人的答案,那会很好。 - janos
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接