如果你没有用.gitattributes
export-ignore
来排除文件,则尝试使用git checkout
mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout -f -q
-f
当从索引检出路径时,不要在未合并的条目上失败;而是忽略未合并的条目。
和
-q
避免冗长
此外,您可以获取任何分支、标签或特定提交版本,就像在SVN中添加SHA1一样(在Git中,SHA1相当于SVN中的修订号)。
mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout 2ef2e1f2de5f3d4f5e87df7d8 -f -q -- ./
/path/to/checkout/
目录必须为空,Git 不会删除任何文件,但会覆盖同名文件而不发出任何警告。
更新:
为避免在使用标签、分支或 SHA1 导出的 checkout 中出现问题,或在保留工作目录时出现问题,需要在结尾处添加 -- ./
双破折号 --
告诉 Git 破折号后面的一切都是路径或文件,并且在这种情况下还告诉 git checkout
不要改变 HEAD
。
示例:
此命令将仅获取 libs 目录以及该提交中的 readme.txt
文件。
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout fef2e1f2de5f3d4f5e87df7d8 -f -q -- ./libs ./docs/readme.txt
这将在HEAD^2
的前两个提交处创建(覆盖)my_file_2_behind_HEAD.txt
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout HEAD^2 -f -q -- ./my_file_2_behind_HEAD.txt
获取另一个分支的导出
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout myotherbranch -f -q -- ./
请注意,./
是相对于代码库根目录的。
git archive --format zip --output "output.zip" master -0
这个命令会生成一个未压缩的存档文件(-0 是未压缩的标志)。了解更多信息可以查看 http://git-scm.com/docs/git-archive。 - user456814git
,必须在服务器上启用archive
(所以我无法尝试)-从服务器进行“clone --depth 1”的操作仍然可能检索到大小为25 MB的仓库,其中.git
子文件夹单独占用了15MB。因此,我的答案仍然是“不行”。 - sdaaugit checkout-index
。 - nocachegit archive -o latest.zip HEAD
- Evgeni Sergeev