我一直在想,是否有一个好的“gitexport”解决方案可以创建一个没有.git存储库目录的树的副本。我知道至少有三种方法:

git克隆,然后删除.git存储库目录。git签出索引暗示了这一功能,但以“只需将所需的树读入索引……”开头,我不完全确定该怎么做。gitexport是一个第三方脚本,本质上是将git克隆到临时位置,然后再将rsync--exclude='.git'复制到最终目标。

这些解决方案中没有一个让我感到满意。最接近svn导出的可能是选项1,因为两者都要求目标目录首先为空。但选项2似乎更好,假设我能够理解将树读入索引意味着什么。


当前回答

简单到克隆,然后删除.git文件夹:

git克隆url_of_your_repo路径到导出&&rm-rf路径到导出/.git

其他回答

我发现了选项2的含义。从存储库中,您可以执行以下操作:

git checkout-index -a -f --prefix=/destination/path/

路径结尾处的斜线很重要,否则将导致文件位于带有前缀“path”的/target中。

因为在正常情况下,索引包含存储库的内容,所以“将所需的树读入索引”没有什么特别的事情可做。它已经在那里了。

签出索引中的所有文件都需要-a标志(我不确定在这种情况下省略此标志意味着什么,因为它不能满足我的需要)。-f标志强制覆盖输出中的任何现有文件,而此命令通常不会这样做。

这似乎是我想要的那种“git导出”。

如果你想要一些与子模块一起工作的东西,这可能值得一试。

注:

MASTER_DIR=同时检出子模块的检出DEST_DIR=此导出的结束位置如果你有rsync,我想你可以用更少的球疼做同样的事情。

假设:

您需要从MASTER_DIR的父目录(即MASTER_DIRcd..)运行此命令DEST_DIR假定已创建。如果需要,这很容易修改为包含DEST_DIR的创建

cd MASTER_DIR&&tar-zcvf/DEST_DIR/export.tar.gz--exclude='.git*'.&&cd/DEST_DIR/&&tar xvfz导出.tar.gz&&rm导出.tar.gif

我需要这个作为部署脚本,但我不能使用上面提到的任何方法。相反,我想出了一个不同的解决方案:

#!/bin/sh
[ $# -eq 2 ] || echo "USAGE $0 REPOSITORY DESTINATION" && exit 1
REPOSITORY=$1
DESTINATION=$2
TMPNAME="/tmp/$(basename $REPOSITORY).$$"
git clone $REPOSITORY $TMPNAME
rm -rf $TMPNAME/.git
mkdir -p $DESTINATION
cp -r $TMPNAME/* $DESTINATION
rm -rf $TMPNAME

在寻找导出git存储库的方法时,我经常点击这个页面。我对这个问题的回答考虑了svn导出与git相比在设计上具有的三个财产,因为svn遵循集中存储库方法:

通过不导出所有修订,它可以最大限度地减少到远程存储库位置的流量它不在导出目录中包含元信息使用svn导出某个分支是通过指定适当的路径来完成的gitclone--深度1--分支主git://git.somewhere目的地路径rm-rf目标路径/.git

在构建某个版本时,克隆一个稳定的分支是很有用的,例如--branch stable或--branch release/0.9。

对于GitHub用户,gitarchive--remote方法无法直接工作,因为导出URL是短暂的。您必须向GitHub请求URL,然后下载该URL。卷曲使这变得容易:

curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | tar xzf -

这将在本地目录中提供导出的代码。例子:

$ curl -L https://api.github.com/repos/jpic/bashworks/tarball | tar xzf -
$ ls jpic-bashworks-34f4441/
break  conf  docs  hack  LICENSE  mlog  module  mpd  mtests  os  README.rst  remote  todo  vcs  vps  wepcrack

编辑如果您希望将代码放入特定的现有目录(而不是github中的随机目录):

curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | \
tar xzC /path/you/want --strip 1